Sorter fødselsdage i Excel VBA - nemme Excel -makroer

Indholdsfortegnelse

Nedenfor ser vi på et program i Excel VBA at sorterer fødselsdage til måneder først og dage andet (så vi ignorerer år). Vi vil have fødselsdagen med det laveste månedstal på den første position. Hvis der er fødselsdage med lige månedstal, ønsker vi først fødselsdagen med det laveste dagnummer. Er du klar?

Situation:

Bemærk: Datoer er i amerikansk format. Måneder først, Dage andet. Denne type format afhænger af dine regionale indstillinger i Windows.

1. For det første erklærer vi otte variabler. En datavariabel kalder vi tempDate, en strengvariabel kalder vi tempName. De andre seks variabler er Integer -variabler med navnene monthToCheck, dayToCheck, monthNext, dayNext, i og 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. Vi starter to For Next loops.

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

Eksempel: for i = 2 kontrolleres j = 3, 4,…, 12 og 13.

3. Vi initialiserer fire heltalsvariabler. Vi bruger funktionen Måned til at få måneden for en dato og funktionen Dag til at få dagen for en dato.

monthToCheck = måned (celler (i, 2). værdi)
dayToCheck = dag (celler (i, 2). værdi)
monthNext = måned (celler (j, 2). værdi)
dayNext = dag (celler (j, 2). værdi)

For eksempel: i starten for i = 2; datoen for Bregje, og j = i + 1 = 2 + 1 = 3; datoen for Niels vælges.

4. For at sortere datoerne korrekt sammenligner vi den første dato (monthToCheck og dayToCheck) med den næste dato (monthNext og dayNext). Hvis den næste dato er 'lavere', bytter vi datoer og navne. Tilføj følgende If Then -erklæring.

Hvis (monthNext <monthToCheck) Eller (monthNext = monthToCheck og dayNext <dayToCheck) derefter
Afslut Hvis

Hvis ovenstående erklæring er sand, bytter vi datoer og navne.

For eksempel: for i = 2 og j = 3 kontrolleres datoen for Bregje og Niels. MonthNext = 6, monthToCheck = 2. Ovenstående sætning er ikke sand, da monthNext er højere end monthToCheck. Excel VBA øger j med 1 og gentager kodelinjerne for i = 2 og j = 4. Du kan let se, at Joost (j = 4) har et højere månedstal end Bregje, så vi går til det næste. Vi får det samme resultat for j = 5 og j = 6. Når vi ankommer til j = 7, har vi følgende variabler: monthNext = 2 og dayNext = 9. MonthToCheck = 2 og dayToCheck = 12. Nu er ovenstående sætning sand siden monthNext = monthToCheck og dayNext (9) er lavere end dayToCheck (12).

5. Vi bytter datoerne. Vi gemmer midlertidigt en dato til tempDate, så Excel VBA kan skifte datoerne korrekt. Tilføj følgende kodelinjer i If -sætningen.

'byt datoer
tempDate = Celler (i, 2) .Værdi
Celler (i, 2) .Værdi = Celler (j, 2) .Værdi
Celler (j, 2) .Værdi = tempDate

6. Vi gør det samme med navnene. Tilføj følgende kodelinjer i If -sætningen.

'skift navne
tempName = Celler (i, 1) .Værdi
Celler (i, 1) .Værdi = Celler (j, 1) .Værdi
Celler (j, 1) .Værdi = tempName

7. Vi lukker den anden For Næste loop (uden for If -sætningen).

Næste j

For i = 2 og j = 7 byttede Excel VBA datoer og navne. Det betyder, at vi får Richard på den første position og Bregje på position 7. Det betyder også, at vi får en ny månedToCheck og dayToCheck i starten af ​​vores næste iteration (for i = 2 og j = 8). Vi vil nu sammenligne Richard med Dineke (j = 8). Du kan let se, at der ikke er behov for at udskifte disse datoer og navne, fordi Richard har en 'lavere' dato. Faktisk er det ikke nødvendigt at erstatte Richard (i = 2) med Jan (j = 9), Wendy (j = 10), Jeroen (j = 11), John (j = 12) og Debby (j = 13). Det er fordi Richard har den 'laveste' dato. På denne måde får Excel VBA (for i = 2) den 'laveste' dato på den første position. For at få den anden 'laveste' dato på den anden position gentager Excel VBA de nøjagtig samme trin for i = 3. For at få den tredje 'laveste' dato på den tredje position gentager Excel VBA de nøjagtig samme trin for i = 4, etc.

8. Luk den første For Next loop (uden for If -sætningen).

Næste i

9. Test dit program.

Resultat:

Du vil bidrage til udviklingen af ​​hjemmesiden, at dele siden med dine venner

wave wave wave wave wave