Exceli VBA, IF Then Else lause võimaldab teil kontrollida tingimust ja vastavalt sellele toimingut teha.
See on paljudes olukordades äärmiselt väärtuslik, nagu näeme selle õpetuse hilisemates näidetes.
Lihtsa näite toomiseks oletame, et teil on Excelis hinnete loend ja soovite esile tõsta kõiki neid õpilasi, kes on saanud punkti A. Nüüd, kui ma palun teil seda käsitsi teha, kontrollite iga õpilase hindeid ja kas see on A, tõstate selle esile ja kui see pole nii, jätate selle nii, nagu see on.
Sama loogikat saab luua ka VBA -s, kasutades Kui siis muidu avaldus (ja muidugi teha palju enamat kui lihtsalt hinnete esiletõstmine).
Selles õpetuses näitan teile erinevaid viise, kuidas konstruktsiooni „Kui siis veel” saab kasutada Excel VBA -s ja mõned praktilised näited tegevuses.
Kuid enne, kui hakkan spetsiifikale süvenema, lubage mul esitada teile avalduse „IF then Else” süntaks.
Kui olete huvitatud VBA lihtsast õppimisest, vaadake minu lehte Online VBA koolitus Excelis.
Süntaks - KUI siis veel
Allpool on VBA -s konstrueeritud If Then Else üldine süntaks
IF tingimus Siis true_code [Else false_code]
Või
IF tingimus Siis true_code Muu false_code End IF
Pange tähele, et selle avalduse muu osa on valikuline.
Kui nüüd mõtlete, mis on nende kahe süntaksi erinevus, lubage mul selgitada.
Esimene süntaks on lihtne üherealine lause IF THEN ELSE, kus te ei pea lauset END IF kasutama.
Kuid teises süntaksis on tõese koodi kood teisel real. See on kasulik, kui kood, mille peate käivitama juhul, kui IF -tingimus on tõene, on pikk ja koosneb mitmest reast.
Kui jagate IF -lause mitmeks reaks, peate VBA -le ütlema, kus IF -konstruktsioon lõpeb.
Seetõttu peate kasutama lauset End IF.
Kui te ei kasuta vajadusel End IF -d, kuvab VBA teile tõrke - „Blokeeri IF ilma END IF -ta”
Näiteid IF IF avalduse kasutamise kohta VBA -s
Et anda teile ettekujutus sellest, kuidas IF-THEN-lause VBA-s töötab, lubage mul alustada mõnest põhinäitest (mõned praktilised ja kasulikumad näited on käsitletud hiljem selles õpetuses).
Oletame, et lahtris A1 on õpilase skoor ja soovite kontrollida, kas õpilane sooritas eksami või mitte (hinde lävi on 35).
Seejärel saate kasutada järgmist koodi:
Sub CheckScore () Kui vahemik ("A1"). Väärtus> = 35 Siis MsgBox "Pass" End Sub
Ülaltoodud koodil on üks IF -lause rida, mis kontrollib lahtri A1 väärtust.
Kui see on üle 35, näitab see sõnumit - „Pass”.
Kui see on alla 35, ei juhtu midagi.
Aga mis siis, kui soovite mõlemal juhul näidata sõnumit, olenemata sellest, kas õpilane sooritas eksami või ebaõnnestus.
Allolev kood teeks seda:
Sub CheckScore () Kui vahemik ("A1"). Väärtus> = 35 Siis MsgBox "Pass" Muu MsgBox "ebaõnnestumine" End If End Sub
Ülaltoodud kood kasutab kahe erineva tingimuse täitmiseks nii IF kui ka ELSE avaldust. Kui skoor on suurem (või võrdne) 35, on IF tingimus tõene ja selle all olev kood täidetakse (kõik enne Else avaldust).
Aga kui IF tingimus on VÄÄR, hüppab kood teisele osale ja täidab selles koodiploki.
Pange tähele, et kui kasutame ühte lauset IF Siis, ei pea me kasutama lõppu IF. Kuid kui jagame selle mitmeks reaks, peame kasutama lauset End If.
Pesastatud IF siis (mitu IF -lauset)
Siiani oleme kasutanud ühte IF Siis avaldust.
Kui teil on kontrollimiseks mitu tingimust, võite kasutada järgmist.
- Mitu IF tingimust
- Kui siis Muu avaldus
- IF Siis ElseIf Else konstrueeri
Näitan teile, kuidas need erinevad ja kuidas seda Excel VBA -s kasutada.
Mitu IF -i avaldust
Võtame sama näite õpilase skoori kasutamisest.
Kui õpilase tulemus on väiksem kui 35, kuvatakse teade „Ebaõnnestunud“, kui skoor on suurem või võrdne 35, on kuvatav teade „Pass“.
Selle tegemiseks saame kasutada järgmist koodi:
Sub CheckScore () Kui vahemik ("A1"). Väärtus = 35 Siis MsgBox "Pass" End Sub
Saate kasutada mitut IF Siis avaldust, nagu ülal näidatud. Kuigi see töötab, pole see hea kodeerimise näide (nagu näete allpool toodud alternatiive).
Kui otsustate seda kasutada, pidage meeles, et need avaldused peaksid olema kas sõltumatud või üksteist välistavad. Siin on oluline teada, et ülaltoodud konstruktsioonis hinnatakse kõiki IF -lauseid ja neid, kus tingimus on tõene, kood täidetakse.
Nii et isegi kui esimene IF -väide on õige, hinnatakse teist ikkagi.
KUI siis muu avaldus
Oletame, et seekord on selle asemel, et kuvada lihtsalt sõnum Pass/Fail, meil on veel üks tingimus.
Kui õpilase tulemus on väiksem kui 35, on kuvatav teade „Ebaõnnestunud“, kui skoor on suurem või võrdne 35, kuvatakse teade „Läbib“ ja kui tulemus on üle 80, kuvatakse teade on "Pass, eristusega".
Selle tegemiseks saame kasutada järgmist koodi:
Alamkontrollitulemus () Kui vahemik ("A1"). Väärtus <35 Siis MsgBox "Ebaõnnestunud" Else If Range ("A1"). Väärtus <80 Siis MsgBox "Pass" Muu MsgBox "Pass, eristades" End If End if End Sub
Ülaltoodud koodis oleme Else abiga kasutanud mitut IF lauset (pesastatud IF Siis).
Nii et konstruktsioonis „IF then Else” on konstruktsioon „IF then Else”. Seda tüüpi pesitsemine võimaldab teil kontrollida mitut tingimust ja käivitada asjakohane koodiplokk.
IF If ElseIf Muu avaldus
Ülaltoodud koodi (mida nägime eelmises jaotises) saab veelgi optimeerida, kasutades lauset ElseIf.
See on see, mida me püüame teha - kui õpilase punktisumma on alla 35, kuvatakse teade „Ebaõnnestunud“, kui skoor on suurem või võrdne 35 -ga, kuvatakse kuvatav teade „Pass“ ja kui skoor on üle 80, kuvatakse teade 'Pass, with Distinction'.
Sub CheckScore () Kui vahemik ("A1"). Väärtus <35 Siis MsgBox "Fail" ElseIf Range ("A1"). Väärtus <80 Siis MsgBox "Pass" Else MsgBox "Pass, eristusega" End If End Sub
Ülaltoodud kood kasutab ElseIf -i, mis võimaldab meil hoida kõik tingimused ühes IF -lauses.
Kasutades JA ja VÕI siis, kui siis veel
Siiani oleme selles õpetuses kontrollinud ainult ühte tingimust korraga.
Kui aga teil on mitu sõltuvat tingimust, saate IF -tingimustega kasutada lauset AND või OR.
Allpool on tingimuse JA/VÕI kasutamise süntaks koos lausega IF Siis.
IF tingimus1 JA tingimus2 Siis tõene_kood Muu vale_kood Lõpp IF
Ülaltoodud koodis täidetakse tõene kood ainult siis, kui on täidetud nii tingimus 1 kui ka tingimus 2. Isegi kui üks tingimustest on vale, käivitab see valekoodi.
Isegi kui üks tingimustest on tõene, täidab see VÕI -ga tõese koodi. Alles siis, kui kõik tingimused on valed, käivitab see vale_koodi.
Vaatame nüüd, kuidas JA ja VÕI töötab koos konstruktsiooniga IF Then Else.
Oletame, et teil on hinded ühe aine asemel kahe teema kohta ja soovite kontrollida järgmisi tingimusi:
- Ebaõnnestumine - kui mõne katsealuse tulemus on alla 35.
- Üle andma - Kui skoor on suurem või võrdne 35, kuid mõlemal katsealusel alla 80.
- Pass, eristusega - kui mõlema katsealuse skoor on üle 35 ja ühel või mõlemal katsealusel on see 80 või rohkem.
Siin on kood, mis seda teeb:
Sub CheckScore () Kui vahemik ("A1"). Väärtus <35 või vahemik ("B1"). Väärtus <35 Siis MsgBox "Fail" ElseIf Range ("A1"). Väärtus <80 Ja vahemik ("B1"). Väärtus <80 Siis MsgBox "Pass" Muu MsgBox "Pass, eristusega" End If End Sub
Ülaltoodud kood kasutab nii VÕI kui ka AND -lauseid.
Sama koodi saate kirjutada ka väikese muudatusega (kasutades JA asemel VÕI).
Alamkontrollitulemus () Kui vahemik ("A1"). Väärtus <35 või vahemik ("B1"). Väärtus 80 või vahemik ("B1"). Väärtus> 80 Siis MsgBox "läbib, eristades" Muu MsgBox "läbib" Kui End Sub
Mõlemad ülaltoodud VBA -koodid annavad teile sama tulemuse. Isiklikult eelistan esimest, kuna sellel on skooride kontrollimise loogiline voog (aga see olen ainult mina).
Kasutades funktsiooni Mitte võrdne, siis kui
Kõigis ülaltoodud näidetes oleme kasutanud tingimusi, mis kontrollivad, kas määratud väärtusega võrdne väärtus või mitte.
Sarnaseid koode saate kasutada ka kontrollimisel, kui väärtus ei ole VBA -koodi määratud väärtusega võrdne. Pole võrdne Exceli VBA -ga.
Kasutamise praktilise näite vaatamiseks vaadake allpool toodud näidet 1.
Kui kasutate siis muud, kasutades silmuseid VBA -s
Siiani oleme läbi käinud mõned näited, millest on hea aru saada, kuidas „IF-THEN” avaldused VBA-s töötavad, kuid praktilises maailmas neist kasu pole.
Kui pean õpilasi hindama, saan seda hõlpsalt teha Exceli funktsioonide abil.
Nii et vaatame mõningaid kasulikke ja praktilisi näiteid, mis aitavad teil teatud asju automatiseerida ja olla tõhusamad.
Näide 1 - Salvestage ja sulgege kõik töövihikud, välja arvatud aktiivne töövihik
Kui teil on palju töövihikuid avatud ja soovite kiiresti kõik, välja arvatud aktiivne töövihik, sulgeda, võite kasutada allolevat koodi,
Sub SaveCloseAllWorkbooks () Dim wb töövihikuna iga wb jaoks töövihikutes Tõrke korral jätkatakse järgmisel korral Kui wb.Name ActiveWorkbook.Name Siis wb.Save wb.Sulge lõpp, kui järgmine wb End Sub
Ülaltoodud kood salvestab ja sulgeb kõik töövihikud (välja arvatud aktiivne).
See kasutab tsüklit Järgmine kõigi avatud töövihikute kogumi läbimiseks ja kontrollib nime IF tingimuse abil.
Kui nimi ei ole sama, mis aktiivsel töövihikul, salvestab ja sulgeb see.
Kui mõnes töövihikus on VBA -kood ja te pole seda .xls või .xlsm -vormingus salvestanud, näete hoiatust (kuna vba -koodid kaovad .xlsx -vormingus).
Näide 2 - tõstke esile negatiivse väärtusega lahtrid
Oletame, et teil on veerg täis numbreid ja soovite kiiresti esile tõsta kõik punasega negatiivse väärtusega lahtrid, saate seda teha alloleva koodi abil.
Sub HighlightNegativeCells () Dim Cll kui vahemik iga valitud Cll jaoks
Ülaltoodud kood kasutab iga silmuse jaoks ja kontrollib teie tehtud valiku iga lahtrit. Kui lahtri väärtus on negatiivne, on see punase ja valge fondivärviga esile tõstetud.
Näide 3 - Peida kõik töölehed, välja arvatud praegune tööleht
Kui soovite kiiresti kõik töölehed, välja arvatud aktiivne, peita, saate kasutada järgmist koodi:
Sub HideAllExceptActiveSheet () Dim ws töölehena iga töö jaoks käesolevas töövihikus. Töölehed Kui ws.Name ActiveSheet.Name Siis ws.Visible = xlSheetHidden Next ws End Sub
Ülaltoodud kood kasutab iga töölehe jaoks töölehtede kogumi läbimiseks. See kontrollib iga töölehe nime ja peidab selle, kui see pole aktiivne tööleht.
Näide 4 - eraldage numbriline osa tähtnumbrilisest stringist
Kui teil on lahtrites tähtnumbrilised stringid ja soovite sellest numbrilise osa välja võtta, saate seda teha, kasutades järgmist koodi:
Funktsioon GetNumeric (CellRef kui string) Dim StringLength As Integer String GetNumeric = Tulemuse lõppfunktsioon
See kood loob Excelis kohandatud funktsiooni, mida saab töölehel kasutada (nagu tavalist funktsiooni).
Kuhu VBA kood panna?
Huvitav, kuhu läheb teie Exceli töövihikus VBA -kood?
Excelil on VBA taustaprogramm, mida nimetatakse VB redaktoriks. Peate koodi kopeerima ja kleepima VB Editori mooduli koodi aknasse.
Selleks toimige järgmiselt.
- Minge vahekaardile Arendaja.
- Klõpsake suvandil Visual Basic. See avab taustaprogrammis VB redaktori.
- Paremklõpsake VB redaktori Project Exploreri paanil töövihiku mis tahes objekti, kuhu soovite koodi sisestada. Kui te ei näe Project Explorerit, minge vahekaardile Vaade ja klõpsake nuppu Project Explorer.
- Minge sisesta ja klõpsake moodulit. See lisab teie töövihikusse mooduliobjekti.
- Kopeerige ja kleepige kood mooduli aknasse.