6. Lecke – For ciklus

A for ciklus cover

Programozásban gyakran egy bizonyos feladatot többször is végre kell hajtanunk. Excel VBA programozásnál például egy táblázat minden egyes során le akarunk futtatni egy függvényt. Ekkor a leghatékonyabb megoldás, ha egy úgynevezett ciklust alkalmaznunk.

“A ciklus, vagy iteráció a számítógép-programozás és az algoritmusok egyik alapvető eszköze, amely az ismétlődő (azonos vagy hasonló) tevékenységek megvalósítására szolgál. A ciklus beépítését a programba ciklusszervezésnek is nevezik. A ciklust az egyes programozási nyelvek különböző kulcsszavakkal valósítják meg, de a működési módjukat tekintve három alaptípusba sorolhatók aszerint, hogy hányszor futnak le: ezek az elöltesztelő, a hátultesztelő és a számlálós ciklus.”
Forrás: Wikipédia

Mi a számlálós ciklussal fogunk foglalkozni, azt fogjuk szinte minden esetben használni. Ezt pedig for ciklusnak nevezzük.

Ha visszaemlékezünk az előző leckékre az Excel makró – VBA alapok online tananyagon belül, akkor azt már megtanultuk, hogy egy bizonyos sorra, hogyan tudjuk egy gombnyomásra lefuttatni a programunkat. De mi van akkor, ha mi az összes sorra akarjuk?

Azt szeretnénk, hogy az 1. sortól a 10-ig, mindegyiknél végezzen el egy adott feladatot a program. Ne kelljen nekünk manuálisan beirogatni a sorok számát.

Nézzünk egy egyszerű példád:

Ki szeretnénk íratni az A1, A2, A3, A4, A5, A6, A7, A8, A9, A10 cella értékét. Ezt eddig az alábbi módon tudjuk megoldani:

Sub Makró1()
   MsgBox Range("A2").Value
   MsgBox Range("A3").Value
   MsgBox Range("A4").Value
   MsgBox Range("A5").Value
   MsgBox Range("A6").Value
   MsgBox Range("A7").Value
   MsgBox Range("A8").Value
   MsgBox Range("A9").Value
   MsgBox Range("A10").Value
End Sub

Viszont létezik egy ennél szofisztikáltabb megoldás is, mégpedig ha használunk egy ciklust, jelen esetben a for ciklust.

A For ciklus felépítése

– A keretet egy “For” szóval kezdjük, majd azt követi egy szám változó, amit nem szükséges definiálni, mert legtöbb esetben csak a ciklus végéig tart az élete. Gyakran ezt csak egy “i” betűvel jelöljük.

– Ez a változó lesz a ciklus motorja, ezt számoljuk. A ciklus során minden alkalommal eggyel növeljük az értékét.

– Az “i =” után megadjuk mennyi legyen a kezdőértéke.
– A “To” után, hogy meddig növeljük, azaz meddig fusson a ciklusunk.

For i = 1 To 10

“For” nyitó és a “Next” lezáró elem közé kerül az a művelet amit többször is végre akarunk hajtani. Természetesen itt aktívan használjuk a fenti változót, ami jelen esetben “i”-vel jelöltünk.
– Pl.: minden i-edik sorban történjen valami; minden i-edik oszlopban történjen valami; stb.

Next

A “Next” szóval zárjuk a ciklusunkat. Ez jelenti azt, hogy jön a következő kör, újra végrehajtja a programunkat, eggyel növelve az i értékét, mindaddig, amíg el nem érjük a kívánt számot. (Jelen esetben a 10-et.)

Tehát a kódunk így néz ki a gyakorlatban:

Sub Makró1()
   For i = 1 To 10
      MsgBox Cells(i, 1).Value
   Next
End Sub

Ha futtatjuk ezt a kódot, akkor mi történik?

10-szer fogja lefuttatni a msgbox-os parancsunkat, és mind a 10-szer behelyettesíti az i változót az éppen aktuális számmal 1-től 10-ig.

A For ciklus folyamatábrája a következő:

For ciklus folyamatábrája

Próbáljuk megérteni a folyamatábrát:
– Először is a For utasítás kerül végrehajtásra, ahol meg van határozva, hogy mennyi a kiinduló értékünk (pl.: “i=1“), ami majd minden egyes ciklusban növekszik eggyel, mindaddig amíg azt szeretnénk. (pl.: To 10)
– Ezután a feltételt megvizsgálja a rendszer. Elértük-e már azt a számot ameddig fusson a ciklus? Ha a feltétel “hamis”, akkor kilépünk a for ciklusból. Ha “igaz”, akkor lefut a kód blokkban szereplő program részlet. (pl.: MsgBox Cells(i, 1).Value)
– Miután lefut a kód blokkunk, jön a Next, azaz a kiinduló értékünk eggyel nő, és újra lefut a ciklus.

Pár egyszerű példa

Példa 1.:
1. Vegyünk fel szám értékeket A2-A10-ig. A1 címe legyen “Szám”, B1 címe legyen “Duplája”.
2. B oszlopba írjuk ki melléjük az értékük dupláját. Azaz szorozzuk meg őket kettővel. (Tehát ha A2 értéke 3, akkor B2 értéke 6 lesz.)

Megoldás:

Sub Makró1()
   'Második sortól indulunk, ezért az i értéke 2 lesz
   For i = 2 To 10
      'Megadjuk, hogy a B oszlop i-edik sorának az értéke legyen egyenlő, az A oszlop i-edik sorának kétszeresével
      Cells(i, 2).Value = Cells(i, 1).Value * 2
   Next
End Sub

Példa 2.:
Nézzük meg szöveges tartalommal, és csavarjunk is egyet rajta.
1. Vegyünk fel a következő táblát:

6. Lecke

Feladatunk, hogy kitöltsük a megszólítás oszlopot, egy kattintásra (For ciklussal), az alábbi kritériumoknak megfelelően:
– Ha 20 év alatti férfi vagy nő, akkor “Szia KERESZTNÉV!”
– Ha 30 év alatti férfi vagy nő, akkor “Kedves KERESZTNÉV!”
– Ha 30 év feletti férfi, akkor “Tisztelt VEZETÉKNÉV Úr!”
– Ha 30 év feletti nő, akkor “Tisztelt VEZETÉKNÉV KERESZTNÉV!”

Segítség 1.: A For cikluson belül lesznek If elágazások

Segítség 2.: ElseIf is lehet benne.

Segítség 3.: Természetesen már az elején felveszünk 4 változót (keresztnév, vezetéknév, nem, kor), de ezeknek az értékét a for cikluson belül mindig megadjuk.

Megoldás:

Sub Makró1()
‘Definiáljuk a változóinkat, ezeket vizsgáljuk majd az If ágban
Dim vezeteknev As String
Dim keresztnev As String
Dim nem As String
Dim kor As Integer

‘A 2. sortól a 8-ig nézzük, azaz az i változónk 2,3,4,5,6,7,8 lesz a ciklusok folyamán
For i = 2 To 8
‘Minden egyes ciklusban újra írjuk a változók értékét, annak függvényében, hogy melyik sort nézzük
   vezeteknev = Cells(i, 1).Value
   keresztnev = Cells(i, 2).Value
   nem = Cells(i, 3).Value
   kor = Cells(i, 4).Value
    
    'Ha 20 év alatti
   If kor < 20 Then
      Cells(i, 5).Value = "Szia " & keresztnev & "!"
   ‘Ha 30 év alatti    
   ElseIf kor < 30 Then
      Cells(i, 5).Value = "Kedves " & keresztnev & "!"
   ‘Ha 30 év feletti és férfi    
   ElseIf kor > 30 And nem = "férfi" Then
      Cells(i, 5).Value = "Tisztelt " & vezeteknev & " Úr!"
   ‘Ha 30 év feletti és nő    
   ElseIf kor > 30 And nem = "nő" Then
      Cells(i, 5).Value = "Tisztelt " & vezeteknev & " " & keresztnev & "!"
   End If
Next

End Sub

Gyakorlati feladat

Feladatunk, hogy egy 10×10-es területen, például A1 cellától kezdve J10-ig, töltsük fel számokkal a cellákat 1-től 100-ig. Azaz A1=1; A2=2; A3=3; … B1 = 11; … J10=100. Persze mindezt ciklussal.

1. Segítség: 2 ciklusunk lesz. Egyikkel a sorokat, másikkal az oszlopokat számoljuk
2. Segítség: Egyik ciklus a másikban van.

Íme a kód:

Sub Makró1()

   Dim szam As Integer
   Dim sor As Integer
   Dim oszlop As Integer

   szam = 1

   'Végigmegyünk az oszlopokon  
   For oszlop = 1 To 10

      'Végig megyünk minden egyes oszlopon belül a sorokon  
      For sor = 1 To 10
        
         'Az aktuális cella értéke legyen az aktuális szám  
         Cells(sor, oszlop).Value = szam
        
         'Mindig eggyel növeljük a szám értékét  
         szam = szam + 1
        
      Next
   Next

End Sub

Összefoglalás

– Megismertük a for ciklust VBA-ban
– Megtanultuk használatát
– Akár már két ciklust is tudunk egyszerre alkalmazni

Kiegészítő tartalom

Gyakorlatok FOR Ciklusra – a tartalom megtekintéséhez támogasd a blogot

Ez a cikk az Excel makró – VBA alapok online tananyag 6. leckéjének kiegészítője, amelyben még többet gyakorolhatod a FOR ciklus alkalmazását VBA-ban. 5 különböző nehézségű feladat segít még mélyebben elsajátítani a FOR ciklust VBA-ban.

A cikk jelszóval védett, a blog támogatásával szerezhetsz hozzáférést hozzá. Támogatáshoz kérlek, vedd fel a kapcsolatot velem az “Érdekel” gombra kattintva, majd az űrlapot kitöltve!

A következő leckében a tömbökről lesz szó.

Mennyire találtad hasznosnak ezt cikket?
[Összes szavazat: 1 Átlag értékelés: 5]