bác coi kỹ ví dụ và viết code cho ra y như vậy mà, em test code chạy nó báo sao ấy(hiện số liên tục). thanks bác
[GPECODE=vb]
Public Function XLBANKS(Source As Range) As Long
Dim rng As Range, Cells As Range, Count As Long
Set rng = Source.SpecialCells(4)
For Each Cells In rng.Areas
Count = Cells.Columns.Count
If Count > XLBANKS Then XLBANKS = Count
Next
End Function
[/GPECODE]
Mình nói là test code trong môi trường VBA ( cụ thể là sub Ktr()) , còn nếu bạn muốn dùng như một hàm tự tạo User Define thì 1 sự thật phũ phàng là kết quả chắc chắn sẽ không đúng và không chính xác!
Mình nhận thấy Khi sử dụng SpecialCells nên viết dưới dạng Marco ---> Vì Marco sẽ giống như " cặp mắt " của ta: ta nhìn thấy gì thì specialCells cũng thấy như thế
Còn nếu viết dưới dạng hàm người dùng thì phải cẩn thận, vì những gì ta thấy thì chưa chắc speciallCells đã thấy hay những gì ta không thấy thì speciallCells lại thấy
ví dụ :[GPECODE=vb]
Public Function Test(Rng As Range)
On Error Resume Next
Test = Rng.SpecialCells(xlCellTypeVisible).Cells.Count
End Function
Sub Tset()
On Error Resume Next
[D4] = Rng.SpecialCells(xlCellTypeVisible).Cells.Count
End Sub
[/GPECODE]
Tại ô D4 bạn gõ công thức Test kết quả sẽ khác với khi bạn chạy sub tset()
Good luck ,!



PS : bạn có thể dùng code này để tìm max các ô trống
[GPECODE=vb]
Function XLBANKS(Rng As Range) As Long
Dim tmparr, Item
Dim n As Long
tmparr = Rng.Value
For Each Item In tmparr
If Len(Item) Then
If n > XLBANKS Then XLBANKS = n
n = 0
Else
n = n + 1
End If
Next
End Function
[/GPECODE]