Định dạng cột dựa trên bộ lọc (Microsoft Excel)
Trong một bảng dữ liệu lớn, Ed muốn có thể nhanh chóng quét và xem liệu một cột cụ thể có đang được lọc tích cực hay không. Anh ấy tự hỏi liệu có cách nào áp dụng định dạng có điều kiện để thay đổi màu nền của cột khi có một bộ lọc đang phát dựa trên cột đó không.
Có một số cách bạn có thể tiếp cận nhiệm vụ này. Tất cả chúng đều liên quan đến macro và mục đích của mỗi macro là xác định xem một bộ lọc có đang hoạt động cho một cột cụ thể hay không. Một tùy chọn là tạo một hàm kiểm tra trang tính để tìm bộ lọc và nếu tìm thấy một bộ lọc ở đúng vị trí, hãy kiểm tra từng cột trong vùng được lọc để xem liệu cột đó có bộ lọc đang hoạt động hay không. Macro sau đây thực hiện điều đó.
Sub ColorFilterColumn() Dim flt As Filter Dim iCol As Integer Dim lRow As Long Dim rTemp As Range Dim bFullCol As Boolean ' Set as True if you want entire column shaded bFullCol = False If ActiveSheet.AutoFilterMode Then iCol = ActiveSheet.AutoFilter.Range.Column lRow = ActiveSheet.AutoFilter.Range.Row Application.EnableEvents = False For Each flt In ActiveSheet.AutoFilter.Filters If bFullCol Then Set rTemp = Cells(lRow, iCol).EntireColumn Else Set rTemp = Cells(lRow, iCol) End If If flt.On Then rTemp.Interior.Color = vbYellow Else rTemp.Interior.ColorIndex = xlColorIndexNone End If Set rTemp = Nothing iCol = iCol + 1 Next flt Application.EnableEvents = True End If End Sub
Nếu macro định vị bộ lọc đang hoạt động, nó sẽ đánh dấu (bằng màu vàng) ô đầu tiên trong bảng được lọc hoặc toàn bộ cột có bộ lọc. Việc xác định xem một ô hoặc toàn bộ cột được tô sáng dựa trên giá trị True / False được gán cho biến bFullCol.
Nếu muốn, bạn có thể tạo một hàm trả về True hoặc False dựa trên việc một bộ lọc có hiệu lực đối với một cột cụ thể hay không. Với một hàm như vậy, bạn có thể tạo quy tắc định dạng có điều kiện để định dạng cột dựa trên giá trị được trả về.
Function bHasFilter(rcell As Range) As Boolean Dim lBaseCol As Long Dim lCol As Long Application.Volatile bHasFilter = False If ActiveSheet.AutoFilterMode Then With ActiveSheet.AutoFilter lBaseCol = .Range.Column lCol = rcell.Column - lBaseCol + 1 If lCol > 0 And lCol <= .Filters.Count Then If .Filters(lCol).On Then bHasFilter = True End If End With End If End Function
Để sử dụng hàm này, chỉ cần sử dụng một công thức như sau trong trang tính của bạn hoặc trong quy tắc định dạng có điều kiện:
=bHasFilter(F23)
Trước tiên, hàm sẽ kiểm tra xem có bộ lọc nào đang có hiệu lực hay không. Nếu vậy, nó sẽ tính toán xem cột của ô được chuyển đến công thức có nằm trong phạm vi của các cột được lọc hay không. (Hàng được tham chiếu trong công thức không thực sự quan trọng.) Nếu vậy, nó sẽ kiểm tra xem bộ lọc có được bật cho cột đó hay không.
_Lưu ý: _
Nếu bạn muốn biết cách sử dụng các macro được mô tả trên trang này (hoặc trên bất kỳ trang nào khác trên trang ExcelTips), tôi đã chuẩn bị một trang đặc biệt bao gồm thông tin hữu ích.
ExcelTips là nguồn của bạn để đào tạo Microsoft Excel hiệu quả về chi phí.
Mẹo này (13410) áp dụng cho Microsoft Excel 2007, 2010, 2013, 2016, 2019 và Excel trong Office 365.