Menu Sluiten

Sorteren in een macro

sorteren macro vba

Als je goed inzicht wilt verkrijgen in een ruwe dataset dan zijn er 2 hulpmiddelen die onmisbaar zijn, namelijk filteren en sorteren. Je kunt dit soort acties uitvoeren en tegelijkertijd opnemen met de macro recorder , maar de code die dan verschijnt is vaak onnodig lang. In dit artikel leer ik hoe je de code voor het sorteren netjes zelf kunt uitwerken, zodat je code korter en leesbaar blijft.

 

Sorteercode met behulp van de macro recorder

Laten wij eenvoudig beginnen door een rij met zeven willekeurige cijfers in een enkele kolom (kolom B bijvoorbeeld) te plaatsen. Stel wij willen deze cijfers sorteren in een macro door ze van laag naar hoog te laten oplopen. Als we deze actie nu zouden opnemen met een macro recorder dan zou de code er als volgt uitzien.

Sub Macro1()
'
' Macro1 Macro
'

'
    Range("B2:B8").Select
    ActiveWorkbook.Worksheets("filterTab").Sort.SortFields.Clear
    ActiveWorkbook.Worksheets("filterTab").Sort.SortFields.Add2 Key:=Range( _
        "B2:B8"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
        xlSortNormal
    With ActiveWorkbook.Worksheets("filterTab").Sort
        .SetRange Range("B2:B8")
        .Header = xlNo
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With
End Sub

Sorteercode zelf geschreven met VBA

Net als bij het filteren staan er veel elementen in de opname die bij een simpele actie als deze geen toevoeging hebben aan het resultaat. Je zult verbaasd zijn hoe weinig code je nodig hebt om hetzelfde resultaat te bereiken.

Sub SorteerOefening1()
    
    ThisWorkbook.Sheets("Blad1").Range("B2:B8").Sort Key1:=Range("B2"), Order1:=xlAscending

End Sub

Ja, je ziet het goed. Slechts één enkele regel code heb je nodig om een dataset te sorteren in een macro. Indien je dataset groter wordt of je wilt meerdere sorteersleutels toevoegen dan word je code daar niet veel complexer door. Een extra sorteersleutel voeg je toe door een ‘Key2’ plus bijbehorende range toe te voegen aan de onderstaande code. Met een ‘Order2’ geef je dan weer aan hoe je deze 2e sorteersleutel wilt laten sorteren. Stel je data bevat tekst in kolom C die je op alfabetische volgorde wilt sorteren. Dat schrijf je dan als volgt.

ThisWorkbook.Sheets("Blad1").Range("B2:C8").Sort Key1:=Range("B2"), Key2:=Range("C2"), Order1:=xlAscending, Order2:=xlAscending

Mocht je data overigens een header regel bevatten die onderdeel is van je range, maar die je niet gesorteerd wilt zien dan kun je dit simpel verwerken in dezelfde regel code door Header:=XlYes te plaatsen. 

ThisWorkbook.Sheets("Blad1").Range("B2:C8").Sort Key1:=Range("B2"), Key2:=Range("C2"), Order1:=xlDescending, Order2:=xlDescending, Header:=xlYes

De sorteermethode bestaat dus simpel gezegd maar uit 3 onderdelen: 

  1. Key (sorteersleutel)
  2. Order (hoe je de volgorde bepaalt)
  3. Header (Is er een header in je dataset?)

In de voorgaande voorbeelden hebben we tot nu toe alleen de ‘Order’ ‘xlAscending’ gebruikt. Dit betekent van laag naar hoog of als het tekst betreft op alfabetische volgorde. Indien het andersom gesorteerd dient te worden kun je daar ‘xlDescending’ van maken.

Mocht je na het lezen van dit artikel toch nog vragen hebben met betrekking tot het sorteren van data in een macro. Laat het weten in de reacties!

Heeft dit artikel je geholpen?

2 reacties

  1. Pingback:Filteren in een macro - Macro Excel Advies

  2. Pingback:Ranges in VBA -

Geef een reactie

Je e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *