Zoradiť narodeniny v programe Excel VBA - ľahké makrá programu Excel

Obsah

Nižšie sa pozrieme na program v Excel VBA že triedi narodeniny do mesiacov prvý a do dní druhý (roky teda ignorujeme). Chceme narodeniny s najnižším číslom mesiaca na prvej pozícii. Ak existujú narodeniny s rovnakými číslami mesiacov, chceme najskôr narodeniny s najnižším číslom dňa. Si pripravený?

Situácia:

Poznámka: Dátumy sú vo formáte USA. Mesiace prvé, dni druhé. Tento typ formátu závisí od regionálnych nastavení systému Windows.

1. Najprv deklarujeme osem premenných. Jednu premennú dátumu nazývame tempDate a jednu reťazcovú premennú nazývame tempName. Ďalších šesť premenných sú celočíselné premenné s názvami monthToCheck, dayToCheck, monthNext, dayNext, i a 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číname dve slučky For Next.

Pre i = 2 až 13
Pre j = i + 1 až 13

Príklad: pre i = 2 sa zaškrtne j = 3, 4, …, 12 a 13.

3. Inicializujeme štyri celočíselné premenné. Na získanie mesiaca dátumu používame funkciu Mesiac a na získanie dátumu dátumom funkciu deň.

monthToCheck = mesiac (bunky (i, 2). hodnota)
dayToCheck = deň (bunky (i, 2). hodnota)
monthNext = mesiac (Bunky (j, 2) .Hodnota)
dayNext = day (Bunky (j, 2) .Hodnota)

Napríklad: na začiatku pre i = 2; dátum Bregje, a j = i + 1 = 2 + 1 = 3; zvolí sa dátum Nielsa.

4. Aby sme dátumy zoradili správne, porovnáme prvý dátum (monthToCheck a dayToCheck) s nasledujúcim dátumom (monthNext a dayNext). Ak je nasledujúci dátum „nižší“, dátumy a mená prehodíme. Pridajte nasledujúci príkaz If Then.

If (monthNext <monthToCheck) Alebo (monthNext = monthToCheck A dayNext <dayToCheck) Then
Koniec Ak

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

Napríklad: pre i = 2 a j = 3 sa kontroluje dátum Bregje a Nielsa. MonthNext = 6, monthToCheck = 2. Vyššie uvedené tvrdenie nie je pravdivé, pretože monthNext je vyšší ako monthToCheck. Excel VBA zvyšuje j o 1 a opakuje riadky kódu pre i = 2 a j = 4. Môžete ľahko vidieť, že Joost (j = 4) má vyššie číslo mesiaca ako Bregje, takže ideme na ďalší. Rovnaký výsledok dostaneme pre j = 5 a j = 6. Keď dospejeme k j = 7, máme nasledujúce premenné: monthNext = 2 a dayNext = 9. MonthToCheck = 2 a dayToCheck = 12. Teraz platí vyššie uvedené tvrdenie od monthNext = monthToCheck a dayNext (9) je nižšia ako dayToCheck (12).

5. Vymieňame si dátumy. Dočasne ukladáme jeden dátum na tempDate, aby Excel VBA mohol dátumy správne vymeniť. Do príkazu If pridajte nasledujúce riadky kódu.

'vymeniť dátumy
tempDate = Bunky (i, 2). Hodnota
Bunky (i, 2). Hodnota = bunky (j, 2). Hodnota
Bunky (j, 2). Hodnota = tempDate

6. To isté robíme s menami. Do príkazu If pridajte nasledujúce riadky kódu.

'vymeniť mená
tempName = Bunky (i, 1). Hodnota
Bunky (i, 1). Hodnota = bunky (j, 1). Hodnota
Bunky (j, 1). Hodnota = tempName

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

Ďalej j

Pre i = 2 a j = 7 Excel VBA vymenil dátumy a názvy. To znamená, že dostaneme Richarda na prvú pozíciu a Bregjeho na pozíciu 7. To tiež znamená, že dostaneme nový monthToCheck a dayToCheck na začiatku našej ďalšej iterácie (pre i = 2 a j = 8). Teraz porovnáme Richarda s Dineke (j = 8). Môžete ľahko vidieť, že tieto dátumy a mená nie je potrebné nahrádzať, pretože Richard má „nižší“ dátum. V skutočnosti nie je potrebné nahradiť Richarda (i = 2) Janom (j = 9), Wendy (j = 10), Jeroen (j = 11), John (j = 12) a Debby (j) = 13). Dôvodom je, že Richard má „najnižší“ dátum. Excel VBA tak získa (pre i = 2) „najnižší“ dátum na prvej pozícii. Ak chcete získať druhý „najnižší“ dátum na druhej pozícii, Excel VBA opakuje presne tie isté kroky pre i = 3. Na získanie tretieho „najnižšieho“ dátumu na tretej pozícii Excel VBA opakuje presne tie isté kroky pre i = 4, atď.

8. Zatvorte prvú slučku For Next (Mimo príkaz If).

Ďalej i

9. Otestujte si svoj program.

Výsledok:

Vám pomôže rozvoju miesta, zdieľať stránku s priateľmi

wave wave wave wave wave