Autofilters in Excel 2007 en hoger

Filteren op kleur

We zijn inmiddels op pagina 3 aanbeland van dit artikel. Hier gaan we filteren op kleur, meer bepaald de achtergrondkleur van cellen of de kleur van de inhoud van cellen. We kunnen hierbij ook filteren op kleuren die door voorwaardelijke opmaak aangebracht worden. Voor filters op kleur passen we een xlFilterCellColor toe die we eerder in dit artikel zagen. Als we in kolom E op de rode achtergrondkleur filteren terwijl de macro recorder ingeschakeld is, dan komen we tot deze code:

Sub Autofilter_9a()
Range("A1").CurrentRegion.AutoFilter _ Field:=5, _ Criteria1:=RGB(255, 0, 0), _ Operator:=xlFilterCellColor
End Sub

Deze code laat ons m.a.w. toe om onze eigen RGB waarden mee te geven. We zien hier overigens de RGB waarden (Red/Green/Blue) voor de kleur rood: volledig Rood (255) en niets van Groen en Blauw (0). Een aantal kleuren kunnen we ook bij naam noemen. Dit geeft voor rood (en ingekorte notatie):

Sub Autofilter_9b()
Range("A1").CurrentRegion.AutoFilter 5, vbRed, xlFilterCellColor
End Sub

Je kan ook filteren op de kleur van een cel. De cel B26 is rood in het voorbeeldbestand, dus waarom niet aan VBA vragen om te kijken wat de kleur van die cel is, en vervolgens erop filteren. Dit kan zo alvast:

Sub Autofilter_9c()
Range("A1").CurrentRegion.AutoFilter 5, [B26].Interior.Color, xlFilterCellColor
End Sub

Voor het laatste codevoorbeeld met kleuren kom ik nog even terug op de RGB waarden. We hebben eerder al vastgesteld dat je de RGB waarden zelf kan ingeven. Je kan ze echter ook opvragen / berekenen aan de hand van een cel (of andere objecten zoals de kleur van de bladtab, een fontkleur van waarden in een cel, …). In het voorbeeld van alweer B26:

Sub Autofilter_9d()
Range("A1").CurrentRegion.AutoFilter _ 5, _ RGB(toonRGB_R([B26]), toonRGB_G([B26]), toonRGB_B([B26])), _ xlFilterCellColor
End Sub

Bij mijn weten kan je RGB waarden niet rechtstreeks opvragen; je moet berekenen. Ik geef jullie hieronder mijn functie mee om de Rood, Groen en Blauw waarden op te vragen aan de hand van een cel:

Function toonRGB_R(rCel As Range) As Integer
toonRGB_R = WorksheetFunction.Hex2Dec(Mid(Right("000000" & Hex(rCel.Interior.Color), 6), 5, 2))
End Function
Function toonRGB_G(rCel As Range) As Integer
toonRGB_G = WorksheetFunction.Hex2Dec(Mid(Right("000000" & Hex(rCel.Interior.Color), 6), 3, 2))
End Function
Function toonRGB_B(rCel As Range) As Integer
toonRGB_B = WorksheetFunction.Hex2Dec(Mid(Right("000000" & Hex(rCel.Interior.Color), 6), 1, 2))
End Function

Hierbij bepaal ik de teint van Rood, van Groen en van Blauw voor cel B26 aan de hand van 3 generieke functies: toonRGB_R, toonRGB_G, toonRGB_B. Elk resultaat is een integer input voor RGB binnen de autofilter.

Een mogelijke toepassing, hoewel niet direct gerelateerd met een autofilter, zit hem in het maken van een color picker: de gebruiker kiest een kleur en de functies bepalen de RGB waarden. Met simpele lussen kan je dan nieuwe kleurcombinaties bepalen en uitzetten op een userform of werkblad. Ter info: [B26] is gewoon verkorte notatie voor Range("B26").

In het voorbeeldbestand kan je onder Sub Autofilter_9e() een voorstel vinden met slechts 1 functie in plaats van 3 functies (niet afgedrukt hier). Onder Sub Autofilter_9f() staat code die hetzelfde doet, maar met kortere functies voor de RGB waarden (auteur: Snb):

Function interiorRGB_R(cel As Range)
interiorRGB_R = cel.Interior.Color Mod 256
End Function
Function interiorRGB_G(cel As Range)
interiorRGB_G = (cel.Interior.Color Mod 256 ^ 2) \ 256
End Function
Function interiorRGB_B(cel As Range)
interiorRGB_B = cel.Interior.Color \ 256 ^ 2
End Function

Een andere nuttige code is filteren door gebruik te maken van de ColorIndex van een cel (of ander object). Via Workbook.Colors() kan je de bijhorende kleur opvragen. Sub Autofilter_9c() wordt dan bijvoorbeeld:

Sub Autofilter_9g()
Range("A1").CurrentRegion.AutoFilter _ 5, ThisWorkbook.Colors([B26].Interior.ColorIndex), xlFilterCellColor
End Sub

2 belangrijke opmerkingen sluiten deze pagina af:

  • Ik herhaal dat een autofilter op achtergrondkleur, kleur van celwaarden of iconen ook voorwaardelijke opmaak ondersteunt. Dit is een interessante toevoeging in Excel 2007;
  • Ook de kleuren die we zetten via Getalopmaak worden weerhouden bij het filteren op kleuren!

Wordt vervolgd…

Op de volgende pagina gaan we meerdere afzonderlijke waarden selecteren.

Over Wim

Wim Gielis is Business Intelligence consultant en Excel expert

Andere links