Ve spolupráci se SEDUO jsem vytvořil několik videokurzů:
Opakování je nejen matkou moudrosti, ale pomůže i v programování...
... aneb jak provést požadovaný počet opakování ...
Doplněno a rozšířeno: 1.8.2015
V tomto článku se naučíte používat cyklus For Next, pro přehlednost je článek rozdělen na jednotlivé kapitoly:
Pro opakování (skupiny) příkazů podle zadaného počtu opakování.
Syntaxe
For čítač = začátek To konec [krok]
[příkazy]
Next [čítač]
Popis jednotlivých části:
Poznámky:
První příklad - Přičítám jedničku.
For i = 1 To 10
' ... vlastní kód
Next i
Potřebujeme doplnit do prvního sloupce (A) od řádku 1 do řádku 10 čísla 1 až 10.
Dim i As Integer
For i = 1 To 10
Cells(i, 1).Value = i
Next i
Poznámka: Cells(i, 1).Value provede zápis na i-tý řádek zapíše hodnotu i.
Potřebujeme doplnit do prvního sloupce (A) od řádku 1 do řádku 10 čísla 1 až 10, ale pouze lichá. Využijeme v cyklu skok (Step).
Dim i As Integer
For i = 1 To 10 Step 2
Cells(i, 2).Value = i
Next i
Skok nemusí být jen kladný, ale můžeme i odečítat.
Dim i As Integer
For i = 10 To 1 Step -1
Cells(i, 3).Value = 11 - i
Next i
Napřílad pokud potřebujete vyplnit tabulku.
Syntaxe
For I = 1 To 10
For J = 1 To 10
For K = 1 To 10
...
Next K
Next J
Next I
Postupné vyplnění tabulky čísly 1 až ... 33 v tabulce, v řádcíh 4 až 14 a pro sloupce A, B, C, vyplNˇuje se nejprve ve sloupci a po řádcích.
Dim i As Integer
Dim j As Integer
Dim k As Integer
k = 1
For i = 1 To 3
For j = 4 To 14
Cells(j, i).Value = k
k = k + 1
Next j
Next i
Postupné vyplnění tabulky čísly 1 až ... 33 v tabulce, pro sloupce A, B, C a pro řádky 4 až 14, začíná se řádkem a vyplni se všechny sloupce
Dim i As Integer
Dim j As Integer
Dim k As Integer
k = 1
For j = 4 To 14
For i = 1 To 3
Cells(j, i).Value = k
k = k + 1
Next i
Next j
Potřebujeteli opustit předčasně provádění cyklu lze využít příkaz:
Exit For
Využijeme předchozí příklad kdy zapisujeme čísla 1 až 10, ale při číslu 8 potřebujeme ukončit.
Dim i As Integer
For i = 1 To 10
Cells(i, 4).Value = i
If i = 8 Then
Exit For
End If
Next i
Poznámka: Je jasné že podmínka se může vstahovat k úplně jiné proměnné, které se nezávislé mění. Pro jednoduchost v ukázce jsem zvolil i, klidně by se dal cyklus zkrátit na i = 1 To 8 a nemusel bych ho opouštět pomocí Exit For.
Zajímavý dotaz v komentářích, proto jsem doplnil řešení. V prvním sloucpi mám hodnoty a potřebuji vzít první hodnotu z prvního sloupce a postupně přidávat hodnoty co jsou ve sloupci 2, poté vzít druhou hodnotu z prvního sloupce a opět přidávat hodnoty z druhého sloupce.
j = 1
k = 1
For i = 1 To 3
HodnotaBunka = Cells(i, 1)
For j = 1 To 4
HodnotaBunka2 = Cells(j, 2)
HodnotaCelkem = HodnotaBunka & HodnotaBunka2
Cells(k, 3) = HodnotaCelkem
' MsgBox (HodnotaCelkem)
k = k + 1
Next j
Next i
Soubor For Next - praktické ukázky v Excel VBA ke stažení zdarma. Soubor využívá VBA makra.
Děkuji za respektování autorských práv.
Tento článek je součástí on-line výukového kurzu VBA MS Excel.
Máte nějaký zajímavý příklad na praktické použití For Next? Můžete jej uvést v komentářích.
Článek byl aktualizován: 19.09.2020 11:07
Ušetřil vám tento web čas, peníze? Pomohl vyřešit problém? Jste ochotni poskytnout symbolickou odměnu na další rozvoj? Vybrte si formu odměny, která vám vyhovuje.
Microsoft Office (Word, Excel, Google tabulky, PowerPoint) se věnuji od roku 2000 (od 2004 na této doméně) - V roce 2017 jsem od Microsoft získal prestižní ocenění MVP (zatím jsem jediný z ČR v kategorií Excel). Své vědomosti a zkušenosti dávám k dispozici i on-line ve videích pro SEDUO. Ve firmách školím a konzultuji, učím na MUNI. Tento web již tvořím přes 15 let. Zdarma je zde přes 1.000 návodu, tipů a triků, včetně přes 250 různých šablon, sešitů.
Přidáno: 24.07.13 08:48
Zdravím, prosím o nápovědu k tomuto problému:
Vytvářím něco jako dodací list na balíky, mám náklad třeba 200 ks a ty jsou zabaleny do 3 balíků po 60 ti kusech.
Potřebuji aby se mi vygenerovaly 3 dodací listy v šabloně kde na dvou bude
60/200 (jako balík 60 ks ze 200) a poslední bude označen jako zbytkový 80/200 a poslalo se do tisku, zároveň v patičce je označení tisku 1/3, 2/3, 3/3.
Data jsou v řádcích na Listu1, šablona je na Listu2
Po vygenerování a tisku dat z prvního řádku Listu1 načti další řádek na Listu1 a pokračuj v cyklu až do posledního obsazeného řádku.
Sub Tisk1()
Dim EnvironConst1 As String
Dim i As Long
Dim balik, naklad, prvni_strana, posledni_strana, zbytkovy_balik As Long
'balik
'naklad
prvni_strana = Range("F9")
posledni_strana = Range("H9")
zbytkovy_balik = Range("J7")
EnvironConst1 = Environ("UserName")
For i = prvni_strana To posledni_strana Step 1
prvni_strana = i
Range("F9") = i
If i = posledni_strana And zbytkovy_balik > 0 Then
Range("F7") = Range("J7")
ActiveSheet.PageSetup.CenterFooter = ("&B&8 strany: " & prvni_strana & " / " & posledni_strana)
ActiveSheet.PageSetup.LeftFooter = ("&B&8Uživatel: " & EnvironConst1)
''********* vloží do patičky listu - do levého oddílu ****&B&12 - font tučné velikost 8
ActiveWindow.SelectedSheets.PrintOut
End If
Next i
End Sub
Tento kód není OK, Děkuji za radu P.D.
Přidáno: 28.08.14 10:55
Dobrý den,
zkouším si možnosti VBA pro zautomatizování tabulky a narazil jsem při cyklu For.. Next.
V druhém cyklu mi hlásí " 'End If' bez bez bloku If".
Kód:
Sub Nulovani_Radku()
'
' Nulovani_Radku Makro
'
'
Dim Bunka As Long
For I = 8 To 61
If I = 39 Then I = 40
If I = 43 Then I = 46
For J = 7 To 24
Cells(I, J) = 0
Cells(I, J).NumberFormat = "# ###"
Next J
Next I
For I = 8 To 61
If I = 39 Then I = 40
If I = 43 Then I = 46
For J = 7 To 23 Step 2
If CellR3C6 = True Then Cells(I, J) = "A" Else Cells(I, J) = "B"
End If
'ActiveCell.FormulaR1C1 = _
' "=IF(R3C6,SUMIFS(KAR!C23,KAR!C90,""<=""&R4C6,KAR!C21,IC2,KAR!C6,""=097"",KAR!C31,R5C[-1]),
'SUMIFS(KAR!C23,KAR!C90,R4C6,KAR!C21,RC2,KAR!C6,""=097"",KAR!C31,R5C[-1]))"
Next J
Next I
End Sub
Přidáno: 02.09.14 08:29
To Luboš: "If" je potrebné ukončiť s "End If" napr. If I = 39 Then
I = 40
If I = 43 Then
I = 46
End If
End If
alebo ak je na tom istom riadku, tak napr. If I = 39 Then I = 40
If I = 43 Then I = 46
Přidáno: 17.10.14 16:16
Dobrý den po dlouhé době. Mám problem. rád bych automaticky přerušil (nikoliv ukončil) na základě hodnoty v buňce chod makra (cyklus) pro úpravy v listu a pokud hodnota v buňce po úpravách docílí danou hodnotu, spuštěné makro bude pokračovat v chodu a provede další přerušení- nepřeruší na základě hodnoty v buňce děkuji ze help. jipi
Přidáno: 11.02.15 13:49
Dobry den, V prvom kroku dakujem za takuto prehladnu stranku. Vedeli by ste mi prosim poradit s takymto prikladom ( cez For sa mi podarilo menit Range U ale neviem ako dostat do cyklu aj zmenu Rozsahu"- aktualne to robim rucne, ale.. nie som s tym spokojny :( )
Pocet opatkovani = i ( napr.: 5)
---------------------------------------------
Range("M5:M53").Select
Selection.Copy
Range("U1").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=True
Range("M58:M106").Select
Selection.Copy
Range("U2").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=True
Range("M111:M159").Select
Application.CutCopyMode = False
Selection.Copy
Range("U3").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=True
Range("M164:M212").Select
Application.CutCopyMode = False
Selection.Copy
Range("U4").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=True
Range("M217:M265").Select
Application.CutCopyMode = False
Selection.Copy
ActiveWindow.SmallScroll Down:=-231
Range("U5").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=True
---------------------------------------------
Dakujem za kazdu pomoc, ci napovedu
Přidáno: 29.05.15 11:30
Dobrý den mám v excelu dva sloupce; v každém řádku je 15 - 18ti místné číslo Potřebuji aby mi excel (přes VBA) vypsal všechny variace - tj aby nejdříve vzal z prvního sloupce první hodnotu a k té přiřazoval postupně hodnoty z druhého sloupce; poté z 1.sloupce 2. a opět všechny z 2. sloupce atd. Lze to nějak udělat? Děkuji za odpověď
Přidáno: 01.08.15 14:29
To Vladimír: Využitím vnořených funkcí. V buňkách A1, A2, A3, B1, B2, B3, B4 jsou hodnoty. Do C1 atd. se zapisuje "sloučení".
j = 1
k = 1
For i = 1 To 3
HodnotaBunka = Cells(i, 1)
For j = 1 To 4
HodnotaBunka2 = Cells(j, 2)
HodnotaCelkem = HodnotaBunka & HodnotaBunka2
Cells(k, 3) = HodnotaCelkem
' MsgBox (HodnotaCelkem)
k = k + 1
Next j
Next i
Přidáno: 06.02.16 21:46
Prosím o radu, jak se v cyklech lze odkázat na jiný list. Potřebovala bych, aby se některé řádky (příp. kombinace řádky/sloupce) počítaly z řádků na odlišných listech. Díky
Přidáno: 28.11.16 00:45
Dobrý den, mám tabulku Typ Množství Hmotnost A 2 1 B 3 4 C 1 8 Pro graf bych potřeboval to vložit do jednoho sloupce tolikrát, kolikrát je to množství, tedy 1 1 4 4 4 8 šlo by to udělat pomocí VBA? funkce asi na to není? Děkuji za odpověd
Přidáno: 29.11.16 08:02
To Mirek: -- Ak bude Typ, Množství, Hmotnost v stĺpcoch A,B,C a tieto nadpisy hlavičiek v riadku č.1,
tak nasledujúci kód zapíše výstupné hodnoty pre Typ a Hmotnosť do stĺpcov D+E od riadku 2:
rwOut = 2 ' prvý riadok pre výstup
For rw = 2 To 4 ' riadky pôvodné
For mn = 1 To Cells(rw, "B") ' Množstvo
Cells(rwOut, "D") = Cells(rw, "A") ' Typ
Cells(rwOut, "E") = Cells(rw, "C") ' Hmotnosť
rwOut = rwOut + 1
Next mn
Next rw
Pomohl Vám návod? Sdílejte na Facebooku, G+ |
||
LinkedIn... |
Stránky o MS Office (Excel) produktu společnosti Microsoft. Neslouží jako technická podpora.
| Email na autora: pavel.lasak@gmail.com | Copyright © : Pavel Lasák 2004 - 2024 |