Verjaardagen sorteren in Excel VBA - Eenvoudige Excel-macro's

Inhoudsopgave

Hieronder zullen we kijken naar een programma in Excel VBA Dat soorten verjaardagen naar maanden eerst en dagen als tweede (dus we negeren jaren). 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:

Opmerking: datums zijn in Amerikaans formaat. Maanden eerst, dagen tweede. Dit type indeling is afhankelijk van de regionale instellingen van uw Windows.

1. Eerst declareren we acht variabelen. Een datumvariabele noemen we tempDate, een stringvariabele noemen we tempName. De andere zes variabelen zijn Integer-variabelen met de namen monthToCheck, dayToCheck, monthNext, dayNext, i en j.

Dim tempDate als datum, tempName als string
Dim maandToCheck As Integer, dayToCheck As Integer, MonthNext As Integer, dayNext As Integer, i As Integer, j As Integer

2. We starten twee For Next-lussen.

Voor i = 2 tot 13
Voor j = i + 1 tot 13

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

3. We initialiseren vier Integer-variabelen. We gebruiken de functie Maand om de maand van een datum te krijgen en de functie Dag om de dag van een datum te krijgen.

MonthToCheck = maand(Cellen(i, 2).Waarde)
dayToCheck = dag(Cellen(i, 2).Waarde)
maandVolgende = maand(Cellen(j, 2).Waarde)
dagVolgende = dag(Cellen(j, 2).Waarde)

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

4. Om de datums goed te sorteren, vergelijken we de eerste datum (monthToCheck en dayToCheck) met de volgende datum (monthNext en dayNext). Als de volgende datum 'lager' is, wisselen we de data en namen om. Voeg de volgende If Then-instructie toe.

If (monthNext < monthToCheck) Of (monthNext = monthToCheck en dayNext < dayToCheck) Then
Stop als

Als bovenstaande bewering waar is, wisselen we de datums en namen om.

Bijvoorbeeld: voor i = 2 en j = 3 wordt de datum van Bregje en Niels gecontroleerd. MonthNext = 6, MonthToCheck = 2. De bovenstaande verklaring is niet waar omdat MonthNext hoger is dan MonthToCheck. Excel VBA verhoogt j met 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 bij j = 7 komen, hebben we de volgende variabelen: maandVolgende = 2 en dagVolgende = 9. MonthToCheck = 2 en dayToCheck = 12. Nu is de bovenstaande bewering waar sinds maandVolgende = MonthToCheck en dayNext (9) is lager dan dayToCheck (12).

5. We wisselen de data om. We slaan tijdelijk één datum op in tempDate, zodat Excel VBA de datums goed kan verwisselen. Voeg de volgende coderegels toe aan de If-instructie.

'datums ruilen'
tempDate = Cellen (i, 2). Waarde
Cellen(i, 2).Waarde = Cellen(j, 2).Waarde
Cellen (j, 2). Waarde = tempDate

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

'namen verwisselen'
tempName = Cellen (i, 1). Waarde
Cellen(i, 1).Waarde = Cellen(j, 1).Waarde
Cellen (j, 1). Waarde = tempNaam

7. We sluiten de tweede For Next-lus (buiten het If-statement).

volgende j

Voor i = 2 en j = 7 heeft Excel VBA de datums en namen verwisseld. Dat betekent dat we Richard op de eerste positie krijgen en Bregje op positie 7. Dat betekent ook dat we een nieuwe maandToCheck en dayToCheck krijgen aan het begin van onze volgende iteratie (voor i = 2 en j = 8). We gaan Richard nu vergelijken met Dineke (j = 8). Je kunt gemakkelijk zien dat het niet nodig is om die datums en namen te vervangen omdat Richard een 'lagere' datum heeft. Het is trouwens 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 For Next-lus (buiten de If-instructie).

volgende i

9. Test je programma.

Resultaat:

U zal helpen de ontwikkeling van de site, het delen van de pagina met je vrienden

wave wave wave wave wave