1. Cách viết cơ bản:
Trên bảng tính, biểu tượng autofilter có hình tam giác ngược đầu hướng xuống phía dưới.
Xác định xem bảng tính có đang sử dụng Autofilter không, ta có thuộc tính của sheet là AutoFilterModel.
Nó sẽ trả về TRUE nếu như bảng tính đang dùng Autofilter, trả về là FALSE nếu không dùng AutoFilter.
Tôi hủy bỏ autofilter (sử dụng phím tắt ấn ALT+D+F+F)
Thử chạy lại macro:
2. Có đang thực hiện bộ lọc hay không?
Khi thiết định Autofilter, nhưng có hai trạng thái, chúng ta cho điều kiện vào để lọc, hoặc chưa cho điều kiện vào để lọc. Thực tế có chỉ định điều kiện nào hay không, ta có thuộc tính FilterMode. Ở đây rất dễ nhầm lẫn, hãy cẩn thận.
Có dùng AutoFilter hay không ta dùng thuộc tính AutoFilterMode, thuộc tính này thuộc sheet. Tuy nhiên, hiện trên bảng tính có thể hiện kết quả nào đó thỏa mãn điều kiện lọc hay không thì ta dùng thuộc tính FilterMode. Đây là thuộc tính thuộc AutoFilter. Do đó cách viết là:
AutoFilter.FilterMode
Bây giờ tôi hủy bỏ điều kiện lọc, cho hiển thị hết data nhưng vẫn còn giữ AutoFilter.
Chạy code:
3. Dòng nào thỏa mãn điều kiện lọc
Khi sử dụng bộ lọc và đưa điều kiện lọc vào, chúng ta muốn biết dòng dữ liệu nào thỏa mãn điều kiện, chúng ta sử dụng đối tượng Filter. Toàn bộ dòng dữ liệu là tập hợp các Filters. Hiểu nôm na mỗi dòng là một Filter.
Ta dùng thuộc tính ON của đối tượng Filter để xác nhận có thỏa mãn điều kiện lọc hay không.
Ở đây tôi sử dụng điều kiện lọc là cột B chọn Kihieu="A" và cột C chọn So > mức trung bình trong cột C.
Kết quả:
Bên trái là dữ liệu chưa cho điều kiện lọc vào. Bên phải là cho điều kiện lọc và chạy code.
Cột số 2 và cột số 3 là các cột đang đưa điều kiện lọc vào. (Chú ý, hình ảnh minh họa code trên có nhầm lẫn).
Việc tính toán như trên thật phiền phức, tóm lại là tôi đang sử dụng điều kiện lọc cho cột nào, tôi chạy code sau:
Chúng ta có thể kiểm chứng bằng cách trỏ chuột vào các vị trí, excel sẽ hiển thị điều kiện lọc.
4. Khi một điều kiện thỏa mãn:
Ở trên ta dùng hai điều kiện lọc đó là cột B=A, và cột C > trung bình. Tuy nhiên thực tế sẽ phức tạp hơn nhiều nếu như chúng ta phức hợp các điều kiện lọc bằng lệnh AND hoặc OR. Tôi sẽ trình bày mục số 4 này ở bài viết sau do tính chất phức tạp của nó.
Nguon tham khao:
Trên bảng tính, biểu tượng autofilter có hình tam giác ngược đầu hướng xuống phía dưới.
Xác định xem bảng tính có đang sử dụng Autofilter không, ta có thuộc tính của sheet là AutoFilterModel.
Nó sẽ trả về TRUE nếu như bảng tính đang dùng Autofilter, trả về là FALSE nếu không dùng AutoFilter.
Mã:
Sub Macro1()
If ActiveSheet.AutoFilterMode = True Then
MsgBox "Dang dung AutoFilter"
Else
MsgBox "Khong dung AutoFilter"
End If
End Sub
Bạn cần đăng nhập để thấy hình ảnh
Tôi hủy bỏ autofilter (sử dụng phím tắt ấn ALT+D+F+F)
Thử chạy lại macro:
Bạn cần đăng nhập để thấy hình ảnh
2. Có đang thực hiện bộ lọc hay không?
Khi thiết định Autofilter, nhưng có hai trạng thái, chúng ta cho điều kiện vào để lọc, hoặc chưa cho điều kiện vào để lọc. Thực tế có chỉ định điều kiện nào hay không, ta có thuộc tính FilterMode. Ở đây rất dễ nhầm lẫn, hãy cẩn thận.
Có dùng AutoFilter hay không ta dùng thuộc tính AutoFilterMode, thuộc tính này thuộc sheet. Tuy nhiên, hiện trên bảng tính có thể hiện kết quả nào đó thỏa mãn điều kiện lọc hay không thì ta dùng thuộc tính FilterMode. Đây là thuộc tính thuộc AutoFilter. Do đó cách viết là:
AutoFilter.FilterMode
Mã:
Sub Macro2()
If ActiveSheet.AutoFilterMode = True Then
If ActiveSheet.AutoFilter.FilterMode = True Then
MsgBox "Dang dung bo loc"
Else
MsgBox "Khong dung bo loc"
End If
End If
End Sub
Bạn cần đăng nhập để thấy hình ảnh
Bây giờ tôi hủy bỏ điều kiện lọc, cho hiển thị hết data nhưng vẫn còn giữ AutoFilter.
Chạy code:
Bạn cần đăng nhập để thấy hình ảnh
3. Dòng nào thỏa mãn điều kiện lọc
Khi sử dụng bộ lọc và đưa điều kiện lọc vào, chúng ta muốn biết dòng dữ liệu nào thỏa mãn điều kiện, chúng ta sử dụng đối tượng Filter. Toàn bộ dòng dữ liệu là tập hợp các Filters. Hiểu nôm na mỗi dòng là một Filter.
Ta dùng thuộc tính ON của đối tượng Filter để xác nhận có thỏa mãn điều kiện lọc hay không.
Mã:
Sub Macro3()
Dim i As Long, msg As String
With ActiveSheet
If .AutoFilterMode = True Then
For i = 1 To .AutoFilter.Filters.Count
If .AutoFilter.Filters(i).On = True Then
msg = msg & "cot thu " & i & vbCrLf
End If
Next i
End If
End With
MsgBox msg
End Sub
Kết quả:
Bạn cần đăng nhập để thấy hình ảnh
Bên trái là dữ liệu chưa cho điều kiện lọc vào. Bên phải là cho điều kiện lọc và chạy code.
Cột số 2 và cột số 3 là các cột đang đưa điều kiện lọc vào. (Chú ý, hình ảnh minh họa code trên có nhầm lẫn).
Việc tính toán như trên thật phiền phức, tóm lại là tôi đang sử dụng điều kiện lọc cho cột nào, tôi chạy code sau:
Mã:
Sub Macro4()
Dim i As Long, msg As String
With ActiveSheet
If .AutoFilterMode = True Then
For i = 1 To .AutoFilter.Filters.Count
If .AutoFilter.Filters(i).On = True Then
msg = msg & .AutoFilter.Range(i) & vbCrLf
End If
Next i
End If
End With
MsgBox msg
End Sub
Bạn cần đăng nhập để thấy hình ảnh
Chúng ta có thể kiểm chứng bằng cách trỏ chuột vào các vị trí, excel sẽ hiển thị điều kiện lọc.
Bạn cần đăng nhập để thấy hình ảnh
4. Khi một điều kiện thỏa mãn:
Ở trên ta dùng hai điều kiện lọc đó là cột B=A, và cột C > trung bình. Tuy nhiên thực tế sẽ phức tạp hơn nhiều nếu như chúng ta phức hợp các điều kiện lọc bằng lệnh AND hoặc OR. Tôi sẽ trình bày mục số 4 này ở bài viết sau do tính chất phức tạp của nó.
Nguon tham khao:
Bạn cần đăng nhập để thấy link
Sửa lần cuối bởi điều hành viên: