/ / Kārtot dzimšanas dienas Excel VBA

Kārtot dzimšanas dienas Excel VBA

Tālāk mēs apskatīsim programmu programmā Excel VBA ka dažādas dzimšanas dienas pirmie mēneši un dienas sekundes (tāpēc mēs ignorējamgadi). Mēs gribam dzimšanas dienu ar zemāko mēneša numuru pirmajā pozīcijā. Ja ir dzimšanas dienas ar vienādiem mēnešu skaitļiem, mēs gribam dzimšanas dienu ar viszemāko dienu skaitu. Vai tu esi gatavs?

Situācija:

Sakārtot dzimšanas dienas Piemērs

Piezīme. Datumi ir ASV formātā. Pirmais mēnesis, Dienas sekundes. Šāda veida formāts ir atkarīgs no jūsu Windows reģionālajiem iestatījumiem.

1. Vispirms mēs deklarējam astoņus mainīgos lielumus. Viena Datuma mainīgais, ko mēs saucam par tempDate, viens String mainīgais, ko saucam par tempName. Pārējie seši mainīgie ir integer mainīgie ar nosaukumiem monthToCheck, dayToCheck, monthNext, dayNext, i un 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. Mēs sākam divus nākamajām cilpām.

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

Piemērs: i = 2, j = 3, 4, ..., 12 un 13 tiek pārbaudīti.

3. Mēs inicializējam četrus Integer mainīgos. Mēs izmantojam funkciju Mēnesis, lai saņemtu datumu mēnesi un dienas funkciju, lai iegūtu datumu.

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

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

Piemēram: sākumā i = 2; Bregjes datums un j = i + 1 = 2 + 1 = 3; tiks izvēlēts Niels datums.

4 Lai pareizi kārtotu datumus, salīdzinām pirmo datumu (monthToCheck un dayToCheck) ar nākamo datumu (monthNext un dayNext). Ja nākamais datums ir "mazāks", mēs apmainām datumus un vārdus. Pievienojiet tālāk norādīto If Then paziņojumu.

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

End If

Ja iepriekš minētais apgalvojums ir taisnība, mēs apmainām datumus un vārdus.

Piemēram: ja i = 2 un j = 3, pārbauda Bregjē un Niels datumu. MonthNext = 6, monthToCheck = 2. Iepriekšējais paziņojums nav taisnība, jo monthNext ir augstāks par monthToCheck. Excel VBA palielina j ar 1 un atkārto koda līnijas i = 2 un j = 4. Jūs varat viegli redzēt, ka Joost (j = 4) ir lielāks mēneša numurs nekā Bregje, tāpēc mēs ejam uz nākamo. Mēs saņemam tādu pašu rezultātu par j = 5 un j = 6. Kad mēs ierodas pie j = 7, mums ir šādi mainīgie: monthNext = 2 un dayNext = 9. MonthToCheck = 2 un dayToCheck = 12. Tagad iepriekš teiktais ir patiess kopš monthNext = monthToCheck un dayNext (9) ir mazāks par dayToCheck (12).

5. Mēs apmainām datumus. Mēs īslaicīgi saglabājam vienu datumu tempDate, lai Excel VBA pareizi varētu mijmaiņas datumus. Pievienojiet šādus koda rindas paziņojumā If.

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

6. Mēs darām to pašu ar vārdiem. Pievienojiet šādus koda rindas paziņojumā If.

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

7. Mēs aizveram otro nākamo cilni (Ārpus paziņojuma).

Next j

Ja i = 2 un j = 7, Excel VBA mainīja datumusun vārdi. Tas nozīmē, ka mēs iegūstam Richard pirmajā pozīcijā un Bregje 7. vietā. Tas arī nozīmē, ka mēs saņemam jaunu monthToCheck un dayToCheck mūsu nākamās iterācijas sākumā (ja i ​​= 2 un j = 8). Mēs tagad salīdzināsim Richard ar Dineke (j = 8). Jūs varat viegli redzēt, ka šie datumi un nosaukumi nav jāaizstāj, jo Richard ir "zemāks" datums. Faktiski nav vajadzības nomainīt Richard (i = 2) ar Jan (j = 9), Wendy (j = 10), Jeroen (j = 11), John (j = 12) un Debby (j = 13). Tas ir tāpēc, ka Ričardam ir "viszemākais" datums. Tādējādi Excel VBA saņems (i = 2) "zemāko" datumu pirmajā pozīcijā. Lai iegūtu otro otro vietu zemākam datumam, Excel VBA atkārto tieši tādas pašas darbības i = 3. Lai iegūtu trešo "zemāko" datumu trešajā pozīcijā, Excel VBA atkārto tieši tādas pašas darbības i = 4, utt.

8. Aizveriet pirmo par nākamo cilni (Ārpus paziņojuma).

Next i

9. Pārbaudiet savu programmu.

Rezultāts:

Kārtot dzimšanas dienas Excel VBA

Lasīt arī: