/ / Lajittele syntymäpäivät Excel VBA: ssa

Lajittele syntymäpäivät Excel VBA: ssa

Alla tarkastelemme ohjelmaa Excel VBA että lajittelee syntymäpäivät kuukausien ensimmäinen ja toinen päivä (joten jätämme huomiottavuotta). Haluamme, että syntymäpäivä on alimmalla kuukausi-numerolla ensimmäisessä paikassa. Jos on olemassa syntymäpäiviä, joilla on samanlaiset kuukausittaiset numerot, haluamme syntymäpäiväksi alhaisimman päivän numeron. Oletko valmis?

Tilanne:

Lajittele syntymäpäivät esimerkki

Huomaa: Päivämäärät ovat Yhdysvaltain formaatissa. Kuukaudet ensimmäinen, Päivät toisena. Tämäntyyppinen muoto riippuu Windowsin alueasetuksista.

1. Ensin mainitsemme kahdeksan muuttujaa. Yksi päivämäärän muuttuja jota kutsumme tempDate, yksi String-muuttuja kutsumme tempName. Muut kuusi muuttujaa ovat kokonaisluku muuttujat, joiden nimet ovat monthToCheck, dayToCheck, monthNext, dayNext, i ja 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. Aloitamme kaksi Seuraava-silmukoille.

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

Esimerkki: i = 2, j = 3, 4, ..., 12 ja 13 tarkistetaan.

3. Alamme neljä kokonaisluku-muuttujaa. Käytämme Kuukausi -toimintoa saadaksesi päivämäärän kuukauden ja Päivän toiminnon saadaksemme päivän päivämäärän.

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

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

Esimerkiksi: alussa, i = 2; Bregjen päivämäärä ja j = i + 1 = 2 + 1 = 3; Nielsin päivämäärä valitaan.

4. Järjestämme päivämäärät oikein vertaamalla ensimmäistä päivämäärää (monthToCheck ja dayToCheck) seuraavan päivämäärän (monthSext and dayNext) kanssa. Jos seuraava päivämäärä on "alempi", vaihdamme päivämäärät ja nimet. Lisää seuraava If Then -lausunto.

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

End If

Jos yllä oleva lausunto on totta, vaihdamme päivämäärät ja nimet.

Esimerkiksi: i = 2 ja j = 3, tarkastetaan Bregjen ja Nielsin päivämäärä. MonthNext = 6, monthToCheck = 2. Edellä oleva lausunto ei ole true since monthNext on monthToCheck-arvoa korkeampi. Excel VBA nostaa j: n 1: llä ja toistaa koodin rivit i = 2 ja j = 4. Voit helposti nähdä, että Joost (j = 4) on korkeampi kuukausiluku kuin Bregje, joten menemme seuraavaan. Saamme samasta tuloksesta j = 5 ja j = 6. Kun saavutamme j = 7, meillä on seuraavat muuttujat: monthNext = 2 and dayNext = 9. MonthToCheck = 2 and dayToCheck = 12. Nyt yllä oleva lausunto on totta koska monthNext = monthToCheck and dayNext (9) on pienempi kuin dayToCheck (12).

5. Vaihdamme päivämäärät. Tallennamme tilapäisesti yhden päivämäärän tempDate-tilaan, jotta Excel VBA voi vaihtaa päivämäärät oikein. Lisää If-lausekkeeseen seuraavat koodiluokat.

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

6. Teemme samoja nimiä. Lisää If-lausekkeeseen seuraavat koodiluokat.

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

7. Suljemme toisen Next-silmukan (Out-lausekkeen ulkopuolella).

Next j

I = 2 ja j = 7, Excel VBA vaihtoi päivämäärätja nimiä. Tämä tarkoittaa sitä, että saamme Richardin ensimmäisellä sijalla ja Bregje asemassa 7. Tämä tarkoittaa myös, että saamme uuden monthToCheck ja dayToCheck seuraavan iteroinnin alkaessa (i = 2 ja j = 8). Vertaamme nyt Richardin Dineke: n kanssa (j = 8). Voit helposti nähdä, että päivämääriä ja nimiä ei tarvitse korvata, koska Richardilla on alhaisempi päivämäärä. Itse asiassa Richard (i = 2) ei ole tarpeen korvata Janilla (j = 9), Wendyllä (j = 10), Jeroenilla (j = 11), Johnilla (j = 12) ja Debbyllä (j = 13). Tämä johtuu siitä, että Richardilla on "alhaisin" päivämäärä. Näin Excel VBA saa (i = 2) "alhaisimman" päivämäärän ensimmäisellä sijainnilla. Jotta saisit toisen "pienimmän" päivämäärän toisessa asennossa, Excel VBA toistaa täsmälleen samat vaiheet i = 3: lle. Jos haluat saada kolmannen "alin" päivämäärän kolmannella sijalla, Excel VBA toistaa täsmälleen samat vaiheet i = 4, jne.

8. Sulje ensimmäinen Seuraava-silmukka (Out-lausekkeen ulkopuolella).

Next i

9. Testaa ohjelma.

Tulos:

Lajittele syntymäpäivät Excel VBA: ssa

Lue myös: