Sortuj urodziny w Excel VBA - Łatwe makra Excel

Spisie treści

Poniżej przyjrzymy się programowi w Excel VBA że sortuje urodziny do pierwszych miesięcy i drugich dni (więc pomijamy lata). Chcemy, aby urodziny miały najniższy numer miesiąca na pierwszej pozycji. Jeśli są urodziny o równych numerach miesięcy, najpierw chcemy mieć urodziny o najniższym numerze dnia. Jesteś gotowy?

Sytuacja:

Uwaga: Daty są w formacie amerykańskim. Miesiące pierwsze, dni drugie. Ten typ formatu zależy od ustawień regionalnych systemu Windows.

1. Najpierw deklarujemy osiem zmiennych. Jedną zmienną Date nazywamy tempDate, jedną zmienną String nazywamy tempName. Pozostałe sześć zmiennych to zmienne typu Integer o nazwach monthToCheck, dayToCheck, monthNext, dayNext, i oraz 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. Rozpoczynamy dwie pętle For Next.

Dla i = 2 do 13
Dla j = i + 1 do 13

Przykład: dla i = 2, j = 3, 4,… , 12 i 13 są zaznaczone.

3. Inicjujemy cztery zmienne Integer. Używamy funkcji Month, aby uzyskać miesiąc daty i funkcji Day, aby uzyskać dzień daty.

monthToCheck = miesiąc(Komórki(i, 2)).Wartość)
dayToCheck = dzień(Komórki(i, 2)).Wartość)
miesiącNastępny = miesiąc(Komórki(j, 2)).Wartość)
dayNext = day(Komórki(j, 2)).Wartość)

Na przykład: na początku, dla i = 2; data Bregje oraz j = i + 1 = 2 + 1 = 3; zostanie wybrana data Nielsa.

4. Aby poprawnie posortować daty, porównujemy pierwszą datę (monthToCheck i dayToCheck) z datą następną (monthNext i dayNext). Jeśli następna data jest „niższa”, zamieniamy daty i nazwiska. Dodaj następującą instrukcję If Then.

If (monthNext < monthToCheck) Or (monthNext = monthToCheck And dayNext < dayToCheck) Then
Zakończ, jeśli

Jeśli powyższe stwierdzenie jest prawdziwe, zamieniamy daty i nazwiska.

Na przykład: dla i = 2 i j = 3 sprawdzane są daty Bregje i Nielsa. MonthNext = 6, monthToCheck = 2. Powyższe stwierdzenie nie jest prawdziwe, ponieważ monthNext jest wyższy niż monthToCheck. Excel VBA zwiększa j o 1 i powtarza linie kodu dla i = 2 oraz j = 4. Łatwo zauważyć, że Joost (j = 4) ma wyższy numer miesiąca niż Bregje, więc przechodzimy do następnego. Ten sam wynik otrzymujemy dla j = 5 i j = 6. Kiedy dochodzimy do j = 7, mamy następujące zmienne: monthNext = 2 i dayNext = 9. MonthToCheck = 2 i dayToCheck = 12. Teraz powyższe stwierdzenie jest prawdziwe ponieważ monthNext = monthToCheck i dayNext (9) jest niższy niż dayToCheck (12).

5. Zamieniamy daty. Tymczasowo przechowujemy jedną datę w tempDate, aby Excel VBA mógł poprawnie zamienić daty. Dodaj następujące wiersze kodu w instrukcji If.

„daty zamiany”
tempDate = Cells(i, 2)).Value
Komórki(i, 2).Wartość = Komórki(j, 2).Wartość
Komórki(j, 2)).Wartość = tempDate

6. To samo robimy z imionami. Dodaj następujące wiersze kodu w instrukcji If.

„zamień nazwy”
tempName = Cells(i, 1)).Value
Komórki(i, 1).Wartość = Komórki(j, 1).Wartość
Cells(j, 1).Value = tempName

7. Zamykamy drugą pętlę For Next (poza instrukcją If).

Następny j

Dla i = 2 i j = 7 Excel VBA zamienił daty i nazwy. Oznacza to, że otrzymujemy Richarda na pierwszej pozycji, a Bregje na pozycji 7. Oznacza to również, że otrzymujemy nowe monthToCheck i dayToCheck na początku naszej następnej iteracji (dla i = 2 i j = 8). Porównamy teraz Richarda z Dineke (j = 8). Możesz łatwo zauważyć, że nie ma potrzeby zastępowania tych dat i nazwisk, ponieważ Richard ma „niższą” datę. W rzeczywistości nie ma potrzeby zastępowania Richarda (i = 2) Janem (j = 9), Wendy (j = 10), Jeroenem (j = 11), Johnem (j = 12) i Debby (j = 13). To dlatego, że Richard ma „najniższą” datę. W ten sposób Excel VBA otrzyma (dla i = 2) „najniższą” datę na pierwszej pozycji. Aby uzyskać drugą „najniższą” datę na drugiej pozycji, Excel VBA powtarza dokładnie te same kroki dla i = 3. Aby uzyskać trzecią „najniższą” datę na trzeciej pozycji, Excel VBA powtarza dokładnie te same kroki dla i = 4, itp.

8. Zamknij pierwszą pętlę For Next (poza instrukcją If).

Dalej ja

9. Przetestuj swój program.

Wynik:

Będziesz pomóc w rozwoju serwisu, dzieląc stronę ze swoimi znajomymi

wave wave wave wave wave