/ / Geburtstage in Excel VBA sortieren

Geburtstage in Excel VBA sortieren

Unten sehen wir uns ein Programm in Excel VBA Das sortiert Geburtstage Monate zuerst und Tage Sekunden (also ignorieren wirJahre). Wir wollen den Geburtstag mit der niedrigsten Monatsnummer an der ersten Position. Wenn es Geburtstage mit gleichen Monatszahlen gibt, möchten wir zuerst den Geburtstag mit der niedrigsten Tagesnummer. Sind Sie bereit?

Situation:

Geburtstage sortieren Beispiel

Hinweis: Datumsangaben sind im US-Format. Monate zuerst, Tage zweit. Diese Art von Format hängt von Ihren regionalen Windows-Einstellungen ab.

1. Zuerst deklarieren wir acht Variablen. Eine Date-Variable, die wir tempDate nennen, eine String-Variable, die wir TempName nennen. Die anderen sechs Variablen sind Integer-Variablen mit den Namen monthToCheck, dayToCheck, monthNext, dayNext, i und 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. Wir starten zwei For Next-Schleifen.

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

Beispiel: Für i = 2 werden j = 3, 4, ..., 12 und 13 überprüft.

3. Wir initialisieren vier Integer-Variablen. Wir verwenden die Funktion Monat, um den Monat eines Datums zu erhalten, und die Funktion Tag, um den Tag eines Datums zu erhalten.

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

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

Zum Beispiel: am Anfang, für i = 2; das Datum von Bregje und j = i + 1 = 2 + 1 = 3; das Datum von Niels wird gewählt.

4. Um die Daten richtig zu sortieren, vergleichen wir das erste Datum (monthToCheck und dayToCheck) mit dem nächsten Datum (monthNext und dayNext). Wenn das nächste Datum "niedriger" ist, tauschen wir die Daten und Namen. Fügen Sie die folgende If Then-Anweisung hinzu.

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

End If

Wenn die obige Aussage wahr ist, tauschen wir die Daten und Namen.

Zum Beispiel: für i = 2 und j = 3 wird das Datum von Bregje und Niels überprüft. MonthNext = 6, monthToCheck = 2. Die obige Aussage ist nicht wahr, da monthNext höher als monthToCheck ist. Excel VBA erhöht j um 1 und wiederholt die Codezeilen für i = 2 und j = 4. Sie können leicht sehen, dass Joost (j = 4) eine höhere Monatszahl als Bregje hat, also gehen wir zum nächsten. Wir erhalten dasselbe Ergebnis für j = 5 und j = 6. Wenn wir bei j = 7 ankommen, haben wir die folgenden Variablen: monthNext = 2 und dayNext = 9. MonthToCheck = 2 und dayToCheck = 12. Nun ist die obige Aussage wahr da monthNext = monthToCheck und dayNext (9) ist niedriger als dayToCheck (12).

5. Wir tauschen die Daten aus. Wir speichern temporär ein Datum in tempDate, so dass Excel VBA die Daten richtig austauschen kann. Fügen Sie die folgenden Codezeilen in der If-Anweisung hinzu.

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

6. Wir machen das gleiche mit den Namen. Fügen Sie die folgenden Codezeilen in der If-Anweisung hinzu.

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

7. Wir schließen die zweite For Next-Schleife (außerhalb der If-Anweisung).

Next j

Für i = 2 und j = 7 tauschte Excel VBA die Daten ausund Namen. Das bedeutet, dass wir Richard auf der ersten Position und Bregje auf Position 7 bekommen. Das bedeutet auch, dass wir zu Beginn unserer nächsten Iteration einen neuen monthToCheck und dayToCheck bekommen (für i = 2 und j = 8). Wir werden nun Richard mit Dineke vergleichen (j = 8). Sie können leicht erkennen, dass diese Daten und Namen nicht ersetzt werden müssen, da Richard ein "niedrigeres" Datum hat. In der Tat ist es nicht notwendig, Richard (i = 2) durch Jan (j = 9), Wendy (j = 10), Jeroen (j = 11), John (j = 12) und Debby (j = 13). Das liegt daran, dass Richard das "niedrigste" Datum hat. Auf diese Weise erhält Excel VBA (für i = 2) das "niedrigste" Datum an der ersten Position. Um das zweite "niedrigste" Datum an der zweiten Position zu erhalten, wiederholt Excel VBA genau die gleichen Schritte für i = 3. Um das dritte "niedrigste" Datum an der dritten Position zu erhalten, wiederholt Excel VBA die exakt gleichen Schritte für i = 4. usw.

8. Schließen Sie die erste For Next-Schleife (außerhalb der If-Anweisung).

Next i

9. Testen Sie Ihr Programm.

Ergebnis:

Geburtstage in Excel VBA sortieren

Lesen Sie auch: