Gegevens Sorteren en Filteren
Veeg om het menu te tonen
Filteren beperkt wat zichtbaar is zonder de onderliggende gegevens aan te passen — essentieel voor het maken van een rapport dat slechts één maand of één regio tegelijk toont.
Basis AutoFilter
tbl.Range.AutoFilter Field:=1, Criteria1:="January"
' Field:=1 means the 1st column of the table (Month)
AutoFilter verwijdert of verplaatst geen gegevens — het verbergt de rijen die niet overeenkomen, precies alsof je handmatig op de vervolgkeuzepijl had geklikt en alles behalve January had uitgevinkt. Field:=1 telt kolommen vanaf 1 binnen de Table zelf (Month, Region, Sales, Expenses, Profit, Target — dus Region is Field:=2, Profit Field:=5), daarom moet deze regel worden aangepast als de kolommen ooit worden herschikt.
Filters met meerdere voorwaarden
Filteren op meer dan één waarde in dezelfde kolom vereist xlFilterValues en een array met criteria:
tbl.Range.AutoFilter Field:=2, _
Criteria1:=Array("North", "Central"), _
Operator:=xlFilterValues
Vergelijk dit met het filteren op één waarde hierboven: Criteria1 bevat nu een Array(...) met toegestane waarden in plaats van één enkele string, en Operator:=xlFilterValues geeft aan AutoFilter door dat deze array als een lijst met overeenkomsten moet worden behandeld in plaats van als één enkele criteria-expressie. Laat je Operator:=xlFilterValues weg, dan geeft deze regel een foutmelding of werkt onverwacht — het is makkelijk te vergeten en het loont om dit altijd te controleren wanneer Criteria1 een lijst is.
Filteren op een numerieke voorwaarde — bijvoorbeeld alleen rijen waar Profit de Target met een ruime marge overschrijdt — gebruikt in plaats daarvan vergelijkingsoperatoren:
tbl.Range.AutoFilter Field:=5, Criteria1:=">15000"
Let op: ">15000" is geschreven als tekst tussen aanhalingstekens, ook al is het een numerieke vergelijking — AutoFilter verwacht Criteria1 altijd als een string en verwerkt het leidende > zelf. Criteria1:=15000 zonder het > zou filteren op rijen die exact gelijk zijn aan 15000 in plaats van groter dan 15000, wat een veelgemaakte fout is.
Sorteren
Het Sort-object ondersteunt meerdere sleutels, precies zoals het dialoogvenster Data → Sort:
With tbl.Sort
.SortFields.Clear
.SortFields.Add2 Key:=tbl.ListColumns("Month").Range, _
SortOn:=xlSortOnValues, Order:=xlAscending
.SortFields.Add2 Key:=tbl.ListColumns("Profit").Range, _
SortOn:=xlSortOnValues, Order:=xlDescending
.Header = xlYes
.Apply
End With
.SortFields.Clear wordt als eerste uitgevoerd zodat overgebleven sorteersleutels van een vorige macro-run (of van een gebruiker die eerder handmatig de Table sorteerde) niet ongemerkt worden gecombineerd met de nieuwe — altijd wissen voordat je toevoegt. De volgorde waarin de twee .Add2-aanroepen verschijnen is net zo belangrijk als hun Order:=xlAscending/xlDescending instellingen: de eerste die wordt toegevoegd, wordt de primaire sorteersleutel (Month), en de tweede wordt de beslissende factor binnen elke groep (Profit, hoogste eerst binnen elke maand). .Header = xlYes geeft aan Excel aan dat rij 1 een kop is en nooit door de sortering mag worden verplaatst; .Apply voert daadwerkelijk de sortering uit — alles ervoor bouwt alleen de instructies op.
Filters wissen
Wis altijd filters aan het begin van een rapportmacro, zodat elke uitvoering begint vanuit een bekende, niet-gefilterde toestand:
If tbl.AutoFilter.FilterMode Then
tbl.AutoFilter.ShowAllData
End If
FilterMode is een Boolean die True is wanneer een filter momenteel de zichtbare rijen van de Table beperkt — dit eerst controleren voorkomt een runtime-fout, omdat het aanroepen van ShowAllData wanneer er niets gefilterd is een foutmelding geeft in plaats van stilletjes niets te doen.
Taak
- Schrijf een macro die tblReports filtert op alleen februari, met gebruik van
AutoFilter Field:=1. - Breid deze uit om Regio (Field:=2) te filteren op alleen "East" en "West" tegelijk, met gebruik van
xlFilterValues. - Wis beide filters, sorteer vervolgens de tabel eerst op Regio oplopend en daarna op Winst aflopend, met gebruik van het hierboven getoonde Sort-object.
1. Filteren op februari
Field:=1verwijst naar de eerste kolom van de Tabel, niet van het werkblad — Maand is kolom 1 binnentblReports, ongeacht in welke werkbladkolom deze fysiek staat.Criteria1neemt de exacte tekst waarop je filtert, tussen aanhalingstekens.- Je roept
AutoFilteraan optbl.Range, niet direct op het werkblad.
2. De Regio-filter toevoegen
- Regio is de tweede kolom van de tabel, dus dat is een ander
Field:=nummer dan de Maand-filter. - Filteren op twee waarden in dezelfde kolom vereist
Criteria1:=Array(...)met beide waarden erin, plusOperator:=xlFilterValues— het weglaten van deze operator is de meest voorkomende fout hier. - Beide filters (Maand en Regio) kunnen tegelijk actief zijn — roep
AutoFiltertwee keer aan, één keer per kolom.
3. Filters wissen en sorteren
- Controleer
tbl.AutoFilter.FilterModevoordat jeShowAllDataaanroept — als je deze aanroept wanneer er niets gefilterd is, krijg je een foutmelding. - Het
Sort-object vereist eerst.SortFields.Clear, daarna één.SortFields.Add2per sorteerniveau — de volgorde waarin je ze toevoegt bepaalt welke de primaire sleutel is en welke de tie-breaker, niet de volgorde waarin ze in de tabel staan. - Regio oplopend moet vóór Winst aflopend worden toegevoegd, omdat Regio de primaire sortering moet zijn.
Option Explicit
Sub FilterToFebruary()
Dim tbl As ListObject
Set tbl = ThisWorkbook.Worksheets("Reports").ListObjects("tblReports")
tbl.Range.AutoFilter Field:=1, Criteria1:="February"
End Sub
Sub FilterFebruaryEastWest()
Dim tbl As ListObject
Set tbl = ThisWorkbook.Worksheets("Reports").ListObjects("tblReports")
tbl.Range.AutoFilter Field:=1, Criteria1:="February"
tbl.Range.AutoFilter Field:=2, _
Criteria1:=Array("East", "West"), _
Operator:=xlFilterValues
End Sub
Sub ClearFiltersAndSort()
Dim tbl As ListObject
Set tbl = ThisWorkbook.Worksheets("Reports").ListObjects("tblReports")
' Clear any active filters
If tbl.AutoFilter.FilterMode Then
tbl.AutoFilter.ShowAllData
End If
' Sort by Region ascending, then Profit descending
With tbl.Sort
.SortFields.Clear
.SortFields.Add2 Key:=tbl.ListColumns("Region").Range, _
SortOn:=xlSortOnValues, Order:=xlAscending
.SortFields.Add2 Key:=tbl.ListColumns("Profit").Range, _
SortOn:=xlSortOnValues, Order:=xlDescending
.Header = xlYes
.Apply
End With
End Sub
Voer FilterFebruaryEastWest uit en je ziet alleen de rijen van februari voor de regio's East en West. Voer daarna ClearFiltersAndSort uit — alle rijen verschijnen weer, gesorteerd eerst op Regio (alfabetisch), en binnen elke Regio verschijnt de hoogste Winst bovenaan.
Bedankt voor je feedback!
Vraag AI
Vraag AI
Vraag wat u wilt of probeer een van de voorgestelde vragen om onze chat te starten.
Gegevens Sorteren en Filteren
Filteren beperkt wat zichtbaar is zonder de onderliggende gegevens aan te passen — essentieel voor het maken van een rapport dat slechts één maand of één regio tegelijk toont.
Basis AutoFilter
tbl.Range.AutoFilter Field:=1, Criteria1:="January"
' Field:=1 means the 1st column of the table (Month)
AutoFilter verwijdert of verplaatst geen gegevens — het verbergt de rijen die niet overeenkomen, precies alsof je handmatig op de vervolgkeuzepijl had geklikt en alles behalve January had uitgevinkt. Field:=1 telt kolommen vanaf 1 binnen de Table zelf (Month, Region, Sales, Expenses, Profit, Target — dus Region is Field:=2, Profit Field:=5), daarom moet deze regel worden aangepast als de kolommen ooit worden herschikt.
Filters met meerdere voorwaarden
Filteren op meer dan één waarde in dezelfde kolom vereist xlFilterValues en een array met criteria:
tbl.Range.AutoFilter Field:=2, _
Criteria1:=Array("North", "Central"), _
Operator:=xlFilterValues
Vergelijk dit met het filteren op één waarde hierboven: Criteria1 bevat nu een Array(...) met toegestane waarden in plaats van één enkele string, en Operator:=xlFilterValues geeft aan AutoFilter door dat deze array als een lijst met overeenkomsten moet worden behandeld in plaats van als één enkele criteria-expressie. Laat je Operator:=xlFilterValues weg, dan geeft deze regel een foutmelding of werkt onverwacht — het is makkelijk te vergeten en het loont om dit altijd te controleren wanneer Criteria1 een lijst is.
Filteren op een numerieke voorwaarde — bijvoorbeeld alleen rijen waar Profit de Target met een ruime marge overschrijdt — gebruikt in plaats daarvan vergelijkingsoperatoren:
tbl.Range.AutoFilter Field:=5, Criteria1:=">15000"
Let op: ">15000" is geschreven als tekst tussen aanhalingstekens, ook al is het een numerieke vergelijking — AutoFilter verwacht Criteria1 altijd als een string en verwerkt het leidende > zelf. Criteria1:=15000 zonder het > zou filteren op rijen die exact gelijk zijn aan 15000 in plaats van groter dan 15000, wat een veelgemaakte fout is.
Sorteren
Het Sort-object ondersteunt meerdere sleutels, precies zoals het dialoogvenster Data → Sort:
With tbl.Sort
.SortFields.Clear
.SortFields.Add2 Key:=tbl.ListColumns("Month").Range, _
SortOn:=xlSortOnValues, Order:=xlAscending
.SortFields.Add2 Key:=tbl.ListColumns("Profit").Range, _
SortOn:=xlSortOnValues, Order:=xlDescending
.Header = xlYes
.Apply
End With
.SortFields.Clear wordt als eerste uitgevoerd zodat overgebleven sorteersleutels van een vorige macro-run (of van een gebruiker die eerder handmatig de Table sorteerde) niet ongemerkt worden gecombineerd met de nieuwe — altijd wissen voordat je toevoegt. De volgorde waarin de twee .Add2-aanroepen verschijnen is net zo belangrijk als hun Order:=xlAscending/xlDescending instellingen: de eerste die wordt toegevoegd, wordt de primaire sorteersleutel (Month), en de tweede wordt de beslissende factor binnen elke groep (Profit, hoogste eerst binnen elke maand). .Header = xlYes geeft aan Excel aan dat rij 1 een kop is en nooit door de sortering mag worden verplaatst; .Apply voert daadwerkelijk de sortering uit — alles ervoor bouwt alleen de instructies op.
Filters wissen
Wis altijd filters aan het begin van een rapportmacro, zodat elke uitvoering begint vanuit een bekende, niet-gefilterde toestand:
If tbl.AutoFilter.FilterMode Then
tbl.AutoFilter.ShowAllData
End If
FilterMode is een Boolean die True is wanneer een filter momenteel de zichtbare rijen van de Table beperkt — dit eerst controleren voorkomt een runtime-fout, omdat het aanroepen van ShowAllData wanneer er niets gefilterd is een foutmelding geeft in plaats van stilletjes niets te doen.
Taak
- Schrijf een macro die tblReports filtert op alleen februari, met gebruik van
AutoFilter Field:=1. - Breid deze uit om Regio (Field:=2) te filteren op alleen "East" en "West" tegelijk, met gebruik van
xlFilterValues. - Wis beide filters, sorteer vervolgens de tabel eerst op Regio oplopend en daarna op Winst aflopend, met gebruik van het hierboven getoonde Sort-object.
1. Filteren op februari
Field:=1verwijst naar de eerste kolom van de Tabel, niet van het werkblad — Maand is kolom 1 binnentblReports, ongeacht in welke werkbladkolom deze fysiek staat.Criteria1neemt de exacte tekst waarop je filtert, tussen aanhalingstekens.- Je roept
AutoFilteraan optbl.Range, niet direct op het werkblad.
2. De Regio-filter toevoegen
- Regio is de tweede kolom van de tabel, dus dat is een ander
Field:=nummer dan de Maand-filter. - Filteren op twee waarden in dezelfde kolom vereist
Criteria1:=Array(...)met beide waarden erin, plusOperator:=xlFilterValues— het weglaten van deze operator is de meest voorkomende fout hier. - Beide filters (Maand en Regio) kunnen tegelijk actief zijn — roep
AutoFiltertwee keer aan, één keer per kolom.
3. Filters wissen en sorteren
- Controleer
tbl.AutoFilter.FilterModevoordat jeShowAllDataaanroept — als je deze aanroept wanneer er niets gefilterd is, krijg je een foutmelding. - Het
Sort-object vereist eerst.SortFields.Clear, daarna één.SortFields.Add2per sorteerniveau — de volgorde waarin je ze toevoegt bepaalt welke de primaire sleutel is en welke de tie-breaker, niet de volgorde waarin ze in de tabel staan. - Regio oplopend moet vóór Winst aflopend worden toegevoegd, omdat Regio de primaire sortering moet zijn.
Option Explicit
Sub FilterToFebruary()
Dim tbl As ListObject
Set tbl = ThisWorkbook.Worksheets("Reports").ListObjects("tblReports")
tbl.Range.AutoFilter Field:=1, Criteria1:="February"
End Sub
Sub FilterFebruaryEastWest()
Dim tbl As ListObject
Set tbl = ThisWorkbook.Worksheets("Reports").ListObjects("tblReports")
tbl.Range.AutoFilter Field:=1, Criteria1:="February"
tbl.Range.AutoFilter Field:=2, _
Criteria1:=Array("East", "West"), _
Operator:=xlFilterValues
End Sub
Sub ClearFiltersAndSort()
Dim tbl As ListObject
Set tbl = ThisWorkbook.Worksheets("Reports").ListObjects("tblReports")
' Clear any active filters
If tbl.AutoFilter.FilterMode Then
tbl.AutoFilter.ShowAllData
End If
' Sort by Region ascending, then Profit descending
With tbl.Sort
.SortFields.Clear
.SortFields.Add2 Key:=tbl.ListColumns("Region").Range, _
SortOn:=xlSortOnValues, Order:=xlAscending
.SortFields.Add2 Key:=tbl.ListColumns("Profit").Range, _
SortOn:=xlSortOnValues, Order:=xlDescending
.Header = xlYes
.Apply
End With
End Sub
Voer FilterFebruaryEastWest uit en je ziet alleen de rijen van februari voor de regio's East en West. Voer daarna ClearFiltersAndSort uit — alle rijen verschijnen weer, gesorteerd eerst op Regio (alfabetisch), en binnen elke Regio verschijnt de hoogste Winst bovenaan.
Bedankt voor je feedback!