/ / Sortera födelsedagar i Excel VBA

Sortera födelsedagar i Excel VBA

Nedan ser vi på ett program i Excel VBA den där sorterar födelsedagar till månader första och andra dagarna (så vi ignorerarår). Vi vill ha födelsedagen med lägst månad nummer på första platsen. Om det finns födelsedagar med lika månadstal vill vi födelsedagen med lägsta dagnumret först. Är du redo?

Situation:

Sortera födelsedagar exempel

Obs! Datum är i US-format. Månader först, Dags andra. Denna typ av format beror på dina regionala inställningar i Windows.

1. Först förklarar vi åtta variabler. En Date-variabel vi kallar tempDate, en strängvariabel vi kallar tempName. De övriga sex variablerna är integervariabler med namn monthToCheck, dayToCheck, monthNext, dayNext, i och 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. Vi startar två för nästa loopar.

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

Exempel: för i = 2, j = 3, 4, ..., 12 och 13 kontrolleras.

3. Vi initierar fyra integervariabler. Vi använder funktionen månad för att få månad för ett datum och dagfunktionen för att få dagen för ett datum.

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

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

Till exempel: i början, för i = 2; Datumet för Bregje, och j = i + 1 = 2 + 1 = 3; Niels datum kommer att väljas.

4. För att sortera datumen korrekt jämför vi det första datumet (monthToCheck och dayToCheck) med nästa datum (monthNext and dayNext). Om nästa datum är "lägre" byter vi datum och namn. Lägg till följande If Then statement.

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

End If

Om ovanstående uttalande är sant byter vi datum och namn.

Till exempel: för i = 2 och j = 3 kontrolleras datumet för Bregje och Niels. MonthNext = 6, monthToCheck = 2. Ovanstående uttalande är inte sant sedan monthNext är högre än monthToCheck. Excel VBA ökar j med 1 och upprepar kodlinjerna för i = 2 och j = 4. Du kan lätt se att Joost (j = 4) har ett högre månadstal än Bregje, så vi går till nästa. Vi får samma resultat för j = 5 och j = 6. När vi kommer till j = 7 har vi följande variabler: monthNext = 2 and dayNext = 9. MonthToCheck = 2 och dayToCheck = 12. Nu är ovanstående uttalande sant sedan monthNext = monthToCheck och dayNext (9) är lägre än dayToCheck (12).

5. Vi byter datum. Vi lagrar tillfälligt ett datum för att tempDate, så att Excel VBA kan byta datum korrekt. Lägg till följande kodrader i If-förklaringen.

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

6. Vi gör detsamma med namnen. Lägg till följande kodrader i If-förklaringen.

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

7. Vi stänger den andra For Next-loopen (Utanför If-satsen).

Next j

För i = 2 och j = 7 bytte Excel VBA datumenoch namn. Det betyder att vi får Richard vid första positionen och Bregje på position 7. Det betyder också att vi får en ny monthToCheck och dayToCheck i början av nästa iteration (för i = 2 och j = 8). Vi ska nu jämföra Richard med Dineke (j = 8). Du kan enkelt se att det inte finns något behov av att ersätta dessa datum och namn eftersom Richard har ett "lägre" datum. I själva verket behöver man inte ersätta Richard (i = 2) med Jan (j = 9), Wendy (j = 10), Jeroen (j = 11), John (j = 12) och Debby = 13). Det beror på att Richard har det lägsta datumet. På så sätt får Excel VBA (för i = 2) "lägsta" datumet vid den första positionen. För att få det andra "lägsta" datumet i den andra positionen, upprepar Excel VBA exakt samma steg för i = 3. För att få det tredje "lägsta" datumet i det tredje läget, upprepar Excel VBA exakt samma steg för i = 4, etc.

8. Stäng den första För nästa slingan (Utanför If-satsen).

Next i

9. Testa ditt program.

Resultat:

Sortera födelsedagar i Excel VBA

Läs också: