/ / Sorteer Verjaardagen in Excel VBA

Sorteer Verjaardagen in Excel VBA

Hieronder zullen we een programma bekijken in Excel VBA dat sorteert verjaardagen tot maanden eerste en dagen seconden (dus we negerenjaar). We willen de verjaardag met het laagste maandnummer op de eerste positie. Als er verjaardagen zijn met gelijke maandnummers, willen we eerst de verjaardag met het laagste dagnummer. Ben je klaar?

Situatie:

Sorteer Verjaardagen Voorbeeld

Opmerking: Datums hebben de Amerikaanse indeling. Maanden eerst, dagen als tweede. Dit type indeling is afhankelijk van de regionale instellingen van Windows.

1. Eerst verklaren we acht variabelen. Eén datumvariabele die we tempDate noemen, één String-variabele die we tempName noemen. De andere zes variabelen zijn integer-variabelen met namen monthToCheck, dayToCheck, monthNext, dayNext, i en j.

Dim tempDate As Date, tempName As String
Dim monthToCheck As Integer, dayToCheck As Integer, monthNext As Integer, dayNext As Integer, i As Integer, j As Integer

2. We starten twee For Next-lussen.

For i = 2 To 13
    For j = i + 1 To 13

Voorbeeld: voor i = 2, j = 3, 4, ..., 12 en 13 worden gecontroleerd.

3. We initialiseren vier integer-variabelen. We gebruiken de maandfunctie om de maand van een datum te krijgen en de dagfunctie om de dag van een datum te krijgen.

monthToCheck = month(Cells(i, 2).Value)
dayToCheck = day(Cells(i, 2).Value)

monthNext = month(Cells(j, 2).Value)
dayNext = day(Cells(j, 2).Value)

Bijvoorbeeld: aan het begin, voor i = 2; de datum van Bregje, en j = i + 1 = 2 + 1 = 3; de datum van Niels zal worden gekozen.

4. Om de datums correct te sorteren, vergelijken we de eerste datum (maandToCheck en dagcontrole) met de volgende datum (maandVolgende en dagVolgende). Als de volgende datum "lager" is, ruilen we de datums en namen. Voeg de volgende If Then-instructie toe.

If (monthNext < monthToCheck) Or (monthNext = monthToCheck And dayNext < dayToCheck) Then

End If

Als de bovenstaande verklaring waar is, ruilen we de datums en namen.

Bijvoorbeeld: voor i = 2 en j = 3 worden de datum van Bregje en Niels gecontroleerd. MonthNext = 6, monthToCheck = 2. De bovenstaande verklaring is niet waar sinds maandVolgende hoger is dan maandToCheck. Excel VBA verhoogt j op 1 en herhaalt de coderegels voor i = 2 en j = 4. Je kunt gemakkelijk zien dat Joost (j = 4) een hoger maandnummer heeft dan Bregje, dus gaan we naar de volgende. We krijgen hetzelfde resultaat voor j = 5 en j = 6. Als we aankomen op j = 7, hebben we de volgende variabelen: monthNext = 2 and dayNext = 9. MonthToCheck = 2 and dayToCheck = 12. Nu is de bovenstaande verklaring waar sinds monthNext = monthToCheck en dayNext (9) is lager dan dayToCheck (12).

5. We ruilen de datums. We slaan tijdelijk een datum op voor tempDate, zodat Excel VBA de datums correct kan omwisselen. Voeg de volgende coderegels toe in de If-instructie.

"swap dates
tempDate = Cells(i, 2).Value
Cells(i, 2).Value = Cells(j, 2).Value
Cells(j, 2).Value = tempDate

6. We doen hetzelfde met de namen. Voeg de volgende coderegels toe in de If-instructie.

"swap names
tempName = Cells(i, 1).Value
Cells(i, 1).Value = Cells(j, 1).Value
Cells(j, 1).Value = tempName

7. We sluiten de tweede For Next-lus (Outside the If-instructie).

Next j

Voor i = 2 en j = 7 heeft Excel VBA de datums geruilden namen. Dat betekent dat we Richard op de eerste positie krijgen en Bregje op positie 7. Dat betekent ook dat we een nieuwe month to Check en dayToCheck krijgen aan het begin van onze volgende iteratie (voor i = 2 en j = 8). We zullen nu Richard vergelijken met Dineke (j = 8). U kunt gemakkelijk zien dat het niet nodig is om die datums en namen te vervangen omdat Richard een "lagere" datum heeft. In feite is het niet nodig om Richard (i = 2) te vervangen door Jan (j = 9), Wendy (j = 10), Jeroen (j = 11), John (j = 12) en Debby (j = 13). Dat komt omdat Richard de "laagste" datum heeft. Op deze manier krijgt Excel VBA (voor i = 2) de "laagste" datum op de eerste positie. Om de tweede "laagste" datum op de tweede positie te krijgen, herhaalt Excel VBA exact dezelfde stappen voor i = 3. Om de derde "laagste" datum op de derde positie te krijgen, herhaalt Excel VBA exact dezelfde stappen voor i = 4, enz.

8. Sluit de eerste lus Next (buiten de If-instructie).

Next i

9. Test je programma.

Resultaat:

Sorteer Verjaardagen in Excel VBA

Lees ook: