/ / Zoradiť narodeniny v programe Excel VBA

Zoradiť narodeniny v programe Excel VBA

Nižšie sa pozrieme na program v sekcii Excel VBA že triedenie narodenín na mesiace prvý a dni druhej (takže ignorujemerokov). Chceme narodeniny s najnižším číslom mesiaca na prvej pozícii. Ak existujú narodeniny s rovnakým počtom mesiacov, chceme najskôr narodeniny s najnižším číslom dňa. Si pripravený?

situácie:

Triedenie príkladu narodenín

Poznámka: Termíny sú v americkom formáte. Najskôr mesiace, Druhá deň. Tento typ formátu závisí od regionálnych nastavení systému Windows.

1. Najprv deklarujeme osem premenných. Jedna premenná Date nazývame tempDate, jednu premennú String nazývame tempName. Ostatnými šiestimi premennými sú celé premenné s menami monthToCheck, dayToCheck, monthNext, dayNext, i and 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. Začneme dve cykly For Next.

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

Príklad: pre i = 2, j = 3, 4, ..., 12 a 13 sú kontrolované.

3. Inicializujeme štyri premenné Integer. Funkciu mesiaca používame na získanie mesiaca dátumu a funkcie Deň na získanie dňa dátumu.

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

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

Napríklad: na začiatku, pre i = 2; dátum Bregje a j = i + 1 = 2 + 1 = 3; dátum Niels bude vybraný.

4. Ak chcete správne zoradiť dátumy, porovnáme prvý dátum (monthToCheck a dayToCheck) s ďalším dátumom (monthNext a dayNext). Ak je ďalší dátum "nižší", vymeníme dátumy a mená. Pridajte nasledujúci príkaz If Then.

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

End If

Ak je uvedené tvrdenie pravdivé, vymeníme dátumy a mená.

Napríklad: pre i = 2 a j = 3 sa kontroluje dátum Bregje a Nielsa. MonthNext = 6, monthToCheck = 2. Vyššie uvedené vyhlásenie nie je pravdivé, pretože monthNext je vyššia ako monthToCheck. VBA VBA inkrementuje j po 1 a opakuje riadky kódov pre i = 2 a j = 4. Môžete ľahko vidieť, že Joost (j = 4) má vyššie číslo mesiaca ako Bregje, takže pôjdeme na ďalšiu. Získame rovnaký výsledok pre j = 5 a j = 6. Keď prídeme na j = 7, máme nasledujúce premenné: monthNext = 2 a dayNext = 9. MonthToCheck = 2 a dayToCheck = 12. Teraz platí vyššie uvedené vyhlásenie od monthNext = monthToCheck a dayNext (9) je nižšia ako dayToCheck (12).

5. Vymeníme dátumy. Dočasne uložíme jeden dátum do tempDate, takže Excel VBA dokáže správne vymazať dátumy. Pridajte nasledujúce riadky kódu do príkazu If.

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

6. Urobíme rovnaké mená. Pridajte nasledujúce riadky kódu do príkazu If.

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

7. Zatvoríme druhú slučku For Next (príkaz Out mimo).

Next j

Pre i = 2 a j = 7, Excel VBA vymenil dátumya mená. To znamená, že dostaneme Richarda na prvé miesto a Bregje na pozícii 7. To tiež znamená, že sme na začiatku našej ďalšej iterácie (pre i = 2 a j = 8) získali nový mesiacToCheck a dayToCheck. Teraz porovnáme Richarda s Dineke (j = 8). Môžete ľahko vidieť, že nie je potrebné nahradiť tieto dátumy a mená, pretože Richard má "nižší" dátum. V skutočnosti nie je potrebné nahradiť Richarda (i = 2) s Jan (j = 9), Wendy (j = 10), Jeroen (j = = 13). Je to preto, že Richard má "najnižšie" dátum. Týmto spôsobom Excel VBA dostane (pre i = 2) najnižšie "dátum" na prvej pozícii. Ak chcete získať druhý "najnižší" dátum na druhej pozícii, program Excel VBA zopakuje presne tie isté kroky pre i = 3. Aby sa tretie miesto dostalo tretieho "najnižšieho" dátumu, Excel VBA zopakuje presne rovnaké kroky pre i = 4, atď.

8. Zatvorte prvú slučku For Next (príkaz Out mimo).

Next i

9. Otestujte svoj program.

výsledok:

Zoradiť narodeniny v programe Excel VBA

Tiež si prečítajte: