Če potem še stavek v Excelu VBA (razloženo s primeri)

V Excelu VBA, IF Potem Else stavek vam omogoča, da preverite stanje in ustrezno izvedete dejanje.

To je v mnogih situacijah izredno dragoceno, kot bomo videli v primerih kasneje v tej vadnici.

Za preprost primer, recimo, da imate seznam ocen v Excelu in želite poudariti vse tiste študente, ki so dosegli oceno A. Zdaj, če vas prosim, da to storite ročno, boste preverili oceno vsakega študenta in če je a, ga boste označili, in če ni, ga pustite takšnega, kot je.

Enako logiko je mogoče v VBA vgraditi z uporabo Če potem še tudi izjavo (in seveda naredite veliko več kot le poudarjanje ocen).

V tej vadnici vam bom pokazal različne načine, kako lahko konstrukcijo "Če potem še" uporabite v Excelu VBA, in nekaj praktičnih primerov v akciji.

Preden pa se spustim v podrobnosti, naj vam predstavim skladnjo stavka 'IF Then Else'.

Če vas zanima učenje VBA na enostaven način, si oglejte moj Spletno usposabljanje Excel VBA.

Sintaksa - IF Potem še

Spodaj je splošna skladnja konstrukcije If Then Else v VBA

IF pogoj Potem true_code [Druga napačna_koda]

Or

IF pogoj Potem true_code Sicer false_code Končaj IF

Upoštevajte, da je drugi del te izjave neobvezen.

Če se sprašujete, v čem je razlika med obema sintaksoma, naj pojasnim.

Prva skladnja je preprost enovrstični stavek IF THEN ELSE, kjer vam ni treba uporabiti stavka END IF.

Vendar je v drugi skladnji del true_code v drugi vrstici. To je koristno, če je koda, ki jo morate zagnati, če je pogoj IF res, dolga in je sestavljena iz več vrstic.

Ko razdelite stavek IF na več vrstic, morate VBA povedati, kje se konstrukcija IF Potem konča.

Zato morate uporabiti stavek End IF.

Če po potrebi ne uporabite End IF, vam bo VBA prikazal napako - »Blokiraj IF brez END IF«

Primeri uporabe stavka IF Potem v VBA

Naj vam predstavim, kako izjava IF-THEN deluje v VBA, naj začnem z nekaj osnovnimi primeri (nekaj praktičnih in uporabnejših primerov bomo obravnavali kasneje v tej vadnici).

Recimo, da imate oceno študenta v celici A1 in želite preveriti, ali je študent opravil izpit ali ne (prag za ocene je 35).

Nato lahko uporabite naslednjo kodo:

Sub CheckScore () Če je obseg ("A1"). Vrednost> = 35 Nato sporočilo "Pass" End Sub

Zgornja koda ima eno vrstico stavka IF, ki preverja vrednost v celici A1.

Če je več kot 35, se prikaže sporočilo - »Pass«.

Če je manj kot 35, se ne zgodi nič.

Kaj pa, če želite prikazati sporočilo v obeh primerih, ne glede na to, ali je študent opravil izpit ali ga ni opravil.

Spodnja koda bi to naredila:

Sub CheckScore () Če je obseg ("A1"). Vrednost> = 35 Potem MsgBox "Pass" Sicer MsgBox "Fail" End Če End Sub

Zgornja koda uporablja IF in stavek ELSE za izvajanje dveh različnih pogojev. Ko je rezultat večji (ali enak) 35, je pogoj IF resničen in koda tik pod njim se izvede (vse pred stavkom Else).

Ko pa je pogoj IF FALSE, koda skoči na del Else in v njem izvede kodni blok.

Upoštevajte, da ko uporabljamo eno vrstico stavka IF Then, nam ni treba uporabiti End IF. Ko pa ga razdelimo na več vrstic, moramo uporabiti stavek End If.

Vgnezdeno IF potem (več stavkov IF Potem)

Doslej smo uporabili en sam stavek IF Then.

Če morate preveriti več pogojev, lahko uporabite:

  • Več pogojev IF
  • Izjava If then Else
  • IF Potem ElseIf Else konstruiraj

Naj vam pokažem, kako se ti razlikujejo in kako to uporabiti v Excelu VBA.

Več izjav IF potem

Vzemimo isti primer uporabe ocene študenta.

Če je učenec dosegel manj kot 35 točk, je prikazano sporočilo „Ni uspelo“, če je rezultat večji ali enak 35, je prikazano sporočilo „Prepustite“.

Za to lahko uporabimo spodnjo kodo:

Sub CheckScore () Če je obseg ("A1"). Vrednost = 35 Potem sporočilo "Pass" konča pod

Uporabite lahko več stavkov IF Then, kot je prikazano zgoraj. Čeprav to deluje, ni primer dobrega kodiranja (kot boste videli spodaj).

Če se odločite za uporabo tega, ne pozabite, da bi morale biti te izjave neodvisne ali medsebojno izključujoče. Pri tem je pomembno vedeti, da se v zgornjem konstruktu ovrednotijo ​​vsi stavki IF in tisti, kjer je pogoj res, se koda izvede.

Torej, tudi če je prva trditev IF pravilna, bo druga še vedno ovrednotena.

ČE Potem še izjava

Recimo, da imamo tokrat namesto prikaza sporočila uspešno/neuspešno še en pogoj.

Če je učenec dosegel manj kot 35, je prikazano sporočilo „Neuspešno“, če je rezultat večji ali enak 35, je prikazano sporočilo „Prepust“, če pa je rezultat večji od 80, se prikaže sporočilo, ki se prikaže je "Pass, with Distinction".

Za to lahko uporabimo spodnjo kodo:

Sub CheckScore () Če je obseg ("A1"). Vrednost <35 Potem polje MsgBox "Ne uspe" Drugače, če je obseg ("A1"). Vrednost <80 Potem MsgBox "poda" Pod

V zgornji kodi smo s pomočjo Else uporabili več stavkov IF (ugnezdenih IF Potem).

Torej obstaja konstrukt "IF Potem Else" znotraj konstrukta "IF Potem Else". Ta vrsta gnezdenja vam omogoča, da preverite več pogojev in zaženete ustrezen blok kode.

IF Potem Izjava o drugem

Zgornjo kodo (ki smo jo videli v prejšnjem razdelku) je mogoče dodatno optimizirati z uporabo stavka ElseIf.

Evo, kaj poskušamo storiti - če študent doseže manj kot 35, se prikaže sporočilo 'Ne uspe', če je rezultat večji ali enak 35, je prikazano sporočilo 'Uspešno' in če je rezultat je več kot 80, sporočilo za prikaz je 'Pass, with Distinction'.

Sub CheckScore () Če je obseg ("A1"). Vrednost <35 Potem MsgBox "Ne uspe" V drugem obsegu ("A1"). Vrednost <80 Potem MsgBox "Preide" Drugače MsgBox "Pass, z razliko" End If End Sub ")

Zgornja koda uporablja ElseIf, ki nam omogoča, da vse pogoje hranimo v enem samem stavku IF Then.

Uporaba AND in OR v IF Potem Else

Doslej smo v tej vadnici preverili le eno stanje naenkrat.

Če pa imate več odvisnih pogojev, lahko uporabite stavek AND ali OR s pogoji IF.

Spodaj je sintaksa uporabe pogoja AND/OR z stavkom IF Then.

IF Pogoj1 IN Pogoj2 Potem true_code Sicer false_code Končaj IF

V zgornji kodi se izvede le koda 1 in 2, koda true_code. Tudi če je eden od pogojev false, bo izvedel false_code.

Z OR, tudi če je eden od pogojev resničen, bo izvedel kodo true_code. Le ko so vsi pogoji napačni, izvede napačno_kodo.

Zdaj pa poglejmo, kako stavek AND in OR deluje s konstrukcijo IF Then Else.

Recimo, da imate ocene za dva predmeta namesto enega in želite preveriti naslednje pogoje:

  • Neuspeh - Če je rezultat pri katerem koli predmetu manjši od 35.
  • Pass - Ko je rezultat večji ali enak 35, vendar manjši od 80 pri obeh predmetih.
  • Pass, z odliko - Če je rezultat pri obeh predmetih večji od 35 in je pri enem ali obeh predmetih večji ali enak 80.

Tukaj je koda, ki bo to naredila:

Sub CheckScore () Če je obseg ("A1"). Vrednost <35 ali obseg ("B1"). Vrednost <35 Potem polje MsgBox "Ne uspe" V drugem obsegu ("A1"). Vrednost <80 in obseg ("B1"). Vrednost <80 Potem MsgBox "Pass" Drugače MsgBox "Pass, z razliko" End If End Sub

Zgornja koda uporablja tako stavke OR kot AND.

To kodo lahko napišete tudi z rahlo spremembo (z uporabo OR namesto AND).

Sub CheckScore () Če je obseg ("A1"). Vrednost <35 Ali obseg ("B1"). Vrednost 80 ali razpon ("B1"). Vrednost> 80 Potem MsgBox "Pass, z razliko" Else MsgBox "Pass" End " Če End Sub

Obe zgornji kodi VBA vam bosta dali enak rezultat. Osebno imam raje prvega, saj ima logičen tok preverjanja rezultatov (ampak to sem samo jaz).

Uporaba ni enako kot v Če potem

V vseh zgornjih primerih smo uporabili pogoje, ki preverjajo, ali je vrednost enaka določeni vrednosti ali ne.

Podobne kode lahko uporabite tudi pri preverjanju, ko vrednost ni enaka podani vrednosti v kodi VBA. Ni enako, kot ga predstavlja Excel VBA.

Če si želite ogledati praktičen primer uporabe, si oglejte spodnji primer 1.

Uporaba If then Else z zankami v VBA

Doslej smo šli skozi nekaj primerov, ki so dobri za razumevanje, kako izjave „IF-THEN“ delujejo v VBA, vendar v praktičnem svetu niso uporabne.

Če moram oceniti študente, lahko to enostavno naredim s pomočjo Excelovih funkcij.

Oglejmo si torej nekaj uporabnih in praktičnih primerov, ki vam lahko pomagajo avtomatizirati nekatere stvari in biti učinkovitejši.

Primer 1 - Shranite in zaprite vse delovne zvezke razen aktivnega delovnega zvezka

Če imate odprtih veliko delovnih zvezkov in želite hitro zapreti vse, razen aktivnega delovnega zvezka, lahko uporabite spodnjo kodo,

Sub SaveCloseAllWorkbooks () Zatemni wb kot delovni zvezek za vsako wb v delovnih zvezkih Ob napaki nadaljuj naslednji Če wb.Ime ActiveWorkbook.Name Nato wb.Save wb.Zapri konec Če je naslednji wb End Sub

Zgornja koda bi shranila in zaprla vse delovne zvezke (razen aktivnega).

Z zanko For Next gre skozi zbirko vseh odprtih delovnih zvezkov in preveri ime s pogojem IF.

Če ime ni enako imenu aktivnega delovnega zvezka, ga shrani in zapre.

Če je v katerem koli delovnem zvezku koda VBA in je niste shranili kot .xls ali .xlsm, se prikaže opozorilo (ker se kode vba izgubijo, ko jo shranite v obliki .xlsx).

Primer 2 - Označite celice z negativnimi vrednostmi

Recimo, da imate stolpec poln številk in želite hitro označiti vse celice z negativnimi vrednostmi v rdeči barvi, to lahko storite s spodnjo kodo.

Sub HighlightNegativeCells () Dim Cll As Range Za vsako Cll v izboru Če je Cll.Value <0 Potem Cll.Interior.Color = vbRed Cll.Font.Color = vbBeli konec Če je naslednji Cll End Sub

Zgornja koda uporablja zanko Za vsak in preveri vsako celico v izbrani izbiri. Če ima celica negativno vrednost, je označena z rdečo z belo barvo pisave.

Primer 3 - Skrij ves delovni list razen trenutnega delovnega lista

Če želite hitro skriti vse delovne liste, razen aktivnega, lahko uporabite spodnjo kodo:

Sub HideAllExceptActiveSheet () Zatemni ws kot delovni list za vsako ws v ThisWorkbook.Worksheets If ws.Name ActiveSheet.Name Potem ws.Visible = xlSheetHidden Naslednji ws End Sub

Zgornja koda uporablja zanko For Each za pregled zbirke delovnih listov. Preveri ime vsakega delovnega lista in ga skrije, če to ni aktivni delovni list.

Primer 4 - Izvlecite številski del iz alfanumeričnega niza

Če imate v celicah alfanumerične nize in želite iz njih izvleči številski del, lahko to storite s spodnjo kodo:

Funkcija GetNumeric (CellRef As String) Dim StringLength As Integer StringLength = Len (CellRef) For i = 1 To StringLength If IsNumeric (Mid (CellRef, i, 1)) Potem Result = Result & Mid (CellRef, i, 1) Naprej i GetNumeric = Končna funkcija rezultata

Ta koda bo ustvarila funkcijo po meri v Excelu, ki jo bo mogoče uporabiti na delovnem listu (tako kot običajno funkcijo).

Kam vstaviti kodo VBA?

Se sprašujete, kje je koda VBA v vašem Excelovem delovnem zvezku?

Excel ima zaledje VBA, imenovano urejevalnik VB. Kodo morate kopirati in prilepiti v okno kode modula VB Editor.

Tu so naslednji koraki:

  1. Pojdite na zavihek Razvijalec.
  2. Kliknite možnost Visual Basic. To bo odprlo urejevalnik VB v zaledju.
  3. V podoknu Raziskovalec projektov v urejevalniku VB z desno tipko miške kliknite kateri koli predmet delovnega zvezka, v katerega želite vstaviti kodo. Če ne vidite Raziskovalca, pojdite na zavihek Pogled in kliknite Raziskovalec projektov.
  4. Pojdite na Vstavi in ​​kliknite Modul. S tem boste v svoj delovni zvezek vstavili objekt modula.
  5. Kodo kopirajte in prilepite v okno modula.

Vam bo pomagal razvoj spletnega mesta, ki si delijo stran s svojimi prijatelji

wave wave wave wave wave