/ / Rūšiuoti gimtadienius Excel VBA

Rūšiuoti gimtadienius "Excel VBA"

Žemiau apžvelgsime programą Excel VBA tai rūšiuoja gimtadienius pirmieji mėnesiai ir dienos sekundės (taigi mes ignoruojamemetai). Mes norime, kad gimtadienis su mažiausiu mėnesio skaičiumi būtų pirmasis. Jei yra gimtadienių su vienodais mėnesiais, mes norime, kad gimtadienis būtų pats mažiausiu dienos numeriu. Ar tu pasiruošęs?

Padėtis:

Rūšiuoti gimtadienius. Pavyzdys

Pastaba: datos yra JAV formatu. Pirmieji mėnesiai, Dieną antrą kartą. Šio formato tipas priklauso nuo jūsų "Windows" regiono nustatymų.

1. Pirma, deklaruojame aštuonis kintamuosius. Vienos datos kintamasis mes vadiname tempDate, vienas Styginių kintamasis, kurį vadiname tempName. Kiti šeši kintamieji yra integruotų kintamųjų su pavadinimais monthToCheck, dayToCheck, monthNext, dayNext, i ir 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. Mes pradedame du "Next" kilpos.

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

Pavyzdys: i = 2, j = 3, 4, ..., 12 ir 13 yra tikrinami.

3. Mes inicijuoti keturis integruotus kintamuosius. Mes naudojame funkciją "Mėnuo", kad gautumėte mėnesio datą ir dienos funkciją, kad gautumėte dienos datą.

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

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

Pavyzdžiui: pradžioje, jei i = 2; Bregje data ir j = i + 1 = 2 + 1 = 3; bus pasirinkta Nielso data.

4. Tinkamai surūšiuoti datos palyginame pirmąją datą (monthToCheck ir dayToCheck) su kita datos (monthNext ir dayNext). Jei kita data yra "mažesnė", mes keičiame datas ir pavadinimus. Įrašykite tokį teiginį If Then.

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

End If

Jei aukščiau pateiktas teiginys yra teisingas, mes keičiame datas ir pavadinimus.

Pavyzdžiui: jei i = 2 ir j = 3, patikrinama Bregje ir Niels data. MonthNext = 6, monthToCheck = 2. Aukščiau pateiktas teiginys yra neteisingas, nes monthNext yra didesnis nei monthToCheck. Excel VBA padidina j iki 1 ir kartoja kodo eilutes i = 2 ir j = 4. Galite lengvai pamatyti, kad Joost (j = 4) turi didesnį mėnesio skaičių nei Bregje, todėl einame į kitą. Mes gauname tą patį rezultatą už j = 5 ir j = 6. Kai atvyksime prie j = 7, mes turime šiuos kintamuosius: monthNext = 2 ir dayNext = 9. MonthToCheck = 2 ir dayToCheck = 12. Dabar aukščiau pateiktas teiginys yra tiesa nuo monthNext = monthToCheck ir dayNext (9) yra mažesnis nei dayToCheck (12).

5. Mes keisime datas. Laikinai laikome vieną datą tempDate, kad "Excel VBA" galėtumėte tinkamai pakeisti datą. Įrašykite šias kodo eilutes.

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

6. Mes darome tą patį su pavadinimais. Įrašykite šias kodo eilutes.

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

7. Uždarome antrąją eilutę "Kita kilpa" (už "If statement").

Next j

Jei i = 2 ir j = 7, "Excel VBA" pakeitė datasir vardai. Tai reiškia, kad mes priimame Richard pirmojoje pozicijoje, o Bregje - 7 pozicijoje. Tai taip pat reiškia, kad pradedant kitą iteraciją mes gauname naują monthToCheck ir dayToCheck (jei i = 2 ir j = 8). Dabar mes palyginsime Richardą su Dineke (j = 8). Jūs galite lengvai pamatyti, kad nereikia keisti šių datų ir pavadinimų, nes Richard turi "mažesnę" datą. Tiesą sakant, Richardui (i = 2) nereikia keisti Jano (j = 9), Wendy (j = 10), Jeroen (j = 11), John (j = 12) ir Debby (j = 13). Tai yra todėl, kad Richardas turi "mažiausią" datą. Tokiu būdu Excel VBA gaus (i = 2) "mažiausią" datą pirmojoje pozicijoje. Norėdami gauti antrą "žemiausią" datą antroje pozicijoje, "Excel VBA" pakartoja tas pačias priemones, kurios i = 3. Kad trečia "mažiausia" data būtų trečioje pozicijoje, "Excel VBA" pakartoja tas pačias žingsnius i = 4, ir tt

8. Uždarykite pirmąją eilutę "Kita kilpa" (už "If statement").

Next i

9. Patikrinkite savo programą.

Rezultatas:

Rūšiuoti gimtadienius "Excel VBA"

Taip pat perskaitykite: