Ha akkor más nyilatkozat az Excel VBA -ban (példákkal magyarázva)

Az Excel VBA, IF then Else utasításban ellenőrizheti a feltételt, és ennek megfelelően végrehajthat egy műveletet.

Ez rendkívül értékes számos helyzetben, amint ezt az oktatóanyag későbbi példáiban látni fogjuk.

Egy egyszerű példa kedvéért tegyük fel, hogy rendelkezik az Excel osztályzatok listájával, és szeretné kiemelni mindazokat a diákokat, akik A pontszámot értek el. egy A, akkor kiemeli, és ha nem, akkor hagyja úgy, ahogy van.

Ugyanez a logika építhető be a VBA -ban a Ha Akkor Más nyilatkozat is (és persze sokkal több, mint pusztán az érdemjegyek kiemelése).

Ebben az oktatóanyagban különböző módszereket mutatok be a „Ha akkor más” konstrukció felhasználására az Excel VBA -ban, és néhány gyakorlati példát a gyakorlatban.

De mielőtt belekezdenék a konkrétumokba, hadd adjam meg a „HA akkor más” kijelentés szintaxisát.

Ha érdekli a VBA egyszerű tanulása, nézze meg az enyémet Online Excel VBA képzés.

Szintaxis - HA akkor más

Az alábbiakban a VBA -ban található If Then Else konstrukció általános szintaxisa található

IF feltétel Akkor true_code [Egyéb hamis_kód]

Vagy

IF feltétel Akkor true_code Egyéb hamis_code End IF

Ne feledje, hogy ennek a nyilatkozatnak az Else része opcionális.

Ha kíváncsi vagy, mi a különbség a két szintaxis között, hadd tisztázzam.

Az első szintaxis egy egyszerű egysoros IF THEN ELSE utasítás, ahol nem kell az END IF utasítást használni.

A második szintaxisban azonban a true_code rész a második sorban található. Ez akkor hasznos, ha a kód, amelyet akkor kell futtatnia, ha az IF feltétel igaz, hosszú és több sorból áll.

Ha az IF utasítást több sorra osztja, akkor meg kell mondania a VBA -nak, hogy hol végződik az IF Majd konstrukció.

Ezért az End IF utasítást kell használnia.

Ha nem használja az End IF -t, amikor szükséges, a VBA hibaüzenetet jelenít meg - „Blokkolja az IF -t END nélkül”

Példák az IF then Statement használatára VBA -ban

Annak érdekében, hogy képet kapjunk arról, hogyan működik az IF-THEN utasítás a VBA-ban, hadd kezdjek néhány alapvető példával (néhány gyakorlati és hasznosabb példával később foglalkozunk ebben az oktatóanyagban).

Tegyük fel, hogy az A1 cellában van egy tanuló pontszáma, és ellenőrizni szeretné, hogy a hallgató sikeresen vizsgázott -e vagy sem (az elért pontszám küszöbértéke 35).

Ezután a következő kódot használhatja:

Sub CheckScore () If Range ("A1"). Value> = 35 then MsgBox "Pass" End Sub

A fenti kód egyetlen sor IF utasítást tartalmaz, amely ellenőrzi az A1 cella értékét.

Ha ez több mint 35, akkor az üzenet jelenik meg - „Pass”.

Ha kevesebb, mint 35, akkor nem történik semmi.

De mi van akkor, ha mindkét esetben üzenetet szeretne megjeleníteni, függetlenül attól, hogy a tanuló sikeresen teljesítette -e a vizsgát.

Az alábbi kód ezt tenné:

Sub CheckScore () If Range ("A1"). Value> = 35 then MsgBox "Pass" Más MsgBox "Fail" End If End Sub

A fenti kód az IF és az ELSE utasítást használja két különböző feltétel végrehajtásához. Ha a pontszám több mint (vagy egyenlő) 35 -el, az IF feltétel igaz, és a közvetlenül alatta lévő kód végrehajtásra kerül (minden az Else utasítás előtt).

De ha az IF feltétel HAMIS, a kód az Else részre ugrik, és végrehajtja a kódblokkot.

Ne feledje, hogy ha egyetlen IF IF utasítás utasítást használunk, nem kell az IF IF -t használni. De ha több sorra bontjuk, akkor az End If utasítást kell használnunk.

Beágyazott IF akkor (Több IF akkor utasítás)

Eddig egyetlen IF Then állítást használtunk.

Ha több feltételt kell ellenőriznie, használhatja:

  • Több IF feltétel
  • Ha akkor Más állítás
  • HA Akkor másképp Ha más épít

Hadd mutassam meg, miben különböznek ezek egymástól, és hogyan kell ezt használni az Excel VBA -ban.

Több IF, majd kijelentés

Vegyük ugyanezt a példát a tanuló pontszámának használatára.

Ha a tanuló 35 -nél alacsonyabb pontszámot ért el, a megjelenítendő üzenet „Fail”, ha a pontszám 35 vagy annál nagyobb, a megjelenítendő üzenet „Pass”.

Ehhez az alábbi kódot használhatjuk:

Sub CheckScore () If Range ("A1"). Value = 35 then MsgBox "Pass" End Sub

Használhat több IF Majd utasítást a fentiek szerint. Bár ez működik, ez nem példa a jó kódolásra (amint az alábbi alternatívákat látni fogja).

Ha úgy dönt, hogy ezt használja, ne feledje, hogy ezeknek a kijelentéseknek függetleneknek vagy egymást kizárónak kell lenniük. Itt fontos tudni, hogy a fenti konstrukcióban az összes IF utasítást kiértékeli, és azokat, ahol a feltétel igaz, a kódot hajtják végre.

Tehát még ha az első IF ​​állítás helyes is, a második továbbra is kiértékelésre kerül.

HA akkor más állítás

Tegyük fel, hogy ezúttal ahelyett, hogy csak a Pass/Fail üzenetet jelenítenénk meg, van még egy feltételünk.

Ha a tanuló 35 -nél kisebb pontszámot ért el, a megjelenítendő üzenet „Fail”, ha a pontszám 35 vagy annál nagyobb, a megjelenítendő üzenet „Pass”, és ha a pontszám több mint 80, akkor a megjelenítendő üzenet az "Pass, with Distinction".

Ehhez az alábbi kódot használhatjuk:

Sub CheckScore () If Range ("A1"). Value <35 then MsgBox "Fail" Else If Range ("A1"). Value <80 then MsgBox "Pass" Else MsgBox "Pass, with Distinction" End If End End Alatti

A fenti kódban több IF utasítást (beágyazott IF akkor) használtunk Else segítségével.

Tehát van egy „HA akkor más” konstrukció egy „HA akkor más” konstrukción belül. Ez a fajta beágyazás lehetővé teszi több feltétel ellenőrzését és a megfelelő kódblokk futtatását.

HA akkor másképp

A fenti kód (amit az előző részben láthattunk) tovább optimalizálható az ElseIf utasítás használatával.

Ezt próbáljuk megtenni - Ha a tanuló 35 -nél kisebb pontszámot kap, a megjelenítendő üzenet: „Fail”, ha a pontszám 35 vagy annál nagyobb, a megjelenítendő üzenet: „Pass”, és ha a a pontszám több mint 80, a megjelenítendő üzenet: „Pass, Distinction”.

Sub CheckScore () If Range ("A1"). Value <35 then MsgBox "Fail" ElseIf Range ("A1"). Value <80 then MsgBox "Pass" Else MsgBox "Pass, with Distinction" End If End Sub

A fenti kód az ElseIf -et használja, amely lehetővé teszi, hogy az összes feltételt egyetlen IF Majd utasításban tartsuk.

ÉS és VAGY használata IF HA akkor másban

Ebben az oktatóanyagban eddig csak egyetlen feltételt vizsgáltunk egyszerre.

Ha azonban több függő feltétele van, használhatja az ÉS vagy VAGY utasítást az IF feltételekkel.

Az alábbiakban az ÉS/VAGY feltétel használatának szintaxisa szerepel az IF Majd utasítással.

IF feltétel1 ÉS feltétel2 Akkor igaz_kód Egyéb hamis_kód Vége IF

A fenti kódban csak akkor, ha az 1. feltétel és a 2. feltétel is teljesül, a true_code végrehajtódik. Még akkor is, ha az egyik feltétel hamis, végrehajtja a false_code kódot.

VAGY esetén, még akkor is, ha az egyik feltétel igaz, végrehajtja a true_code kódot. Csak akkor hajtja végre a false_code kódot, ha minden feltétel hamis.

Most nézzük meg, hogyan működik az ÉS és VAGY utasítás az IF akkor más konstrukcióval.

Tegyük fel, hogy egy helyett két tantárgy pontszáma van, és ellenőrizni szeretné a következő feltételeket:

  • Nem sikerült - Ha a pontszám bármelyik alanynál kevesebb, mint 35.
  • Pass - Ha a pontszám 35 -nél nagyobb vagy egyenlő, de mindkét alanynál kevesebb, mint 80.
  • Jól megfelelt - Ha mindkét tantárgyban a pontszám több mint 35, és az egyik vagy mindkét tantárgynál több vagy egyenlő a 80 -cal.

Itt van a kód, ami ezt teszi:

Sub CheckScore () Ha tartomány ("A1"). Érték <35 vagy tartomány ("B1"). Érték <35 Akkor MsgBox "Fail" ElseIf tartomány ("A1"). Érték <80 és tartomány ("B1"). Érték <80 Akkor MsgBox "Pass" Más MsgBox "Pass, megkülönböztetéssel" End If End Sub

A fenti kód VAGY és ÉS utasításokat is használ.

Ugyanezt a kódot kis változtatással is írhatja (ÉS helyett VAGY).

Sub CheckScore () If Range ("A1"). Value <35 Or Range ("B1"). Value 80 Or Range ("B1"). Value> 80 then MsgBox "Pass, with Distinction" Else MsgBox "Pass" End Ha End Sub

Mindkét fenti VBA kód ugyanazt az eredményt adja. Személy szerint én az elsőt részesítem előnyben, mivel annak logikus folyamata ellenőrzi a pontszámokat (de ez csak én vagyok).

A Nem egyenlő használata a Ha akkor -ban

A fenti példák mindegyikében azokat a feltételeket használtuk, amelyek ellenőrzik, hogy egy adott értékkel megegyező érték -e vagy sem.

Hasonló kódokat is használhat ellenőrzéskor, ha az érték nem egyenlő a VBA -kód megadott értékével. Nem egyenlő az Excel VBA képviseletével.

A használat gyakorlati példájának megtekintéséhez tekintse meg az alábbi 1. példát.

Az If then Else használata hurokkal a VBA -ban

Eddig néhány példán mentünk keresztül, amelyek jó megérteni, hogy az „IF-THEN” kijelentések hogyan működnek a VBA-ban, azonban nem hasznosak a gyakorlati világban.

Ha osztályoznom kell a diákokat, ezt könnyen megtehetem az Excel funkciók használatával.

Lássunk tehát néhány hasznos és gyakorlati példát, amelyek segíthetnek bizonyos dolgok automatizálásában és hatékonyabbá válásában.

1. példa - Minden munkafüzet mentése és bezárása, kivéve az aktív munkafüzetet

Ha sok munkafüzet van nyitva, és gyorsan szeretné bezárni az összeset, kivéve az aktív munkafüzetet, akkor használja az alábbi kódot,

Sub SaveCloseAllWorkbooks () Dim wb munkafüzetként minden wb -hez a munkafüzetekben A hiba folytatódik tovább Ha wb.Name ActiveWorkbook.Name then wb.Save wb.Close End if Next wb End Sub

A fenti kód elmenti és bezárja az összes munkafüzetet (az aktív kivételével).

A Következő ciklus segítségével végigmegy az összes nyitott munkafüzet gyűjteményén, és ellenőrzi a nevet az IF feltétel használatával.

Ha a név nem azonos az Aktív munkafüzet nevével, akkor elmenti és bezárja.

Ha valamelyik munkafüzetben van VBA -kód, és nem mentette el .xls vagy .xlsm néven, akkor figyelmeztetést fog látni (mivel a vba -kódok elvesznek, amikor .xlsx formátumba menti).

2. példa - Negatív értékű cellák kiemelése

Tegyük fel, hogy van egy számokkal teli oszlopa, és gyorsan ki szeretné emelni az összes negatív értékű cellát pirossal, ezt az alábbi kód használatával teheti meg.

Sub HighlightNegativeCells () Dim Cll tartományként minden kiválasztott Cll esetén, ha Cll.Value <0 then Cll.Interior.Color = vbRed Cll.Font.Color = vbWhite End If Next Cll End Sub

A fenti kód a For Every hurkot használja, és ellenőrzi a kiválasztott elem minden celláját. Ha a cella értéke negatív, akkor pirossal és fehér betűszínnel van kiemelve.

3. példa - Az összes munkalap elrejtése, kivéve az aktuális munkalapot

Ha gyorsan el szeretné rejteni az összes munkalapot, kivéve az aktívat, akkor használja az alábbi kódot:

Sub HideAllExceptActiveSheet () Dim ws munkalapként minden ws -re ebben a munkafüzetben. Munkalapok Ha ws.Name ActiveSheet.Name Then ws.Visible = xlSheetHidden Next ws End Sub

A fenti kód a Minden egyes ciklushoz használja a munkalapok gyűjteményét. Ellenőrzi az egyes munkalapok nevét, és elrejti, ha nem az aktív munkalap.

4. példa - Bontsa ki a numerikus részt egy alfanumerikus karakterláncból

Ha alfanumerikus karakterláncokat tartalmaz a cellákban, és ki akarja vonni belőle a numerikus részt, akkor ezt az alábbi kód használatával teheti meg:

Funkció GetNumeric (CellRef mint karakterlánc) Dim StringLength As Integer StringLength = Len (CellRef) For i = 1 to StringLength If IsNumeric (Mid (CellRef, i, 1)) then Result = Result & Mid (CellRef, i, 1) Next i GetNumeric = Eredményvégfüggvény

Ez a kód létrehoz egy egyéni függvényt az Excelben, amely használható a munkalapon belül (akárcsak egy normál függvény).

Hová tegye a VBA kódot?

Kíváncsi vagy, hova kerül a VBA -kód az Excel -munkafüzetben?

Az Excel rendelkezik VBA háttérprogrammal, amelyet VB szerkesztőnek hívnak. Másolja és illessze be a kódot a VB Editor modul ablakába.

Ehhez tegye a következő lépéseket:

  1. Lépjen a Fejlesztő fülre.
  2. Kattintson a Visual Basic lehetőségre. Ez megnyitja a VB szerkesztőt a háttérben.
  3. A VB szerkesztő Project Explorer ablaktáblájában kattintson jobb gombbal a munkafüzet bármely olyan objektumára, amelybe be szeretné illeszteni a kódot. Ha nem látja a Project Explorer programot, lépjen a Nézet fülre, és kattintson a Project Explorer elemre.
  4. Lépjen a Beszúrás elemre, és kattintson a Modul elemre. Ezzel beszúr egy modulobjektumot a munkafüzetébe.
  5. Másolja ki és illessze be a kódot a modul ablakába.
wave wave wave wave wave