/ / Poredaj rođendane u programu Excel VBA

Sortiraj rođendane u programu Excel VBA

U nastavku ćemo pogledati program u Excel VBA da vrsta rođendana do prvog i drugog mjeseca (tako da zanemarimogodine). Želimo rođendan s najnižim brojem mjeseca na prvoj poziciji. Ako postoje rođendani s istim brojevima mjeseca, želimo najprije rođendan s najnižim danom broja. Jesi li spreman?

Situacija:

Sortiraj primjer rođendana

Napomena: Datumi su u SAD formatu. Mjeseci prvi, Dani sekundi. Ova vrsta oblika ovisi o regionalnim postavkama vašeg prozora.

1. Prvo, izjavljujemo osam varijabli. Jedna varijabla Datum nazivamo tempDate, jednu String varijablu koju nazivamo tempName. Druge šest varijabli su varijable integer s nazivima 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. Pokrećemo dvije For Next petlje.

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

Primjer: za i = 2, j = 3, 4, ..., 12 i 13 provjeravaju se.

3. Inicijaliziramo četiri cjelobrojne varijable. Koristimo funkciju Mjesec kako bismo dobili datum mjeseca i funkciju Dnevni dan za dobivanje dana datuma.

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 primjer: na početku, za i = 2; datum Bregja, i j = i + 1 = 2 + 1 = 3; dat će se Nielsov datum.

4. Kako bismo ispravili datume, usporedili smo prvi datum (monthToCheck i dayToCheck) sa sljedećim datumom (monthNext and dayNext). Ako je sljedeći datum "niži", zamjenjujemo datume i nazive. Dodajte sljedeću izjavu Ako je tada.

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

End If

Ako je navedena izjava istinita, zamijenit ćemo datume i nazive.

Na primjer: za i = 2 i j = 3, provjeravaju se datumi Bregja i Niels. MonthNext = 6, monthToCheck = 2. Gornja izjava nije istinita jer je monthNext veći od monthToCheck. Excel VBA povećava j za 1 i ponavlja linije koda za i = 2 i j = 4. Jednostavno možete vidjeti da Joost (j = 4) ima viši broj mjeseca od Bregja pa idemo na sljedeći. Dobivamo isti rezultat za j = 5 i j = 6. Kad stignemo na j = 7, imamo sljedeće varijable: monthNext = 2 i dayNext = 9. MonthToCheck = 2 i dayToCheck = 12. Sada je gore izjava istinita jer monthNext = monthToCheck and dayNext (9) niži je od dayToCheck (12).

5. Zamjenjujemo datume. Privremeno spremamo jedan datum na tempDate, tako da Excel VBA može pravilno mijenjati datume. Dodajte sljedeće retke kodova u If izjavi.

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

6. Isto vrijedi i za imena. Dodajte sljedeće retke kodova u If izjavi.

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

7. Zatvorimo drugi Za sljedeću petlju (Izvan izjave If).

Next j

Za i = 2 i j = 7, Excel VBA zamijenio je datumei imena. To znači da ćemo dobiti Richarda na prvom mjestu i Bregju na poziciji 7. To također znači da dobivamo novi monthToCheck i dayToCheck na početku naše sljedeće iteracije (za i = 2 i j = 8). Sada ćemo usporediti Richard s Dineke (j = 8). Možete lako vidjeti da nema potrebe zamijeniti te datume i nazive jer Richard ima "niži" datum. Zapravo, nema potrebe za zamjenom Richarda (i = 2) s Jan (j = 9), Wendy (j = 10), Jeroen (j = 11), John (j = 12) i Debby = 13). To je zato što Richard ima "najniži" datum. Na taj će način Excel VBA dobiti (za i = 2) "najniži" datum na prvoj poziciji. Da biste dobili drugi "najniži" datum na drugom mjestu, Excel VBA ponavlja točno iste korake za i = 3. Da biste dobili treći "najniži" datum na trećem mjestu, Excel VBA ponavlja točno iste korake za i = 4, itd

8. Zatvorite prvu za sljedeću petlju (izvan izjave If).

Next i

9. Testirajte svoj program.

Proizlaziti:

Sortiraj rođendane u programu Excel VBA

Također pročitajte: