Geburtstage in Excel VBA sortieren - Einfache Excel-Makros

Inhaltsverzeichnis

Im Folgenden sehen wir uns ein Programm in an Excel VBA das sortiert Geburtstage in Monate zuerst und Tage als zweite (also ignorieren wir Jahre). Wir wollen den Geburtstag mit der niedrigsten Monatsnummer an erster Stelle. Wenn es Geburtstage mit gleichen Monatszahlen gibt, wollen wir den Geburtstag mit der niedrigsten Tageszahl zuerst. Sind Sie bereit?

Lage:

Hinweis: Die Daten sind im US-Format. Monate zuerst, Tage dann. Diese Art von Format hängt von Ihren Windows-Regionaleinstellungen ab.

1. Zuerst deklarieren wir acht Variablen. Eine Date-Variable nennen wir tempDate, eine String-Variable nennen wir tempName. Die anderen sechs Variablen sind Integer-Variablen mit den Namen monthToCheck, dayToCheck, monthNext, dayNext, i und j.

Dim tempDate als Datum, tempName als 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.

Für i = 2 bis 13
Für j = i + 1 bis 13

Beispiel: für i = 2 werden j = 3, 4,… , 12 und 13 geprüft.

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

monthToCheck = month(Cells(i, 2).Value)
dayToCheck = day(Cells(i, 2).Value)
MonatNächster = Monat(Zellen(j, 2).Wert)
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 aus. Fügen Sie die folgende If Then-Anweisung hinzu.

If (monthNext < monthToCheck) Oder (monthNext = monthToCheck And dayNext < dayToCheck) Then
Ende Wenn

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

Zum Beispiel: für i = 2 und j = 3 wird das Datum von Bregje und Niels geprü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 Monatsnummer hat als Bregje, also gehen wir zum nächsten. Wir erhalten das gleiche 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 vorübergehend ein Datum in tempDate, damit Excel VBA die Daten richtig austauschen kann. Fügen Sie der If-Anweisung die folgenden Codezeilen hinzu.

"Termine tauschen"
tempDate = Cells(i, 2).Value
Zellen(i, 2).Wert = Zellen(j, 2).Wert
Zellen(j, 2).Wert = tempDate

6. Dasselbe machen wir mit den Namen. Fügen Sie der If-Anweisung die folgenden Codezeilen hinzu.

'Namen tauschen
tempName = Zellen(i, 1).Wert
Zellen(i, 1).Wert = Zellen(j, 1).Wert
Zellen(j, 1).Wert = tempName

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

Nächstes j

Für i = 2 und j = 7 hat Excel VBA die Daten und Namen vertauscht. Das bedeutet, dass wir Richard an erster Position und Bregje an Position 7 bekommen. Das bedeutet auch, dass wir zu Beginn unserer nächsten Iteration (für i = 2 und j = 8) ein neues monthToCheck und dayToCheck erhalten. Wir vergleichen nun Richard mit Dineke (j = 8). Sie können leicht erkennen, dass diese Daten und Namen nicht ersetzt werden müssen, da Richard ein "niedrigeres" Datum hat. Tatsächlich muss Richard (i = 2) nicht 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 erster Stelle. Um das zweitniedrigste Datum an der zweiten Position zu erhalten, wiederholt Excel VBA genau die gleichen Schritte für i = 3. Um das drittniedrigste Datum an der dritten Position zu erhalten, wiederholt Excel VBA genau die gleichen Schritte für i = 4, etc.

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

Als nächstes

9. Testen Sie Ihr Programm.

Ergebnis:

Sie werden die Entwicklung der Website helfen, die Seite mit Ihren Freunden teilen

wave wave wave wave wave