Järjestä syntymäpäivät Excel VBA: ssa - Helpot Excel -makrot

Sisällysluettelo

Alla tarkastelemme ohjelmaa Excel VBA että lajittelee syntymäpäiviä kuukausina ensimmäisinä ja päivinä toisin (joten emme huomioi vuosia). Haluamme syntymäpäivän, jolla on alin kuukausinumero ensimmäisellä sijalla. Jos syntymäpäiviä on sama kuukausiluku, haluamme ensin syntymäpäivän, jolla on pienin päivämäärä. Oletko valmis?

Tilanne:

Huomaa: Päivämäärät ovat Yhdysvaltain muodossa. Kuukaudet ensin, toiset päivät. Tämä muoto riippuu Windowsin alueasetuksista.

1. Ensin julistamme kahdeksan muuttujaa. Yksi päivämäärämuuttuja, jota kutsumme tempDate, yksi merkkijonomuuttuja, jota kutsumme tempName. Muut kuusi muuttujaa ovat kokonaislukumuuttujia, joiden nimet ovat monthToCheck, dayToCheck, monthNext, dayNext, i ja j.

Dim tempDate kuten Date, tempName As String
Hämärä kuukausiToCheck kokonaislukuna, päiväToCheck kokonaislukuna, kuukausiSeuraava kokonaislukuna, päivä

2. Aloitamme kaksi For Next -silmukkaa.

I = 2-13
Jos j = i + 1 - 13

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

3. Alustamme neljä kokonaislukumuuttujaa. Käytämme kuukausi -funktiota päivämäärän kuukauden saamiseen ja päivätoimintoa päivämäärän päivän saamiseen.

monthToCheck = month (Solut (i, 2). Arvo)
dayToCheck = päivä (Solut (i, 2). Arvo)
monthNext = kuukausi (Solut (j, 2). Arvo)
dayNext = päivä (Solut (j, 2). Arvo)

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

4. Jos haluat lajitella päivämäärät oikein, vertaamme ensimmäistä päivämäärää (monthToCheck ja dayToCheck) seuraavaan päivämäärään (monthNext ja dayNext). Jos seuraava päivämäärä on "alempi", vaihdamme päivämäärät ja nimet. Lisää seuraava Jos sitten -lauseke.

Jos (monthNext <monthToCheck) Tai (monthNext = monthToCheck And dayNext <dayToCheck) Sitten
Loppu Jos

Jos yllä oleva väite pitää paikkansa, vaihdamme päivämäärät ja nimet.

Esimerkiksi: jos i = 2 ja j = 3, Bregjen ja Nielsin päivämäärä tarkistetaan. MonthNext = 6, monthToCheck = 2. Yllä oleva väite ei pidä paikkaansa, koska monthNext on korkeampi kuin monthToCheck. Excel VBA lisää j: tä 1: llä ja toistaa koodirivit i = 2 ja j = 4. Voit helposti nähdä, että Joostilla (j = 4) on suurempi kuukausiluku kuin Bregjellä, joten siirrytään seuraavaan. Saamme saman tuloksen arvoille j = 5 ja j = 6. Kun saavutamme arvon j = 7, meillä on seuraavat muuttujat: monthNext = 2 ja dayNext = 9. MonthToCheck = 2 ja dayToCheck = 12. Nyt yllä oleva lause on totta since monthNext = monthToCheck ja dayNext (9) on pienempi kuin dayToCheck (12).

5. Vaihdamme päivämäärät. Tallennamme väliaikaisesti yhden päivämäärän tempDateen, jotta Excel VBA voi vaihtaa päivämäärät oikein. Lisää seuraavat koodirivit If -lauseeseen.

'Vaihda päivämäärät
tempDate = Solut (i, 2). Arvo
Solut (i, 2). Arvo = Solut (j, 2). Arvo
Solut (j, 2). Arvo = tempDate

6. Teemme saman nimien kanssa. Lisää seuraavat koodirivit If -lauseeseen.

'vaihtaa nimet
tempName = Solut (i, 1). Arvo
Solut (i, 1). Arvo = Solut (j, 1). Arvo
Solut (j, 1). Arvo = tempName

7. Suljemme toisen For Next -silmukan (If -lauseen ulkopuolella).

Seuraava j

Jos i = 2 ja j = 7, Excel VBA vaihtoi päivämäärät ja nimet. Tämä tarkoittaa, että saamme Richardin ensimmäiselle sijalle ja Bregjen sijalle 7. Tämä tarkoittaa myös sitä, että saamme uuden kuukaudenToCheck ja dayToCheck seuraavan iteraation alussa (i = 2 ja j = 8). Vertaamme nyt Richardia Dinekeen (j = 8). Näet helposti, että näitä päivämääriä ja nimiä ei tarvitse vaihtaa, koska Richardilla on alempi päivämäärä. Itse asiassa Richardia (i = 2) ei tarvitse korvata Janilla (j = 9), Wendyllä (j = 10), Jeroenilla (j = 11), Johnilla (j = 12) ja Debbyllä (j = 13). Tämä johtuu siitä, että Richardilla on alin päivämäärä. Näin Excel VBA saa (i = 2) "alimman" päivämäärän ensimmäisellä sijainnilla. Toisen "alimman" päivämäärän saamiseksi toiselle sijainnille Excel VBA toistaa täsmälleen samat vaiheet i = 3. Saadakseen kolmannen "alimman" päivämäärän kolmannella sijainnilla, Excel VBA toistaa täsmälleen samat vaiheet i = 4, jne.

8. Sulje ensimmäinen For Next -silmukka (If -lauseen ulkopuolella).

Seuraavaksi minä

9. Testaa ohjelmasi.

Tulos:

Tulet auttaa kehittämään sivuston jakaminen sivu ystävillesi

wave wave wave wave wave