Nhờ giúp đếm số dòng trống giữa các dòng dữ liệu

Liên hệ QC

luuchanhtrung

Thành viên mới
Tham gia
13/1/07
Bài viết
12
Được thích
0
Mình có một cột được đánh dấu chữ "x" một cách ngẫu nhiên. Giữa các chữ "x" là các hàng trống. Xin hỏi làm sao để tìm được số hàng trống lớn nhất giữa hai chữ "x" liên tiếp (kề nhau).

x

x




x





x




x










x
Xin cám ơn các bạn.
 
Mình có một cột được đánh dấu chữ "x" một cách ngẫu nhiên. Giữa các chữ "x" là các hàng trống. Xin hỏi làm sao để tìm được số hàng trống lớn nhất giữa hai chữ "x" liên tiếp (kề nhau)..

Giả sử vùng cần tính toán là A1:A99
Bạn sử dụng công thức sau :
{=MAX(LARGE(SMALL(IF($A$1:$A$99="x",ROW($A$1:$A$99),65537),ROW(INDIRECT("2:"&ROWS($A$1:$A$99))))-SMALL(IF($A$1:$A$99="x",ROW($A$1:$A$99),65537),ROW(INDIRECT("1:"&ROWS($A$1:$A$99)-1))),2))-1}

Bạn nhớ bấm Ctr+shift+enter sau khi nhập xong công thức nha.

PS : Mình quên là đề tài trong mục VBA, bạn tham khảo thêm vậy.
 

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
Mình tham gia hàm dem

Mã:
Public Function dem(cot As Long)
Dim s1, s2, i As Long
s1 = 0: s2 = 0
i = 1
Application.Volatile
Do While i <= Cells(65500, cot).End(xlUp).Row
If UCase(Cells(i, cot)) = "X" Then
If s2 < s1 Then s2 = s1
s1 = 0
Else
s1 = s1 + 1
End If
i = i + 1
Loop
dem = s2
End Function
Đếm trên cột 1 =dem(1)
 
Lần chỉnh sửa cuối:
Upvote 0
Thử cái này xem! Duyệt qua từng Areas tôi nghĩ sẽ nhanh hơn!
PHP:
Sub Test()
  Dim i As Long, Max As Long, Add As String
  With Range([A1], [A65536].End(xlUp)).SpecialCells(4)
    For i = 1 To .Areas.Count
      With .Areas(i)
        If Max < .Count Then Max = .Count: Add = .Address
      End With
    Next
  End With
  Range(Add).Select: MsgBox "So dong trong lon nhat la: " & Max
End Sub
Lưu ý: Vì tác giả nói rằng dử liệu chỉ toàn là chử X nên dùng code này... Nếu có các ký tự khác thì phải xem lại
 

File đính kèm

Upvote 0
Thử cái này xem! Duyệt qua từng Areas tôi nghĩ sẽ nhanh hơn!
Lưu ý: Vì tác giả nói rằng dử liệu chỉ toàn là chử X nên dùng code này... Nếu có các ký tự khác thì phải xem lại

@ ndu Tôi xem trong code có gì liên quan đến chữ X đâu vì vậy nó sẽ đúng trong mọi trường hợp chứ bạn.
 
Upvote 0
@ ndu Tôi xem trong code có gì liên quan đến chữ X đâu vì vậy nó sẽ đúng trong mọi trường hợp chứ bạn.
Chính vì tác giả nói trong dử liệu chỉ toàn chử X, vì ta ta đâu cần xét X với Y làm gì, Chỉ xét các khoảng trống mà thôi...
Còn như trong dử liệu có các dử liệu <> x thì khác à nha!
Hãy xem code này: Tìm khoảng trống lớn nhất với điều kiện 2 đầu khoảng trống đó phải là x
PHP:
Sub Test()
  Dim i As Long, Max As Long, Add As String
  With Range([A1], [A65536].End(xlUp)).SpecialCells(4)
    For i = 1 To .Areas.Count
      With .Areas(i)
        If Max < .Count And UCase(.Cells(0)) = "X" And UCase(.Cells(.Count + 1)) = "X" Then
          Max = .Count: Add = .Address
        End If
      End With
    Next
  End With
  Range(Add).Select: MsgBox "So dong trong lon nhat la: " & Max
End Sub
 

File đính kèm

Upvote 0
Gửi bạn thêm một cách dùng VBA. Đếm số ô trống lớn nhất có trong vùng chứa 2 ký tự "x" ở 2 đầu.
PHP:
Sub MaxBlanks()
Dim Rng As Range, MaxBlanks As Long, Addr As String
Dim LastCell As Range, Found1 As Range, Found2 As Range
With WorksheetFunction
Set Rng = Selection: Set LastCell = Rng(Rng.Cells.Count)
Set Found2 = Rng.Find(what:="x", After:=LastCell, LookAt:=xlWhole)
If Not Found2 Is Nothing Then
    Set Found1 = Found2: Addr = Found2.Address
    Do
        MaxBlanks = .Max(MaxBlanks, .CountBlank(Range(Found1, Found2)))
        Set Found1 = Found2: Set Found2 = Rng.FindNext(Found2)
    Loop While (Not Found2 Is Nothing) And Found2.Address <> Addr
End If
End With
MsgBox MaxBlanks
End Sub
 

File đính kèm

Upvote 0
Web KT

Bài viết mới nhất

Back
Top Bottom