/ / Sortuj urodziny w programie Excel VBA

Sortuj urodziny w programie Excel VBA

Poniżej przyjrzymy się programowi w Excel VBA że sortuje urodziny do miesięcy pierwszych i drugich sekund (więc ignorujemylat). Chcemy, aby urodziny z najniższym numerem miesiąca były na pierwszej pozycji. Jeśli są urodziny z równymi numerami miesiąca, najpierw chcemy urodziny z najniższym dniem. Jesteś gotowy?

Sytuacja:

Sortuj urodziny Przykład

Uwaga: daty są w formacie amerykańskim. Najpierw miesiące, 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 całkowite z nazwami monthToCheck, dayToCheck, monthNext, dayNext, i i 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.

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

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

3. Inicjujemy cztery zmienne Integer. Używamy funkcji Miesiąc, aby uzyskać miesiąc daty i funkcję Dzień, aby uzyskać dzień daty.

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

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

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

4. Aby poprawnie posortować daty, porównujemy pierwszą datę (monthToCheck i dayToCheck) z kolejną datą (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

End If

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

Na przykład: dla i = 2 i j = 3, data Bregje i Niels są sprawdzane. MonthNext = 6, monthToCheck = 2. Powyższe stwierdzenie nie jest prawdziwe od miesiącaNastępnie jest wyższe niż monthToCheck. Excel VBA zwiększa j o 1 i powtarza linie kodu dla i = 2 i j = 4. Możesz łatwo zauważyć, że Joost (j = 4) ma wyższy numer miesiąca niż Bregje, więc przechodzimy do następnego. Otrzymujemy ten sam wynik dla j = 5 i j = 6. Gdy dojdziemy do j = 7, mamy następujące zmienne: monthNext = 2 and dayNext = 9. MonthToCheck = 2 and dayToCheck = 12. Teraz powyższe stwierdzenie jest prawdziwe od monthNext = monthToCheck i dayNext (9) jest mniejsza niż dayToCheck (12).

5. Zamieniamy daty. Przechowujemy tymczasowo jedną datę do tempDate, aby Excel VBA mógł poprawnie zamieniać daty. Dodaj następujące linie kodu w instrukcji If.

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

6. Robimy to samo z nazwiskami. Dodaj następujące linie kodu w instrukcji If.

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

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

Next j

Dla i = 2 i j = 7, Excel VBA zamienił datyi imiona. Oznacza to, że otrzymujemy Richarda na pierwszym miejscu, a Bregje na pozycji 7. Oznacza to również, że otrzymujemy nowy miesiąc Check i DayToCheck na początku naszej kolejnej iteracji (dla i = 2 i j = 8). Porównamy teraz Richarda z Dineke (j = 8). Łatwo zauważyć, że nie ma potrzeby zastępowania tych dat i nazw, ponieważ Richard ma "niższą" datę. W rzeczywistości nie ma potrzeby zastępowania Richarda (i = 2) Jan (j = 9), Wendy (j = 10), Jeroena (j = 11), Jana (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).

Next i

9. Sprawdź swój program.

Wynik:

Sortuj urodziny w programie Excel VBA

Przeczytaj również: