/ / Třídění narozenin v aplikaci Excel VBA

Třídění narozenin v aplikaci Excel VBA

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 ignorujemelet). Chceme mít narozeniny s nejnižším měsíčním číslem na první pozici. Pokud existují narozeniny se stejnými měsíčními čísly, chceme nejprve narozeniny s nejnižším číslem dne. Jsi připraven?

Situace:

Třídit příklad narozenin

Poznámka: Data jsou ve formátu US. Měsíce první, Dny druhé. Tento typ formátu závisí na nastavení regionálních oken.

1. Nejprve deklarujeme osm proměnných. Jedna proměnná Date nazýváme tempDate, jednu proměnnou String nazýváme tempName. Další šest proměnných jsou celočíselné proměnné s názvy monthToCheck, dayToCheck, monthNext, dayNext, i and 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ě smyčky For Next.

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

Příklad: pro i = 2, j = 3, 4, ..., 12 a 13 jsou zkontrolovány.

3. Inicializujeme čtyři celočíselné proměnné. Funkci Měsíc použijeme k získání měsíce data a funkce Den pro získání data.

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

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

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

4. Chcete-li data řádně třídit, porovnáme první datum (monthToCheck a dayToCheck) s následujícím datem (měsícDalší a denníprostředí). Pokud je další datum "nižší", vyměníme si data a jména. Přidejte následující příkaz If Then.

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

End If

Pokud je výše uvedené tvrzení pravdivé, vyměníme si data a jména.

Například: pro i = 2 a j = 3 se kontroluje datum Bregje a Nielsa. MonthNext = 6, monthToCheck = 2. Výše ​​uvedené tvrzení není pravdivé, protože monthNext je vyšší než monthToCheck. Excel VBA inkrementuje j po 1 a zopakuje řádky kódů pro i = 2 a j = 4. Snadno vidíte, že Joost (j = 4) má vyšší číslo měsíce než Bregje, takže jdeme na další. Získáváme stejný výsledek pro j = 5 a j = 6. Když dorazíme na j = 7, máme následující proměnné: monthNext = 2 a dayNext = 9. MonthToCheck = 2 a dayToCheck = 12. Nyní platí výše uvedené prohlášení protože monthNext = monthToCheck a dayNext (9) je nižší než dayToCheck (12).

5. Vyměňujeme data. Dočasně uložíme jeden datum do tempDate, takže aplikace Excel VBA dokáže správně vyměnit data. Přidejte následující řádky kódu do příkazu If.

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

6. Děláme to isté s jmény. Přidejte následující řádky kódu do příkazu If.

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

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

Next j

Pro i = 2 a j = 7, Excel VBA vyměnil dataa jména. To znamená, že dostáváme Richarda na první pozici a Bregje na pozici 7. To také znamená, že na začátku další iterace (pro i = 2 a j = 8) získáme nový měsícToCheck a DayToCheck. Nyní porovnáme Richarda s Dinekem (j = 8). Můžete snadno vidět, že není potřeba nahradit data a jména, protože Richard má "nižší" datum. Ve skutečnosti není zapotřebí nahradit Richard (i = 2) Jan (j = 9), Wendy (j = 10), Jeroen (j = = 13). To proto, že Richard má "nejnižší" datum. Tímto způsobem Excel VBA získá (pro i = 2) "nejnižší" datum na první pozici. Chcete-li získat druhou nejnižší hodnotu na druhé pozici, Excel VBA zopakuje stejné kroky pro i = 3. Chcete-li získat třetí "nejnižší" datum ve třetí pozici, Excel VBA opakuje přesně stejné kroky pro i = 4, atd.

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

Next i

9. Otestujte svůj program.

Výsledek:

Třídění narozenin v aplikaci Excel VBA

Také si přečtěte: