/ / Rendezés a születésnapok Excel VBA

A születésnapok rendezése Excel VBA-ban

Az alábbiakban egy programot nézünk be Excel VBA hogy rendezi a születésnapokat hónapokig az első és a második nap (tehát nem veszünk figyelembeévek). Azt akarjuk, hogy a legkisebb hónapszámú születésnapot az első helyen állítsák. Ha születésnapok vannak egyenlő havi számmal, akkor először a legalacsonyabb napi számot kell létrehoznunk. Kész vagy?

Helyzet:

A születésnapok rendezése példa

Megjegyzés: A dátumok US formátumban vannak. Hónapok először, a második napok. Ez a formátum az ablakok regionális beállításaitól függ.

1. Először nyolc változót deklarálunk. Egy Dátum változó, amit tempDate-nek hívunk, egy String változót hívunk tempName-nek. A másik hat változó az Integer változók a monthToCheck, dayToCheck, monthNext, dayNext, i és j nevekkel.

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. Két For Next hurkot indítunk.

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

Példa: i = 2, j = 3, 4, ..., 12 és 13 ellenőrzése.

3. Inicializálunk négy Integer változót. A Hónap funkcióval kapjuk meg a dátum hónapját és a napi funkciót, hogy megkapjuk a dátum napját.

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

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

Például: az elején, i = 2; a Bregje időpontja, és j = i + 1 = 2 + 1 = 3; a Niels dátumát választják.

4. A dátumok rendezéséhez az első dátumot (monthToCheck és dayToCheck) hasonlítjuk össze a következő dátummal (hónap Következő és nap következő). Ha a következő dátum "alacsonyabb", akkor kicseréljük a dátumokat és a neveket. Adja hozzá a következő If Then utasítást.

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

End If

Ha a fenti állítás igaz, akkor kicseréljük a dátumokat és a neveket.

Például: i = 2 és j = 3 esetén a Bregje és a Niels dátumát ellenőrzik. MonthNext = 6, monthToCheck = 2. A fenti utasítás nem igaz, hiszen a monthNext a monthToChecknél magasabb. Az Excel VBA növekszik a j-lal, és megismétli az i = 2 és j = 4 kódsorokat. Könnyen látja, hogy a Joost (j = 4) magasabb hónapszámmal rendelkezik, mint a Bregje, ezért a következőre megyünk. Ugyanazt az eredményt kapjuk j = 5 és j = 6 esetén. Amikor j = 7-re érünk, a következő változókkal rendelkezünk: monthNext = 2 és dayNext = 9. MonthToCheck = 2 és dayToCheck = 12. A fenti állítás igaz mivel monthNext = monthToCheck és dayNext (9) alacsonyabb, mint dayToCheck (12).

5. A dátumokat kicseréljük. Egy ideig ideiglenesen tárolunk egy dátumot a tempDate-nek, hogy az Excel VBA megfelelően lecserélhesse a dátumokat. Adja hozzá a következő kódsorokat az If utasításban.

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

6. Ugyanezt tesszük a nevekkel is. Adja hozzá a következő kódsorokat az If utasításban.

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

7. Bezárjuk a második For Next hurkot (az If utasítás kivételével).

Next j

I = 2 és j = 7 esetén az Excel VBA kicserélte a dátumokatés nevek. Ez azt jelenti, hogy Richardot kapjuk az első pozícióban és Bregje-t a 7. pozícióban. Ez azt is jelenti, hogy egy új monthToCheck és dayToCheck-t kapunk a következő iteráció kezdetén (i = 2 és j = 8). Most összehasonlítjuk Richardot Dinekével (j = 8). Könnyen látja, hogy nincs szükség arra, hogy helyettesítse ezeket a dátumokat és neveket, mert Richard "alacsonyabb" dátummal rendelkezik. Valójában nincs szükség Richard (i = 2) helyett Jan (j = 9), Wendy (j = 10), Jeroen (j = 11), John (j = 12) és Debby (j = 13). Ennek az az oka, hogy Richard rendelkezik a legalacsonyabb dátummal. Így az Excel VBA kapja (i = 2) a legalacsonyabb dátumot az első pozícióban. Ahhoz, hogy a második "legalacsonyabb" dátumot megkapja a második pozícióban, az Excel VBA megismétli ugyanazokat a lépéseket az i = 3-hoz. Ha a harmadik "legalacsonyabb" dátumot kapja a harmadik pozícióban, az Excel VBA ugyanazokat a lépéseket ismételje meg i = 4, stb.

8. Zárja be az első For Next hurkot (az If utasítás kivételével).

Next i

9. Tesztelje a programot.

Eredmény:

A születésnapok rendezése Excel VBA-ban

Szintén olvasható: