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ő:
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:
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
Excel VBA Gyakorlatok pdf – ha gyakorolni szeretnél mégIzgalamas feladatok kezdőtől haladóig – Ár: 9.990 HUFAkár tapasztalt Excel felhasználó vagy, aki bővíteni szeretné képességeit, akár csak kezdő, és ismerkedsz az automatizálással, ez a példatár útmutatást nyújt a Excel VBA programozás alapjaihoz, és segít fejleszteni a képességeidet lépésről lépésre. A belsejében számos gyakorlatot és a valós életből vett példákat találsz, amelyek akár ihletet is tudnak adni, milyen irányba tudod még jobban kihasználni az Excel VBA programozásban rejlett lehetőségeket. A gyakorlatokat úgy terveztem, hogy érdekesek, informatívak és legfontosabb, hasznosak legyenek! |
A következő leckében a tömbökről lesz szó.