Razvrstite rojstne dneve v Excelu VBA - enostavni makri v Excelu

Kazalo

Spodaj si bomo ogledali program v Excel VBA to razvrsti rojstne dneve na prve mesece in druge dni (zato prezremo leta). Želimo si rojstni dan z najnižjo mesečno številko na prvem mestu. Če obstajajo rojstni dnevi z enakimi številkami mesecev, želimo najprej rojstni dan z najmanjšo številko dneva. Si pripravljen?

Situacija:

Opomba: Datumi so v ameriški obliki. Prvi meseci, drugi dnevi. Ta vrsta zapisa je odvisna od regionalnih nastavitev sistema Windows.

1. Najprej razglasimo osem spremenljivk. Eno spremenljivko datuma imenujemo tempDate, eno spremenljivko String imenujemo tempName. Ostalih šest spremenljivk so celobrojne spremenljivke z imeni mesecToCheck, dayToCheck, monthNext, dayNext, i in j.

Zatemni tempDate kot datum, tempName kot niz
Dim monthToCheck As Integer, dayToCheck As Integer, monthNext As Integer, dayNext As Integer, i As Integer, j As Integer

2. Začnemo dve zanki For Next.

Za i = 2 do 13
Za j = i + 1 do 13

Primer: za i = 2 se preveri j = 3, 4,…, 12 in 13.

3. Inicializiramo štiri integer spremenljivke. S funkcijo Mesec dobimo mesec datuma, s funkcijo Dan pa dan datuma.

monthToCheck = mesec (celice (i, 2). vrednost)
dayToCheck = dan (celice (i, 2). vrednost)
monthNext = month (Celice (j, 2). Vrednost)
dayNext = day (Celice (j, 2). Vrednost)

Na primer: na začetku, za i = 2; datum Bregje in j = i + 1 = 2 + 1 = 3; bo izbran datum Niels.

4. Za pravilno razvrščanje datumov primerjamo prvi datum (monthToCheck in dayToCheck) z naslednjim datumom (monthNext in dayNext). Če je naslednji datum "nižji", zamenjamo datume in imena. Dodajte naslednji stavek If Then.

Če (monthNext <monthToCheck) Ali (monthNext = monthToCheck In dayNext <dayToCheck) Potem
Konec Če

Če zgornja trditev drži, zamenjamo datume in imena.

Na primer: za i = 2 in j = 3 se preveri datum Bregja in Nielsa. MonthNext = 6, monthToCheck = 2. Zgornja trditev ne drži, saj je monthNext višji od monthToCheck. Excel VBA poveča j za 1 in ponovi kodne vrstice za i = 2 in j = 4. Z lahkoto lahko vidite, da ima Joost (j = 4) večje število mesecev kot Bregje, zato gremo na naslednjega. Enak rezultat dobimo za j = 5 in j = 6. Ko pridemo do j = 7, imamo naslednje spremenljivke: monthNext = 2 in dayNext = 9. MonthToCheck = 2 in dayToCheck = 12. Zdaj je zgornja trditev resnična od monthNext = monthToCheck in dayNext (9) je nižje od dayToCheck (12).

5. Zamenjamo datume. En datum začasno shranimo v tempDate, tako da lahko Excel VBA pravilno zamenja datume. V stavek If dodajte naslednje kodne vrstice.

zamenjati datume
tempDate = Celice (i, 2) .Vrednost
Celice (i, 2) .Vrednost = Celice (j, 2) .Vrednost
Celice (j, 2) .Vrednost = tempDate

6. Enako ravnamo z imeni. V stavek If dodajte naslednje kodne vrstice.

'zamenjati imena
tempName = Celice (i, 1) .Vrednost
Celice (i, 1) .Vrednost = Celice (j, 1) .Vrednost
Celice (j, 1) .Vrednost = tempName

7. Zapremo drugo zanko For Next (Zunaj stavka If).

Naprej j

Za i = 2 in j = 7 je Excel VBA zamenjal datume in imena. To pomeni, da imamo Richarda na prvem mestu in Bregje na položaju 7. To tudi pomeni, da na začetku naslednje iteracije dobimo nov mesecToCheck in dayToCheck (za i = 2 in j = 8). Zdaj bomo primerjali Richarda z Dinekejem (j = 8). Z lahkoto lahko vidite, da teh datumov in imen ni treba zamenjati, ker ima Richard "nižji" datum. Pravzaprav ni treba zamenjati Richarda (i = 2) z Jan (j = 9), Wendy (j = 10), Jeroenom (j = 11), Johnom (j = 12) in Debby (j = 13). To je zato, ker ima Richard "najnižji" zmenek. Tako bo Excel VBA dobil (za i = 2) "najnižji" datum na prvem mestu. Da bi dobili drugi "najnižji" datum na drugem mestu, Excel VBA ponovi popolnoma enake korake za i = 3. Da bi dobili tretji "najnižji" datum na tretjem mestu, Excel VBA ponovi popolnoma enake korake za i = 4, itd.

8. Zaprite prvo zanko For Next (Zunaj stavka If).

Naprej i

9. Preizkusite svoj program.

Rezultat:

Vam bo pomagal razvoj spletnega mesta, ki si delijo stran s svojimi prijatelji

wave wave wave wave wave