Spaltenformatierung basierend auf einem Filter (Microsoft Excel)
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.