Přeskočit navigaci | Přeskočit na novinky
     

Jste zde: Úvodní stránka » excel » vba-teorie-zaklady » excel-vba-for-next-cykly

For Next - Cykly -Excel VBA

Videokurzy Excel

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

Úvodem do cyku: For Next

Excel logo

V tomto článku se naučíte používat cyklus For Next, pro přehlednost je článek rozdělen na jednotlivé kapitoly:


For Next teorie

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:

  • čítač - Povinné - Číselná proměnná používaná jako čítač cyklů. Proměnná nemůže být typu Boolean nebo prvek pole
  • začátek - Povinné - Počáteční hodnota čítače
  • konec - Povinné - Koncová hodnota čítače
  • krok - Volitelné. Hodnota, o kterou je čítač změněn po každém průchodu cyklem. (Není-li uvedeno, nastaví se krok na 1)
  • příkazy - vlastní příkazy. Nebo úplně bez příkazu.

Poznámky:

  1. Čítač může i odečítat.
  2. Jednotlivé cykly For...Next můžeme vnořovat.
  3. Krok nemusí být roven jedné
  4. S proměnou počitadla se da uprostřed cyklu pracovat. Ale nedoporučuji dělat ať z programu nemáte guláš.
  5. Pro předčasné ukončení lze do cyklu umístit příkaz Exit For. Tento příkaz Exit For se používá pro vyhodnocení nějaké podmínky (např. If), a předá řízení příkazu následujícímu za příkazem Next.

Přičítat jedničku

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.

Skok větší než jedna

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

For Next - Odečítání - příklady

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

Příklad s vnořením For Next

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

Praktický příklad

Příklad s vnořením For Next

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
Příklad s vnořením For Next

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

Předčasné ukončení provádění For Next

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.

Kombinace sloupců 1 a 2

Kombinace sloupců 1 a 2

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
Microsoft Excel VBA - stahuj logo

Ke stažení

Soubor For Next - praktické ukázky v Excel VBA soubor ve formátu *.xlsm ke stažení zdarma. Soubor využívá VBA makra.

Děkuji za respektování autorských práv.


Ukázka

For next ukázka

Související články s větvením:

Závěrem

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

Odměna

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.


Pavel Lasák - autor webu

Pavel Lasák

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ů.

   Pavel Lasák LinkedIn Profil    Pavel Lasák Google+ Profil    Pavel Lasák facebook Profil    Pavel Lasák twitter Profil


Komentáře


Pavel.D

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.

Luboš

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

Jojo

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

jipi

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

Stanislav

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

Vladimír

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ěď

Pavel Lasák

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

Ivana

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

Pavel Lasak

Přidáno: 05.07.16 00:25

To Ivana: Stejně jako mimo cyklus Vybírat a označovat buňky..

Mirek

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

Jojo

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







Sdílejte

Pomohl Vám návod?
Sdílejte na Facebooku, G+
LinkedIn...

Nové články


Reklama


TOPlist Licence Creative Commons webarchiv rss XML

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 - 2021 |