In einer großen Datentabelle möchte Ed schnell scannen und sehen können, ob eine bestimmte Spalte aktiv gefiltert wird. Er fragt sich, ob es eine Möglichkeit gibt, eine bedingte Formatierung anzuwenden, um die Hintergrundfarbe einer Spalte zu ändern, wenn ein Filter im Spiel ist, der auf dieser Spalte basiert.

Es gibt verschiedene Möglichkeiten, wie Sie sich dieser Aufgabe nähern können. Bei allen handelt es sich um Makros. Mit jedem Makro soll ermittelt werden, ob für eine bestimmte Spalte ein Filter im Spiel ist. Eine Möglichkeit besteht darin, eine Funktion zu erstellen, die das Arbeitsblatt auf einen Filter untersucht und, falls vorhanden, jede Spalte im gefilterten Bereich überprüft, um festzustellen, ob in dieser Spalte ein Filter im Spiel ist. Das folgende Makro macht genau das.

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

Wenn das Makro einen Filter findet, der gerade ausgeführt wird, wird entweder die erste Zelle in der gefilterten Tabelle oder die gesamte Spalte mit dem Filter hervorgehoben (gelb). Die Bestimmung, ob eine Zelle oder die gesamte Spalte hervorgehoben ist, basiert auf dem True / False-Wert, der der Variablen bFullCol zugewiesen ist.

Wenn Sie möchten, können Sie eine Funktion erstellen, die True oder False zurückgibt, je nachdem, ob ein Filter für eine bestimmte Spalte wirksam ist. Mit einer solchen Funktion können Sie eine bedingte Formatierungsregel erstellen, die die Spalte basierend auf dem zurückgegebenen Wert formatiert.

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

Um diese Funktion zu verwenden, verwenden Sie einfach eine Formel wie die folgende in Ihrem Arbeitsblatt oder in der bedingten Formatierungsregel:

=bHasFilter(F23)

Die Funktion prüft zunächst, ob ein Filter aktiv ist. Wenn ja, wird berechnet, ob die Spalte der an die Formel übergebenen Zelle im Bereich der gefilterten Spalten liegt. (Die Zeile, auf die in der Formel verwiesen wird, spielt keine Rolle.) Wenn ja, wird überprüft, ob der Filter für diese Spalte aktiviert ist.

_Hinweis: _

Wenn Sie wissen möchten, wie die auf dieser Seite (oder auf einer anderen Seite der ExcelTips-Websites) beschriebenen Makros verwendet werden, habe ich eine spezielle Seite vorbereitet, die hilfreiche Informationen enthält.

ExcelTips ist Ihre Quelle für kostengünstige Microsoft Excel-Schulungen.

Dieser Tipp (13410) gilt für Microsoft Excel 2007, 2010, 2013, 2016, 2019 und Excel in Office 365.