If then Else Statement u Excelu VBA (objašnjeno s primjerima)

U Excelu VBA, IF Then Else naredba omogućuje vam da provjerite stanje i prema tome izvedete radnju.

To je iznimno vrijedno u mnogim situacijama, što ćemo vidjeti u primjerima kasnije u ovom vodiču.

Da bismo vam dali jednostavan primjer, pretpostavimo da imate popis ocjena u Excelu i želite istaknuti sve one učenike koji su dobili ocjenu A. Sada, ako vas zamolim da to učinite ručno, provjerit ćete ocjenu svakog učenika i je li an A, označit ćete ga, a ako nije, ostavit ćete ga kakav jest.

Ista se logika može izgraditi u VBA pomoću Ako onda drugačije izjavu (i naravno učiniti puno više od isticanja ocjena).

U ovom vodiču pokazat ću vam različite načine na koje se konstrukcija "If then Else" može koristiti u Excelu VBA, te neke praktične primjere na djelu.

No, prije nego što prijeđem u pojedinosti, dopustite mi da vam dam sintaksu izjave 'IF Then Else'.

Ako ste zainteresirani za učenje VBA na jednostavan način, provjerite moj Mrežna Excel VBA obuka.

Sintaksa - IF Onda drugačije

Ispod je generička sintaksa konstrukcije If Then Else u VBA

IF uvjet Zatim true_code [Inače false_code]

Ili

IF uvjet Zatim true_code Ostalo false_code Završi IF

Imajte na umu da je drugi dio ove izjave neobavezan.

Ako se pitate koja je razlika između dvije sintakse, dopustite mi da pojasnim.

Prva sintaksa je jednostavna jednoredna naredba IF THEN ELSE u kojoj ne morate koristiti naredbu END IF.

Međutim, u drugoj sintaksi, dio true_code nalazi se u drugom retku. To je korisno kada je kôd koji trebate pokrenuti u slučaju da je uvjet IF istinit dugačak i sastoji se od više redaka.

Kada podijelite izraz IF u više redaka, morate reći VBA gdje završava konstrukcija IF Then.

Stoga morate koristiti izraz End IF.

U slučaju da ne koristite End IF kada je potrebno, VBA će vam prikazati pogrešku - "Blokiraj IF bez END IF"

Primjeri korištenja IF If naredbe u VBA

Da bih vam dao ideju o tome kako izjava IF-THEN radi u VBA-u, dopustite mi da počnem s nekim osnovnim primjerima (neki praktični i korisniji primjeri obrađeni su kasnije u ovom vodiču).

Pretpostavimo da imate bodovni rezultat učenika u ćeliji A1 i želite provjeriti je li student položio ispit ili nije (prag prolaska ocjena je 35).

Tada možete koristiti sljedeći kôd:

Sub CheckScore () Ako je raspon ("A1"). Vrijednost> = 35 Zatim MsgBox "Pass" Završi pod

Gornji kôd ima jedan redak IF naredbe koji provjerava vrijednost u ćeliji A1.

Ako je više od 35, prikazuje se poruka - "Prođi".

Ako je manje od 35, ništa se neće dogoditi.

Ali što ako želite prikazati poruku u oba slučaja, bez obzira je li student položio ispit ili ga nije položio.

Kôd u nastavku bi ovo učinio:

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

Gornji kôd koristi IF kao i ELSE izraz za izvršavanje dva različita uvjeta. Kada je rezultat veći od (ili jednak) 35, uvjet IF je istinit, a kôd odmah ispod njega se izvršava (sve prije naredbe Else).

Ali kad je IF uvjet FALSE, kôd skoči na dio Else i izvršava kodni blok u njemu.

Imajte na umu da kada koristimo jedan redak naredbe IF Then, ne moramo koristiti End IF. No kad ga podijelimo u više redaka, moramo upotrijebiti naredbu End If.

Ugniježđeno IF Then (Više naredbi IF Then)

Do sada smo koristili jednu naredbu IF Then.

U slučaju da morate provjeriti više uvjeta, možete koristiti:

  • Više uvjeta IF
  • Ako Onda Druga izjava
  • IF Zatim OstaloAko Ostalo konstruirajte

Dopustite mi da vam pokažem kako se oni razlikuju i kako to koristiti u Excelu VBA.

Više izjava IF onda

Uzmimo isti primjer korištenja bodova učenika.

Ako je učenik postigao manje od 35 bodova, poruka za prikaz je ‘Ne uspijeva’, ako je rezultat veći ili jednak 35, poruka za prikaz je ‘Proći’.

Za to možemo upotrijebiti donji kod:

Sub CheckScore () Ako je raspon ("A1"). Vrijednost = 35 Zatim polje za poruku "Prođi" završi pod

Možete koristiti više naredbi IF Then kao što je prikazano gore. Iako ovo radi, to nije primjer dobrog kodiranja (kao što ćete vidjeti alternative u nastavku).

U slučaju da se odlučite za ovo, imajte na umu da bi ove izjave trebale biti neovisne ili međusobno isključive. Ovdje je važno znati da se u gornjoj konstrukciji procjenjuju svi IF izrazi, a oni u kojima je uvjet istinit izvršavaju se.

Dakle, čak i ako je prva IF tvrdnja točna, druga bi se i dalje vrednovala.

AKO Zatim Druga izjava

Pretpostavimo da ovaj put, umjesto da samo prikažemo poruku Pass/Fail, imamo još jedan uvjet.

Ako je učenik postigao manje od 35 bodova, poruka za prikaz je 'Nije uspjelo', ako je rezultat veći ili jednak 35, poruka za prikaz je 'Prošao', a ako je rezultat veći od 80, poruka za prikaz je 'Pass, with Distinction'.

Za to možemo upotrijebiti donji kod:

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

U gornjem kodu koristili smo više IF naredbi (ugniježđeno IF Then) uz pomoć Else.

Dakle, postoji konstrukcija 'IF Then Else' unutar konstrukcije 'IF Then Else'. Ova vrsta ugniježđenja omogućuje vam provjeru više uvjeta i pokretanje odgovarajućeg bloka koda.

AKO Zatim Ostalo Izjava

Gornji kôd (koji smo vidjeli u prethodnom odjeljku) može se dodatno optimizirati pomoću naredbe ElseIf.

Evo što pokušavamo učiniti - ako je učenik postigao manje od 35 bodova, poruka za prikaz je 'Ne uspijeva', ako je rezultat veći ili jednak 35, poruka za prikaz je 'Položi', a ako je rezultat je veći od 80, poruka za prikaz je 'Pass, with Distinction'.

Sub CheckScore () Ako raspon ("A1"). Vrijednost <35 Zatim MsgBox "Ne uspije" Ostali raspon ("A1"). Vrijednost <80 Zatim MsgBox "Prođi" Ostalo MsgBox "Prođi, s razlikom" Prekini ako završi sub

Gornji kôd koristi ElseIf, koji nam omogućuje da sve uvjete držimo unutar jedne jedine naredbe IF Then.

Korištenje AND i OR u IF then Else

Do sada smo u ovom vodiču provjeravali samo jedno stanje odjednom.

Međutim, kada imate više ovisnih uvjeta, možete koristiti izraz AND ili OR s IF uvjetima.

Ispod je sintaksa korištenja uvjeta AND/OR s izrazom IF Then.

IF Uvjet1 I Uvjet2 Zatim true_code Ostalo false_code Kraj IF

U gornjem kodu se izvršava samo true_code samo kad su ispunjeni i Condition1 i Condition2. Čak i ako je jedan od uvjeta netočan, izvršit će false_code.

S OR, čak i ako je jedan od uvjeta istinit, izvršit će true_code. Tek kada su svi uvjeti lažni, izvršava kôd false_code.

Sada pogledajmo kako izraz AND i OR radi s konstrukcijom IF Then Else.

Pretpostavimo da imate bodove za dva predmeta umjesto za jedan, a želite provjeriti sljedeće uvjete:

  • Iznevjeriti - Kada je rezultat manji od 35 u bilo kojem od predmeta.
  • Proći - Kada je rezultat veći ili jednak 35, ali manji od 80 u oba predmeta.
  • Pass, s odličjem - Kada je rezultat veći od 35 u oba predmeta i veći ili jednak 80 u jednom ili oba predmeta.

Evo koda koji će to učiniti:

Sub CheckScore () Ako je raspon ("A1"). Vrijednost <35 ili raspon ("B1"). Vrijednost <35 Zatim MsgBox "Ne uspije" Ostali raspon ("A1"). Vrijednost <80 I raspon ("B1"). Vrijednost <80 Tada MsgBox "prolazi" Ostalo MsgBox "prolazi, s razlikovanjem" End If End Sub

Gornji kôd koristi i OR i AND izraze.

Isti kod možete napisati i s neznatnom promjenom (koristeći ILI umjesto AND).

Sub CheckScore () Ako je raspon ("A1"). Vrijednost <35 ili raspon ("B1"). Vrijednost 80 ili raspon ("B1"). Vrijednost> 80 Zatim proslijedi MsgBox ", s razlikom" Ostalo MsgBox "Prolaz" Kraj) Ako End Sub

Oba gornja VBA koda dat će vam isti rezultat. Osobno više volim prvu jer ima logičan tijek provjere rezultata (ali to sam samo ja).

Korištenje Nije jednako za u Ako je tada

U svim gornjim primjerima koristili smo uvjete koji provjeravaju je li vrijednost jednaka navedenoj vrijednosti ili nije.

Slične kodove možete koristiti i kada provjeravate kada vrijednost nije jednaka navedenoj vrijednosti u VBA kodu. Nije jednako onome što predstavlja Excel VBA.

Da biste vidjeli praktičan primjer korištenja, pogledajte donji primjer 1.

Korištenje If Then Else s petljama u VBA

Do sada smo prolazili kroz neke primjere koji su dobri za razumijevanje načina na koji izjave 'IF-THEN' rade u VBA-u, međutim, nisu korisne u praktičnom svijetu.

Ako moram ocijeniti studente, to mogu lako učiniti pomoću Excel funkcija.

Pa pogledajmo neke korisne i praktične primjere koji vam mogu pomoći da automatizirate neke stvari i budete učinkovitiji.

Primjer 1 - Spremite i zatvorite sve radne knjige osim aktivne radne knjige

Ako imate puno otvorenih radnih knjiga i želite brzo zatvoriti sve, osim aktivne radne knjige, možete upotrijebiti donji kod,

Sub SaveCloseAllWorkbooks () Dim wb Kao radna knjiga Za svaku wb U radnim knjigama O grešci nastavi sljedeće Ako wb.Naziv ActiveWorkbook.Name Zatim wb.Save wb.Zatvori kraj ako slijedi wb Završi pod

Gornji kôd spremio bi i zatvorio sve radne knjige (osim aktivne).

Koristi petlju For Next za prolazak kroz zbirku svih otvorenih radnih knjiga i provjerava naziv pomoću IF uvjeta.

Ako naziv nije isti kao naziv aktivne radne knjige, sprema ga i zatvara.

U slučaju da u bilo kojoj radnoj knjizi postoji VBA kôd, a niste ga spremili kao .xls ili .xlsm, vidjet ćete upozorenje (jer se vba kodovi gube kada ga spremite u .xlsx formatu).

Primjer 2 - Označite ćelije s negativnim vrijednostima

Pretpostavimo da imate stupac pun brojeva i želite brzo označiti sve ćelije s negativnim vrijednostima crvenom bojom, to možete učiniti pomoću donjeg koda.

Sub HighlightNegativeCells () Dim Cll As Range Za svaku Cll u izboru Ako je Cll.Value <0 Zatim Cll.Interior.Color = vbRed Cll.Font.Color = vbBijeli kraj Ako je sljedeći Cll End Sub

Gornji kôd koristi petlju Za svako i provjerava svaku ćeliju u odabiru koji ste napravili. Ako ćelija ima negativnu vrijednost, označena je crvenom bojom s bijelom bojom fonta.

Primjer 3 - Sakrij sav radni list osim trenutnog radnog lista

U slučaju da želite brzo sakriti sve radne listove osim aktivnog, možete upotrijebiti donji kod:

Sub HideAllExceptActiveSheet () Zatamni kao radni list za svaki ws u ovoj radnoj knjizi.Radni listovi Ako ws.Ime ActiveSheet.Name Zatim ws.Visible = xlSheetHidden Sljedeći ws Kraj Sub

Gornji kôd koristi petlju Za svaki za prolazak kroz zbirku radnih listova. On provjerava naziv svakog radnog lista i skriva ga ako to nije aktivni radni list.

Primjer 4 - Izdvojite numerički dio iz alfanumeričkog niza

Ako imate alfanumeričke nizove u ćelijama i želite iz njih izdvojiti numerički dio, to možete učiniti pomoću donjeg koda:

Funkcija GetNumeric (CellRef As String) 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 = Krajnja funkcija rezultata

Ovaj će kôd stvoriti prilagođenu funkciju u Excelu koja se može koristiti unutar radnog lista (baš kao i obična funkcija).

Gdje staviti VBA kod?

Pitate se gdje se VBA kôd nalazi u vašoj radnoj knjizi programa Excel?

Excel ima VBA pozadinu koja se naziva VB editor. Morate kopirati i zalijepiti kôd u prozor koda modula VB Editor.

Evo koraka za to:

  1. Idite na karticu Developer.
  2. Pritisnite opciju Visual Basic. Ovo će otvoriti VB editor u pozadini.
  3. U oknu Project Explorer u VB Editoru desnom tipkom miša kliknite bilo koji objekt radne knjige u koji želite umetnuti kôd. Ako ne vidite Project Explorer, idite na karticu View i kliknite na Project Explorer.
  4. Idite na Umetni i kliknite na Modul. Ovo će umetnuti objekt modula u vašu radnu knjigu.
  5. Kopirajte i zalijepite kôd u prozor modula.
wave wave wave wave wave