Sortează zilele de naștere în Excel VBA - Macro-uri Excel ușoare

Cuprins

Mai jos vom analiza un program în Excel VBA acea sortează zilele de naștere la prima lună și a doua zi (deci ignorăm anii). Vrem ziua de naștere cu cel mai mic număr de lună la prima poziție. Dacă există zile de naștere cu numere egale de lună, dorim mai întâi ziua de naștere cu cel mai mic număr de zi. Sunteți gata?

Situatie:

Notă: Datele sunt în format SUA. Primele luni, Zilele a doua. Acest tip de format depinde de setările regionale Windows.

1. În primul rând, declarăm opt variabile. O variabilă Date pe care o numim tempDate, o variabilă String pe care o numim tempName. Celelalte șase variabile sunt variabile întregi cu nume monthToCheck, dayToCheck, monthNext, dayNext, i și j.

Dim tempDate As Date, tempName As String
Dim luna Pentru a verifica ca întreg, zi Pentru a verifica ca întreg, luna Următor Ca întreg, zi Următor Ca întreg, i Ca întreg, j Ca întreg

2. Începem două bucle For Next.

Pentru i = 2 - 13
Pentru j = i + 1 până la 13

Exemplu: pentru i = 2, se verifică j = 3, 4, …, 12 și 13.

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

monthToCheck = month (Celule (i, 2). Valoare)
dayToCheck = day (Celule (i, 2). Valoare)
monthNext = month (Celule (j, 2). Valoare)
dayNext = day (Celule (j, 2). Valoare)

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

4. Pentru a sorta corect datele, comparăm prima dată (monthToCheck și dayToCheck) cu data următoare (monthNext și dayNext). Dacă următoarea dată este „mai mică”, schimbăm datele și numele. Adăugați următoarea instrucțiune If Then.

Dacă (monthNext <monthToCheck) Sau (monthNext = monthToCheck Și dayNext <dayToCheck) Apoi
End If

Dacă afirmația de mai sus este adevărată, schimbăm datele și numele.

De exemplu: pentru i = 2 și j = 3, se verifică data lui Bregje și Niels. MonthNext = 6, monthToCheck = 2. Afirmația de mai sus nu este adevărată, deoarece monthNext este mai mare decât monthToCheck. Excel VBA crește 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, deci trecem la următoarea. 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ă de la monthNext = monthToCheck și dayNext (9) este mai mic decât dayToCheck (12).

5. Schimbăm datele. Stocăm temporar o dată pentru tempDate, astfel încât Excel VBA să poată schimba datele corect. Adăugați următoarele linii de cod în instrucțiunea If.

'schimbați datele
tempDate = Celule (i, 2). Valoare
Celule (i, 2). Valoare = Celule (j, 2). Valoare
Celule (j, 2) .Value = tempDate

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

'nume de swap
tempName = Celule (i, 1). Valoare
Celule (i, 1). Valoare = Celule (j, 1). Valoare
Celule (j, 1) .Value = tempName

7. Închidem a doua buclă For Next (În afara instrucțiunii If).

Următorul j

Pentru i = 2 și j = 7, Excel VBA a schimbat datele și numele. Asta înseamnă că îl primim pe Richard pe prima poziție și pe Bregje pe poziția 7. Asta înseamnă, de asemenea, că primim o nouă lună ToCheck și dayToCheck la începutul următoarei noastre iterații (pentru i = 2 și j = 8). Acum îl vom compara pe Richard cu Dineke (j = 8). Puteți vedea cu ușurință că nu este nevoie să înlocuiți acele date și nume, deoarece Richard are o dată „mai mică”. De fapt, nu este nevoie să înlocuiască Richard (i = 2) cu Jan (j = 9), Wendy (j = 10), Jeroen (j = 11), John (j = 12) și Debby (j = 13). Asta pentru că Richard are cea mai mică întâlnire. În acest fel, Excel VBA va obține (pentru i = 2) data „cea mai mică” la prima poziție. Pentru a obține a doua dată „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 dată „cea mai mică” la a treia poziție, Excel VBA repetă exact aceiași pași pentru i = 4, etc.

8. Închideți prima buclă For Next (În afara instrucțiunii If).

Apoi eu

9. Testează-ți programul.

Rezultat:

Vei ajuta la dezvoltarea site-ului, partajarea pagina cu prietenii

wave wave wave wave wave