/ / Sorter fødselsdager i Excel VBA

Sorter fødselsdager i Excel VBA

Nedenfor ser vi på et program i Excel VBA at sorterer bursdager til måneder første og andre dager (så vi ignorererår). Vi ønsker bursdagen med det laveste månedenummeret på den første stillingen. Hvis det er fødselsdager med like månedstall, vil vi ha bursdagen med laveste dagstall først. Er du klar?

Situasjon:

Sorter Fødselsdager Eksempel

Merk: Datoer er i US Format. Måneder først, Dager andre. Denne typen format avhenger av dine regionale innstillinger for Windows.

1. Først erklærer vi åtte variabler. One Date-variabel vi kaller tempDate, en String-variabel vi kaller tempName. De andre seks variablene er helhetsvariabler med navn 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 neste løkker.

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

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

3. Vi initialiserer fire integervariabler. Vi bruker Måned-funksjonen for å få månedens dato og dagfunksjonen for å 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; dato for Niels blir valgt.

4. For å sortere datoene riktig, sammenligner vi den første datoen (monthToCheck og dayToCheck) med neste dato (monthNext and dayNext). Hvis neste dato er "lavere", bytter vi datoene og navnene. Legg til følgende Hvis så setning.

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

End If

Hvis ovennevnte setning er sant, bytter vi datoene og navnene.

For eksempel: for i = 2 og j = 3, er datoen for Bregje og Niels sjekket. MonthNext = 6, monthToCheck = 2. Ovennevnte setning er ikke sant siden monthNext er høyere enn monthToCheck. Excel VBA øker j ved 1 og gjentar kodelinjene for i = 2 og j = 4. Du kan enkelt se at Joost (j = 4) har et høyere månedstall enn Bregje, så vi går til neste. Vi får det samme resultatet 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. Nå er setningen ovenfor sant siden monthNext = monthToCheck og dayNext (9) er lavere enn dayToCheck (12).

5. Vi bytter datoene. Vi lagrer en tidsperiode midlertidig for midlertidig, slik at Excel VBA kan bytte datoene riktig. Legg til følgende kodelinjer i If-setningen.

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

6. Vi gjør det samme med navnene. Legg til følgende kodelinjer i If-setningen.

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

7. Vi lukker den andre For Next-løkken (Utenfor If-setningen).

Next j

For i = 2 og j = 7 byttet Excel VBA datoeneog navn. Det betyr at vi får Richard i første posisjon og Bregje på posisjon 7. Det betyr også at vi får en ny monthToCheck og dayToCheck ved starten av vår neste iterasjon (for i = 2 og j = 8). Vi vil nå sammenligne Richard med Dineke (j = 8). Du kan enkelt se at det ikke er nødvendig å erstatte disse datoene og navnene fordi Richard har en "lavere" dato. Faktisk er det ikke nødvendig å erstatte Richard (i = 2) med Jan (j = 9), Wendy (j = 10), Jeroen (j = 11), John (j = 12) og Debby = 13). Det er fordi Richard har "laveste" dato. På denne måten får Excel VBA (for i = 2) den "laveste" datoen i første posisjon. For å få den andre "laveste" datoen i den andre posisjonen, gjentar Excel VBA nøyaktig samme trinn for i = 3. For å få den tredje "laveste" datoen på den tredje posisjonen, gjentar Excel VBA nøyaktig samme trinn for i = 4, etc.

8. Lukk den første For neste sløyfe (Utenfor If-setningen).

Next i

9. Test programmet ditt.

Resultat:

Sorter fødselsdager i Excel VBA

Les også: