/ / Sorter fødselsdage i Excel VBA

Sorter fødselsdage i Excel VBA

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

Situation:

Sorter fødselsdage Eksempel

Bemærk: Datoer er i US Format. Måneder første, Days second. Denne type format afhænger af dine Windows-regionale indstillinger.

1. Først erklærer vi otte variabler. One Date-variabel vi kalder tempDate, en String-variabel vi kalder tempName. De øvrige seks variabler er integervariabler med navne 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 til næste løkker.

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

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

3. Vi initialiserer fire integervariabler. Vi bruger funktionen Måned for at få månedens dato og dagfunktionen for at få dagen til en dato.

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

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

For eksempel: i starten, for i = 2; datoen for Bregje, og j = i + 1 = 2 + 1 = 3; Datoen for Niels bliver valgt.

4. For at sortere datoerne korrekt sammenligner vi den første dato (monthToCheck og dayToCheck) med den næste dato (månedNæste og dagNæste). Hvis den næste dato er "lavere", bytter vi datoer og navne. Tilføj følgende Hvis så erklæring.

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

End If

Hvis ovenstående erklæring er sandt, 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 erklæring er ikke rigtig siden monthNext er højere end monthToCheck. Excel VBA øges j ved 1 og gentager kodelinjerne for i = 2 og j = 4. Du kan nemt se, at Joost (j = 4) har et højere månedstal end Bregje, så vi går til den næste. Vi får det samme resultat for j = 5 og j = 6. Når vi kommer til j = 7, har vi følgende variabler: monthNext = 2 og dayNext = 9. MonthToCheck = 2 og dayToCheck = 12. Nu er ovenstående sætning sande siden monthNext = monthToCheck og dayNext (9) er lavere end dayToCheck (12).

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

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

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

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

7. Vi lukker den anden For Next-løkke (uden for If-sætningen).

Next j

For i = 2 og j = 7 byttede Excel VBA datoerneog navne. Det betyder at vi får Richard i 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 nemt se, at der ikke er behov for at erstatte disse datoer og navne, fordi Richard har en "lavere" dato. Der er faktisk ingen grund til at erstatte Richard (i = 2) med Jan (j = 9), Wendy (j = 10), Jeroen (j = 11), John (j = 12) og Debby = 13). Det skyldes, at Richard har den "laveste" dato. På denne måde får Excel VBA (for i = 2) den "laveste" dato i den første position. For at få den anden "laveste" dato i anden position gentager Excel VBA de nøjagtige samme trin for i = 3. For at få den tredje "laveste" dato i den tredje position gentager Excel VBA de samme trin for i = 4, etc.

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

Next i

9. Test dit program.

Resultat:

Sorter fødselsdage i Excel VBA

Læs også: