Třídit narozeniny v aplikaci Excel VBA - snadná makra aplikace Excel

Obsah

Níže se podíváme na program v Excel VBA že třídí narozeniny na měsíce první a dny na druhé (takže roky ignorujeme). Chceme narozeniny s nejnižším číslem měsíce na první pozici. Pokud existují narozeniny se stejným číslem měsíce, chceme nejprve narozeniny s nejnižším číslem dne. Jsi připraven?

Situace:

Poznámka: Data jsou ve formátu USA. První měsíce, druhé dny. Tento typ formátu závisí na místním nastavení systému Windows.

1. Nejprve deklarujeme osm proměnných. Jedna proměnná data, kterou nazýváme tempDate, jedna proměnná řetězce, kterou nazýváme tempName. Dalších šest proměnných jsou celočíselné proměnné s názvy monthToCheck, dayToCheck, monthNext, dayNext, i a 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. Začneme dvěma smyčkami For Next.

Pro i = 2 až 13
Pro j = i + 1 až 13

Příklad: pro i = 2 je zaškrtnuto j = 3, 4,…, 12 a 13.

3. Inicializujeme čtyři celočíselné proměnné. Pomocí funkce Měsíc získáme měsíc data a pomocí funkce Den datum.

monthToCheck = měsíc (buňky (i, 2). hodnota)
dayToCheck = den (buňky (i, 2). hodnota)
monthNext = měsíc (buňky (j, 2). hodnota)
dayNext = den (buňky (j, 2). hodnota)

Například: na začátku pro i = 2; datum Bregje, a j = i + 1 = 2 + 1 = 3; datum Niels bude vybráno.

4. Abychom data seřadili správně, porovnáme první datum (monthToCheck a dayToCheck) s dalším datem (monthNext a dayNext). Pokud je další datum „nižší“, data a jména prohodíme. Přidejte následující příkaz If Then.

If (monthNext <monthToCheck) Nebo (monthNext = monthToCheck And dayNext <dayToCheck) Then
Konec If

Pokud je výše uvedené tvrzení pravdivé, prohodíme data a jména.

Například: pro i = 2 a j = 3 se kontroluje datum Bregje a Nielse. MonthNext = 6, monthToCheck = 2. Výše ​​uvedené tvrzení není pravdivé, protože monthNext je vyšší než monthToCheck. Excel VBA zvyšuje j o 1 a opakuje řádky kódu pro i = 2 a j = 4. Můžete snadno vidět, že Joost (j = 4) má vyšší číslo měsíce než Bregje, takže jdeme na další. Stejný výsledek získáme pro j = 5 a j = 6. Když dojdeme k j = 7, máme následující proměnné: monthNext = 2 a dayNext = 9. MonthToCheck = 2 a dayToCheck = 12. Nyní platí výše uvedené tvrzení since monthNext = monthToCheck a dayNext (9) je nižší než dayToCheck (12).

5. Prohodíme data. Dočasně ukládáme jedno datum na tempDate, aby aplikace Excel VBA mohla data správně prohodit. Přidejte následující řádky kódu do příkazu If.

'prohodit data
tempDate = Buňky (i, 2). Hodnota
Buňky (i, 2). Hodnota = buňky (j, 2). Hodnota
Buňky (j, 2). Hodnota = tempDate

6. Totéž děláme se jmény. Přidejte následující řádky kódu do příkazu If.

'vyměnit jména
tempName = Buňky (i, 1). Hodnota
Buňky (i, 1). Hodnota = buňky (j, 1). Hodnota
Buňky (j, 1). Hodnota = tempName

7. Zavřeme druhou smyčku For Next (Mimo příkaz If).

Další j

Pro i = 2 a j = 7 Excel VBA vyměnil data a jména. To znamená, že dostaneme Richarda na první pozici a Bregje na pozici 7. To také znamená, že dostaneme nový monthToCheck a dayToCheck na začátku naší další iterace (pro i = 2 a j = 8). Nyní porovnáme Richarda s Dineke (j = 8). Můžete snadno vidět, že tato data a jména není nutné nahrazovat, protože Richard má „nižší“ datum. Ve skutečnosti není nutné nahrazovat Richarda (i = 2) Janem (j = 9), Wendy (j = 10), Jeroen (j = 11), John (j = 12) a Debby (j = 13). Je to proto, že Richard má „nejnižší“ datum. Tímto způsobem aplikace Excel VBA získá (pro i = 2) „nejnižší“ datum na první pozici. Chcete -li získat druhé 'nejnižší' datum na druhé pozici, Excel VBA opakuje přesně stejné kroky pro i = 3. Chcete -li získat třetí 'nejnižší' datum na třetí pozici, Excel VBA opakuje přesně stejné kroky pro i = 4, atd.

8. Zavřete první smyčku For Next (Mimo příkaz If).

Příště já

9. Otestujte si svůj program.

Výsledek:

Vám pomůže rozvoji místa, sdílet stránku s přáteli

wave wave wave wave wave