در یک جدول بزرگ از داده ها، اد دوست دارد بتواند به سرعت اسکن کند و ببیند آیا یک ستون خاص به طور فعال فیلتر می شود یا خیر. او نمی پرسد آیا راهی برای اعمال قالب بندی شرطی برای تغییر رنگ پس زمینه یک ستون وجود دارد، وقتی فیلتری در بازی وجود دارد که بر اساس آن ستون است.
چند راه وجود دارد که می توانید به این کار نزدیک شوید. همه آنها شامل ماکروها هستند و هدف هر ماکرو تعیین اینکه آیا فیلتر برای یک ستون خاص در حال بازی است یا خیر. یکی از گزینه ها ایجاد تابعی است که کاربرگ را برای یک فیلتر بررسی می کند و اگر یکی را در جای خود پیدا کرد، هر ستون را در ناحیه فیلتر شده بررسی کنید تا ببینید آیا فیلتری در آن ستون وجود دارد یا خیر. ماکرو زیر دقیقاً این کار را انجام می دهد.
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
اگر ماکرو فیلتری را که در حال کار است پیدا کند، اولین سلول جدول فیلتر شده یا کل ستونی را که فیلتر دارد (به رنگ زرد) برجسته می کند. تعیین اینکه آیا یک سلول یا کل ستون برجسته شده است بر اساس مقدار True/False اختصاص داده شده به متغیر bFullCol است.
اگر ترجیح می دهید، می توانید تابعی ایجاد کنید که بر اساس اینکه فیلتری برای یک ستون خاص وجود دارد یا خیر، True یا False را برمی گرداند. با چنین تابعی می توانید یک قانون قالب بندی شرطی ایجاد کنید که ستون را بر اساس مقدار بازگشتی قالب بندی می کند.
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
برای استفاده از این تابع، به سادگی از فرمولی مانند زیر در کاربرگ خود یا در قانون قالب بندی شرطی استفاده کنید:
=bHasFilter(F23)
این تابع ابتدا بررسی می کند که آیا فیلتری در کار است یا خیر. اگر چنین است، آنگاه محاسبه می کند که آیا ستون سلولی که به فرمول ارسال می شود در محدوده ستون های فیلتر شده قرار دارد یا خیر. (ردیف ارجاع شده در فرمول واقعاً مهم نیست.) اگر چنین است، بررسی می کند که آیا فیلتر برای آن ستون روشن است یا خیر.