Sorter fødselsdager i Excel VBA - Enkle Excel -makroer

Innholdsfortegnelse

Nedenfor ser vi på et program i Excel VBA at sorterer bursdager til måneder først og dager andre (så vi ignorerer år). Vi vil ha bursdagen med det laveste månedstallet på første posisjon. Hvis det er bursdager med like månedstall, ønsker vi først bursdagen med det laveste dagnummeret. Er du klar?

Situasjon:

Merk: Datoer er i amerikansk format. Måneder først, dager andre. Denne formatet avhenger av dine regionale innstillinger i Windows.

1. For det første erklærer vi åtte variabler. En datavariabel vi kaller tempDate, en strengvariabel vi kaller tempName. De seks andre variablene er heltallsvariabler med navnene monthToCheck, dayToCheck, monthNext, dayNext, i og 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 starter to For Next loops.

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

Eksempel: for i = 2, j = 3, 4,…, 12 og 13 er merket.

3. Vi initialiserer fire heltallsvariabler. Vi bruker månedsfunksjonen for å få måneden for en dato og dagfunksjonen for å få dagen til en dato.

monthToCheck = måned (celler (i, 2). verdi)
dayToCheck = dag (celler (i, 2). verdi)
månedNeste = måned (celler (j, 2). verdi)
dayNext = dag (celler (j, 2). verdi)

For eksempel: i begynnelsen, for i = 2; datoen for Bregje, og j = i + 1 = 2 + 1 = 3; datoen til Niels vil bli valgt.

4. For å sortere datoene riktig, sammenligner vi den første datoen (monthToCheck og dayToCheck) med neste dato (monthNext og dayNext). Hvis neste dato er 'lavere', bytter vi datoer og navn. Legg til følgende If Then -setning.

Hvis (monthNext <monthToCheck) Eller (monthNext = monthToCheck And dayNext <dayToCheck)
Slutt om

Hvis utsagnet ovenfor er sant, bytter vi datoer og navn.

For eksempel: for i = 2 og j = 3, blir datoen for Bregje og Niels sjekket. MonthNext = 6, monthToCheck = 2. Setningen ovenfor er ikke sann siden monthNext er høyere enn monthToCheck. Excel VBA øker j med 1 og gjentar kodelinjene for i = 2 og j = 4. Du kan enkelt se at Joost (j = 4) har et høyere månedstall enn Bregje, så vi går til neste. Vi får det samme resultatet for j = 5 og j = 6. Når vi kommer til j = 7, har vi følgende variabler: monthNext = 2 og dayNext = 9. MonthToCheck = 2 og dayToCheck = 12. Nå er utsagnet ovenfor sant siden monthNext = monthToCheck og dayNext (9) er lavere enn dayToCheck (12).

5. Vi bytter datoene. Vi lagrer midlertidig én dato til tempDate, slik at Excel VBA kan bytte datoene riktig. Legg til følgende kodelinjer i If -setningen.

'bytt dato
tempDate = Celler (i, 2) .Værdi
Celler (i, 2) .Value = Celler (j, 2) .Værdi
Celler (j, 2) .Value = tempDate

6. Vi gjør det samme med navnene. Legg til følgende kodelinjer i If -setningen.

'bytt navn
tempName = Celler (i, 1) .Value
Celler (i, 1) .Value = Celler (j, 1) .Værdi
Celler (j, 1) .Value = tempName

7. Vi lukker den andre For Next -sløyfen (utenfor If -setningen).

Neste j

For i = 2 og j = 7 byttet Excel VBA datoer og navn. Det betyr at vi får Richard på den første stillingen og Bregje på posisjon 7. Det betyr også at vi får en ny månedToCheck og dayToCheck i begynnelsen av vår neste iterasjon (for i = 2 og j = 8). Vi vil nå sammenligne Richard med Dineke (j = 8). Du kan enkelt se at det ikke er nødvendig å erstatte disse datoene og navnene fordi Richard har en "lavere" dato. Faktisk er det ikke nødvendig å erstatte Richard (i = 2) med Jan (j = 9), Wendy (j = 10), Jeroen (j = 11), John (j = 12) og Debby (j = 13). Det er fordi Richard har den "laveste" datoen. På denne måten får Excel VBA (for i = 2) den 'laveste' datoen på den første posisjonen. For å få den andre 'laveste' datoen på den andre posisjonen, gjentar Excel VBA nøyaktig de samme trinnene for i = 3. For å få den tredje 'laveste' datoen på den tredje posisjonen, gjentar Excel VBA nøyaktig de samme trinnene for i = 4, etc.

8. Lukk den første For Next -sløyfen (utenfor If -setningen).

Neste jeg

9. Test programmet ditt.

Resultat:

Du vil bidra til utvikling av området, dele siden med vennene dine

wave wave wave wave wave