/ / Sortați zilele de naștere în Excel VBA

Sortați zilele de naștere în Excel VBA

Mai jos ne vom uita la un program în Excel VBA acea sortează zile de naștere la lunile întâi și zilele secunde (așa că ignorămani). Vrem ziua de nastere cu cel mai mic numar de luna in prima pozitie. Dacă există zile de naștere cu numere de luni egale, vrem ziua întâi cu cel mai mic număr de zi. Sunteți gata?

Situatie:

Sortați exemplul zilelor de naștere

Notă: datele sunt în format US. Luni prima, Zilele a doua. Acest tip de format depinde de setările regionale ale Windows.

1. În primul rând, declarăm opt variabile. O variabilă Date numim tempDate, o variabilă String numită tempName. Celelalte șase variabile sunt variabilele Integer cu numele 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. Începem două bucle For Next.

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

Exemplu: pentru i = 2, j = 3, 4, ..., 12 și 13 sunt verificate.

3. Inițializăm patru variabile întregi. Folosim funcția Lună pentru a obține luna pentru o dată și funcția Zi pentru a obține ziua unei date.

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

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

De exemplu: la început, pentru i = 2; data lui Bregje și j = i + 1 = 2 + 1 = 3; data Niels va fi aleasă.

4. Pentru a sorta datele în mod corespunzător, comparăm prima dată (monthToCheck și dayToCheck) cu data următoare (lunaDext și ziua următoare). Dacă următoarea dată este "mai mică", vom schimba datele și numele. Adăugați următoarea instrucțiune If Then.

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

End If

Dacă declarația de mai sus este adevărată, vom schimba datele și numele.

De exemplu: pentru i = 2 și j = 3, datele lui Bregje și Niels sunt verificate. MonthNext = 6, monthToCheck = 2. Instrucțiunea de mai sus nu este adevărată deoarece lunaUrmătorul este mai mare decât monthToCheck. Exemplu VBA incrementează j cu 1 și repetă liniile de cod pentru i = 2 și j = 4. Puteți vedea cu ușurință că Joost (j = 4) are un număr de lună mai mare decât Bregje, așa că mergem la următorul. Obținem același rezultat pentru j = 5 și j = 6. Când ajungem la j = 7, avem următoarele variabile: monthNext = 2 și dayNext = 9. MonthToCheck = 2 și dayToCheck = 12. Acum, afirmația de mai sus este adevărată deoarece monthNext = monthToCheck și dayNext (9) este mai mică decât dayToCheck (12).

5. Schimbăm datele. Am stocat temporar o dată la tempDate, astfel încât Excel VBA poate schimba datele în mod corespunzător. Adăugați următoarele linii de cod în instrucțiunea If.

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

6. Facem același lucru și cu numele. Adăugați următoarele linii de cod în instrucțiunea If.

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

7. Închidem cea de-a doua buclă Pentru următorul (afară).

Next j

Pentru i = 2 și j = 7, Excel VBA a schimbat dateleși nume. Asta inseamna ca l-am obtinut pe Richard in prima pozitie si pe Bregje la pozitia 7. Asta inseamna, de asemenea, ca vom primi o noua lunaToCheck si dayToCheck la inceputul urmatoarei iteratii (pentru i = 2 si j = 8). Acum vom compara Richard cu Dineke (j = 8). Puteți observa cu ușurință că nu este nevoie să înlocuiți datele și numele deoarece Richard are o dată "inferioară". De fapt, nu este necesar să înlocuiți Richard (i = 2) cu Jan (j = 9), Wendy (j = 10), Jeroen (j = = 13). Asta pentru că Richard are cea mai mică dată. Astfel, Excel VBA va primi (pentru i = 2) data "cea mai mică" din prima poziție. Pentru a obține cea de-a doua poziție "cea mai mică" la a doua poziție, Excel VBA repetă exact aceiași pași pentru i = 3. Pentru a obține a treia "cea mai mică" dată în a treia poziție, Excel VBA repetă exact aceiași pași pentru i = etc.

8. Închideți prima buclă Pentru următorul (în afara instrucțiunii If).

Next i

9. Testați-vă programul.

Rezultat:

Sortați zilele de naștere în Excel VBA

De asemenea, citiți: