Nejjednodušším typem smyčky v programování Excel VBA je smyčka For-Next. Smyčka je řízena proměnnou čítače, která začíná na jedné hodnotě a končí na jiné hodnotě. Příkazy mezi příkazem For a příkazem Next jsou příkazy, které se opakují v cyklu.
Příklad For-Next
Následující příklad používá smyčku For-Next k sečtení prvních 1 000 kladných čísel. Proměnná Total začíná nulou. Poté dojde k zacyklení. Proměnná Cnt je čítač smyčky. Začíná jako 1 a při každém průchodu smyčkou se zvýší o 1. Smyčka končí, když je Cnt 1 000.
Tento příklad má uvnitř smyčky pouze jeden příkaz. Tento příkaz přidá hodnotu Cnt k proměnné Total. Když smyčka skončí, MsgBox zobrazí součet čísel.
Sub AddNumbers()
Dim Total As Double
Dim Cnt As Long
Celkem = 0
Pro Cnt = 1 až 1000
Celkem = Celkem + Cnt
Další Cnt
MsgBox celkem
End Sub
Protože čítač smyček je normální proměnná, můžete napsat kód pro změnu jeho hodnoty v rámci bloku kódu mezi příkazy For a Next. To je však velmi špatná praxe.
Příklady pro další s krokem
Hodnotu Step můžete použít k přeskočení některých hodnot čítače ve smyčce For-Next. Zde je předchozí příklad, přepsaný tak, aby sčítal pouze lichá čísla mezi 1 a 1 000:
Sub AddOddNumbers()
Dim Total As Double
Dim Cnt As Long
Celkem = 0
Pro Cnt = 1 až 1000 Krok 2
Celkem = Celkem + Cnt
Další Cnt
MsgBox celkem
End Sub
Tentokrát Cnt začíná jako 1 a poté nabývá hodnot 3, 5, 7 a tak dále. Hodnota Step určuje, jak se bude čítač zvyšovat. Všimněte si, že hodnota horní smyčky (1000) se ve skutečnosti nepoužívá, protože nejvyšší hodnota Cnt bude 999.
Zde je další příklad, který používá hodnotu Step 3. Tento postup pracuje s aktivním listem a aplikuje světle šedé stínování na každý třetí řádek, od řádku 1 do řádku 100.
Sub ShadeEveryThirdRow()
Dim i As Long
Pro i = 1 až 100 Krok 3
Řádky(i).Interiér.Barva = RGB(200, 200, 200)
Příště já
End Sub
Podívejte se na výsledek spuštění tohoto makra.
Použití smyčky k použití stínování pozadí na řádky.
Příklad For-Next s příkazem Exit For
Smyčka For-Next může také obsahovat jeden nebo více příkazů Exit For v rámci smyčky. Když VBA narazí na tento příkaz, smyčka se okamžitě ukončí.
Následující příklad ukazuje příkaz Exit For. Tato rutina je procedura Function určená k použití ve vzorci listu. Funkce přijímá jeden argument (proměnnou s názvem Str) a vrací znaky nalevo od první číslice. Pokud je například argument „KBR98Z“, funkce vrátí „KBR“.
Funkce TextPart(Str)
Dim i As Long
TextPart = ""
Pro i = 1 To Len(Str)
If IsNumeric(Mid(Str, i, 1)) Then
Konec pro
Jiný
TextPart = TextPart & Mid(Str, i, 1)
End If
Příště já
End Function
Smyčka For-Next začíná 1 a končí číslem, které představuje počet znaků v řetězci. Kód používá funkci Mid jazyka VBA k extrahování jediného znaku ve smyčce. Pokud je nalezen číselný znak, provede se příkaz Exit For a cyklus se předčasně ukončí.
Pokud znak není číselný, připojí se k vrácené hodnotě (která je stejná jako název funkce). Smyčka bude zkoumat každý znak pouze tehdy, když řetězec předaný jako argument neobsahuje žádné číselné znaky.
Vnořený příklad For-Next
Ve smyčce můžete mít libovolný počet příkazů a vnořit smyčky For-Next do jiných smyček For-Next.
Následující příklad používá vnořenou smyčku For-Next k vložení náhodných čísel do rozsahu buněk 12 řádků krát 5 sloupců. Všimněte si, že rutina provádí vnitřní smyčku (smyčku s čítačem Row) jednou pro každou iteraci vnější smyčky (smyčku s čítačem Col). Jinými slovy, rutina provede příkaz Cells(Row, Col) = Rnd 60krát.
Tyto buňky byly vyplněny pomocí vnořené smyčky For-Next.
Sub FillRange()
Dim Col As Long
Dim Row As Long
Pro Col = 1 až 5
Pro řádek = 1 až 12
Buňky (řádek, sloupec) = Rnd
Další řádek
Dále plk
End Sub
Následující příklad používá vnořené cykly For-Next k inicializaci trojrozměrného pole s hodnotou 100. Tato rutina provede příkaz uprostřed všech cyklů (příkaz přiřazení) 1 000krát (10 * 10 * 10), pokaždé s jinou kombinací hodnot pro i, j a k:
Sub NestedLoops()
Dim MyArray(10, 10, 10)
Dim i As Long
Dim j As Long
Dim k As Long
Pro i = 1 až 10
Pro j = 1 až 10
Pro k = 1 až 10
MyArray(i, j, k) = 100
Další k
Další j
Příště já
Další prohlášení najdete zde
End Sub
Zde je poslední příklad, který používá vnořené smyčky For-Next s hodnotou Step. Tento postup vytvoří šachovnici změnou barvy pozadí střídajících se buněk.
Pomocí smyček vytvořte šachovnicový vzor.
Čítač řádků zacyklí od 1 do 8. Konstrukce If-Then určuje, která vnořená struktura For-Next se má použít. U lichých řádků začíná počítadlo Col 2. U sudých řádků začíná počítadlo Col 1. Obě smyčky používají hodnotu Step 2, takže jsou ovlivněny alternativní buňky. Dva další příkazy dělají buňky čtvercové (stejně jako skutečná šachovnice).
Sub MakeCheckerboard()
Ztlumit R jako dlouhé, C jako dlouhé
Pro R = 1 až 8
If WorksheetFunction.IsOdd(R) Then
Pro C = 2 až 8 Krok 2
Cells(R,C).Interior.Color = 255
Další C
Jiný
Pro C = 1 až 8 Krok 2
Cells(R,C).Interior.Color = 255
Další C
End If
Další R
Řádky(“1:8”).RowHeight = 35
Columns(“A:H”).ColumnWidth = 6,5
End Sub