I. If elágazás
Szerintem sima Excel képletként megvan mindenkinek a HA függvény, mire és hogyan lehet használni. Ha nincs, az se baj, mert anélkül is tök érthető lesz a mai anyag. 🙂
Ahogy írjuk a programunkat, előfordulhat, hogy egy útelágazáshoz érünk. Egy feltételtől függ, hogy hogyan fusson tovább a programunk.
Gondoljunk egy egyszerű esetre:
ha egy személyes adatokat tartalmazó táblázatban a „neme” oszlopban „férfi” az adott illető, akkor a megszólítás „Tisztelt Uram!” legyen, ha pedig „nő”, akkor „Tisztelt Hölgyem!”. A táblánk így néz ki:
VBA-ban a „HA – AKKOR – KÜLÖNBEN” kerete a következőképpen néz ki:
If … Then – Az If és a Then közé egy sorba jön a feltétel, amit megvizsgálunk. Ha férfi az illető, akkor történjen valami.
Else – A Then után és az Else elé jön, hogy mi is történjen. Írjuk ki, hogy „Tisztelt Uram!”
End If – Az Else után jön, hogy mi történjen, ha nem teljesül a feltételünk, ha nem férfi az illető. Ekkor kiírjuk, hogy „Tisztelt Hölgyem!”. A végén pedig egy End If kifejezéssel zárjuk le az elágazásunkat.
A programunk pedig így néz ki ténylegesen. Először csak a C2 cellára vizsgálva.
Sub Makró1() 'Ha a C2 cellában "Férfi" van írva, akkor... If Range("C2").Value = "Férfi" Then MsgBox "Tisztelt Uram!" 'Ha a C2 cellában nem "Férfi" van írva, akkor... Else MsgBox "Tisztelt Hölgyem!" End If End Sub
A fenti példát továbbgondolva: nem csak „Férfi” és „Nő” érték van, hanem esetleg üres az adott mező, akkor pedig legyen „Tisztelt Cím!”. Ezt egy ElseIf – Then (Különben ha – akkor) páros beszúrásával oldjuk meg, ami annyit tesz, ha nem teljesül az első feltétel, akkor megvizsgálunk egy második feltételt is. Ebből bármennyit beletehetünk az adott elágazásba.
If Range("C2").Value = "Férfi" Then MsgBox "Tisztelt Uram!" ElseIf Range("C2").Value = "Nő" Then MsgBox "Tisztelt Hölgyem!" Else MsgBox "Tisztelt Cím!" End If
Ha mindent értünk, akkor lépjünk is tovább.
II. Logikai vizsgálatok
Az If elágazásban természetesen nem csak azt adhatjuk meg feltételnek, hogy valaminek egyenlőnek kell lennie valamivel. Nézhetjük a fordítottját is, hogy ne legyen egyenlő, vagy például, hogy x több vagy kevesebb legyen mint y.
A következő operátorokkal dolgozhatunk, amikor a logikai feltételt adjuk meg az If és a Then között. (Vagy az Else If és a Then között.)
= – Valaminek egyenlő az értéke valamivel…
< – Kisebb mint…
> – Nagyobb mint…
<= – Kisebb vagy egyenlő
>= – Nagyobb vagy egyenlő
< > – Nem egyenlő
Például azt szeretnénk, hogy ha az irányítószám kisebb vagy egyenlő mint 4000, akkor írjuk ki az ember nemét:
If Range("B2").Value <= 4000 Then MsgBox Range("C2").Value Else MsgBox "Nem kisebb" End If
A logikai feltételeket persze lehet halmozni is a következők segítségével:
Not – Az értéke nem…
AND – ÉS kapcsolat, azaz több feltétel is teljesüljön egyszerre
OR – VAGY kapcsolat, azaz egyik vagy a másik feltétel teljesüljön
XOR – Kizáró VAGY,
Például, ha férfi és ügyfél, akkor írjuk ki, hogy „férfi ügyfél”:
If Range("C2").Value = "Férfi" And Range("D2").Value = "Igen" Then MsgBox "Férfi ügyfél" Else MsgBox "Nem férfi, vagy nem ügyfél" End If
Gyakorlati feladat
Induljunk ki az előző táblázatunkból. Feladat:
1. Készítsünk egy gombot, amely megnyomására a következő fog történni:
2. Ha egy különálló cellába – pl. A gomb előttibe – beírjuk a táblázat egyik sorának számát, akkor egy MsgBox kiírja nekünk az adott sor adatait.
3. Ráadásul, ha ügyfél az illető és az irányító száma kisebb mint 5000, akkor az E oszlop megfelelő sorába kiírjuk, hogy „Ingyenes kiszállítás”
1. Segítség, valahogy így nézzen ki:
2. Itt találod a teljes kódot, megjegyzésekkel ellátva:
Sub Makró1() 'Definiáljuk a sor változót Dim sor As Integer 'Megadjuk a sor változó értékét, ami a G2 cella értéke 'Beleteszünk egy IF elágazást is a biztonság kedvéért, ha üres a cella, akkor figyelmeztessen. If Range("G2").Value = "" Then MsgBox "Nem adtad meg a sort!" Else 'Ha a G2 cella nem maradt üresen, akkor a beleírt érték lesz a változónk értéke sor = Range("G2") End If 'Az első sor oszlop címkéket tartalmaz, így azt szűrjük ki. If sor <= 1 Then MsgBox "1-nél nagyobb számot írj be!" Else 'Ide fog jönni az, amit ténylegesen el akarunk végeztetni: '1. E oszlopba vigyük fel, ha ingyenes kiszállításra jogosult If Cells(sor, 4).Value = "Igen" And Cells(sor, 2).Value < 5000 Then Cells(sor, 5).Value = "Ingyenes kiszállítás" End If '2 Kiírjuk az aktuális sor adatait MsgBox Cells(sor, 1).Value & " " & Cells(sor, 2).Value & " " & Cells(sor, 3).Value & " " & Cells(sor, 4).Value & " " & Cells(sor, 5).Value End If End Sub
Összefoglalás
– Megismertük az If elágazást
– Megismertük a hozzátartozó logikai operátorokat
– Tudunk feltételeket szabni VBA-ban