Declarație If Then Else în Excel VBA (explicată cu exemple)

În Excel VBA, instrucțiunea IF Then Else vă permite să verificați dacă există o condiție și să efectuați o acțiune în consecință.

Acest lucru este extrem de valoros în multe situații, așa cum vom vedea în exemplele de mai jos în acest tutorial.

Pentru a vă oferi un exemplu simplu, să presupunem că aveți o listă de note în Excel și doriți să evidențiați toți acei elevi care au obținut un A. Acum, dacă vă cer să faceți acest lucru manual, veți verifica nota fiecărui elev și dacă este un A, îl veți evidenția și, dacă nu este, îl veți lăsa așa cum este.

Aceeași logică poate fi construită în VBA folosind Dacă atunci altfel declarație, de asemenea (și, desigur, face mult mai mult decât evidențierea notelor).

În acest tutorial, vă voi arăta diferite moduri în care construcția „If Then Else” poate fi utilizată în Excel VBA și câteva exemple practice în acțiune.

Dar, înainte de a intra în detalii, permiteți-mi să vă ofer sintaxa declarației „IF Then Else”.

Dacă sunteți interesat să învățați VBA într-un mod ușor, consultați Instruire online VBA Excel.

Sintaxă - IF Atunci Altfel

Mai jos este sintaxa generică a construcției If Then Else din VBA

Condiție IF Apoi true_code [Altfel false_code]

Sau

Condiție IF Apoi true_code Altfel false_code Sfârșit IF

Rețineți că partea Else a acestei declarații este opțională.

Acum, dacă vă întrebați care este diferența dintre cele două sintaxe, permiteți-mi să vă clarific.

Prima sintaxă este o instrucțiune simplă IF THEN ELSE pe o singură linie, în care nu este nevoie să utilizați instrucțiunea END IF.

Cu toate acestea, în a doua sintaxă, partea true_code se află pe a doua linie. Acest lucru este util atunci când codul pe care trebuie să îl executați în cazul în care condiția IF este adevărată este lung și constă din mai multe linii.

Când împărțiți instrucțiunea IF în mai multe linii, trebuie să spuneți VBA unde se termină constructul IF Then.

Prin urmare, trebuie să utilizați instrucțiunea End IF.

În cazul în care nu utilizați End IF atunci când este necesar, VBA vă va afișa o eroare - „Blocați IF fără END IF”

Exemple de utilizare a declarației IF Then în VBA

Pentru a vă face o idee despre modul în care funcționează declarația IF-THEN în VBA, permiteți-mi să încep cu câteva exemple de bază (câteva exemple practice și mai utile sunt tratate mai târziu în acest tutorial).

Să presupunem că aveți scorul unui student în celula A1 și doriți să verificați dacă studentul a promovat sau nu examenul (pragul de trecere a notelor fiind de 35).

Apoi puteți utiliza următorul cod:

Sub CheckScore () Dacă Range ("A1"). Valoare> = 35 Apoi MsgBox "Pass" End Sub

Codul de mai sus are o singură linie de instrucțiune IF care verifică valoarea din celula A1.

Dacă este mai mult de 35, se afișează mesajul - „Treceți”.

Dacă este mai puțin de 35, nu se întâmplă nimic.

Dar ce se întâmplă dacă doriți să afișați un mesaj în ambele cazuri, indiferent dacă un student a promovat sau nu examenul.

Codul de mai jos ar face acest lucru:

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

Codul de mai sus folosește instrucțiunea IF, precum și instrucțiunea ELSE pentru a executa două condiții diferite. Când scorul este mai mare de (sau egal cu) 35, condiția IF este adevărată, iar codul chiar dedesubt este executat (totul înainte de declarația Else).

Dar când condiția IF este FALSĂ, codul sare la partea Else și execută blocul de cod din ea.

Rețineți că atunci când folosim o singură linie de instrucțiune IF Then, nu este necesar să folosim End IF. Dar când îl împărțim în mai multe linii, trebuie să folosim instrucțiunea End If.

Cuibărit IF Then (declarații multiple IF Then)

Până acum am folosit o singură declarație IF Then.

În cazul în care aveți mai multe condiții de verificat, puteți utiliza:

  • Condiții IF multiple
  • Dacă afirmația Then Else
  • IF Atunci ElseDacă Else construiește

Permiteți-mi să vă arăt cum diferă acestea și cum să utilizați acest lucru în Excel VBA.

Mai multe declarații IF Then

Să luăm același exemplu de utilizare a scorului unui elev.

Dacă elevul înregistrează mai puțin de 35, mesajul de afișat este „Nu reușește”, dacă scorul este mai mare sau egal cu 35, mesajul de afișat este „Trece”.

Putem folosi codul de mai jos pentru a face acest lucru:

Sub CheckScore () Dacă Range ("A1"). Valoare = 35 Apoi MsgBox "Pass" End Sub

Puteți utiliza mai multe instrucțiuni IF Then așa cum se arată mai sus. În timp ce acest lucru funcționează, nu este un exemplu de codificare bună (așa cum veți vedea alternativele de mai jos).

În cazul în care decideți să utilizați acest lucru, amintiți-vă că aceste declarații ar trebui fie să fie independente, fie să se excludă reciproc. Cel mai important lucru de știut aici este că, în construcția de mai sus, toate instrucțiunile IF sunt evaluate și cele în care condiția este adevărată, codul este executat.

Deci, chiar dacă prima afirmație IF este corectă, a doua ar fi în continuare evaluată.

Declarație IF atunci altfel

Să presupunem că de data aceasta, în loc să afișăm doar mesajul Trecere / Eșec, mai avem o condiție.

Dacă elevul înregistrează mai puțin de 35, mesajul de afișat este „Eșuat”, dacă scorul este mai mare sau egal cu 35, mesajul de afișat este „Trecere”, iar dacă scorul este mai mare de 80, mesajul de afișat este „Treceți, cu distincție”.

Putem folosi codul de mai jos pentru a face acest lucru:

Sub CheckScore () If Range ("A1"). Valoare <35 Apoi MsgBox "Fail" Altfel Dacă Range ("A1"). Value <80 Then MsgBox "Pass" Else MsgBox "Pass, cu Distincție" End if End If End if End Sub

În codul de mai sus, am folosit mai multe instrucțiuni IF (imbricate IF Then) cu ajutorul Else.

Deci, există o construcție „IF Then Else” în cadrul unei construcții „IF Then Else”. Acest tip de imbricare vă permite să verificați condiții multiple și să rulați blocul de cod relevant.

Dacă apoi ElseIf Else Declarație

Codul de mai sus (pe care l-am văzut în secțiunea anterioară) poate fi optimizat în continuare prin utilizarea instrucțiunii ElseIf.

Iată ce încercăm să facem - Dacă elevul înregistrează mai puțin de 35, mesajul de afișat este „Eșuat”, dacă scorul este mai mare sau egal cu 35, mesajul de afișat este „Trece” și dacă scorul este mai mare de 80, mesajul de afișat este „Treceți, cu distincție”.

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

Codul de mai sus folosește ElseIf, care ne permite să păstrăm toate condițiile într-o singură declarație IF Then.

Folosind ȘI ȘI SAU în IF Atunci Altfel

Până în prezent, în acest tutorial, am verificat doar o singură condiție la un moment dat.

Cu toate acestea, atunci când aveți mai multe condiții dependente, puteți utiliza instrucțiunea ȘI sau SAU cu condițiile IF.

Mai jos este sintaxa utilizării condiției AND / OR cu instrucțiunea IF Then.

IF Condition1 AND Condition2 Atunci true_code Altfel false_code End IF

În codul de mai sus, numai când sunt îndeplinite atât Condiția1, cât și Condiția2, se execută codul adevărat. Chiar dacă una dintre condiții este falsă, va executa false_code.

Cu OR, chiar dacă una dintre condiții este adevărată, va executa true_code. Numai atunci când toate condițiile sunt false, execută false_code.

Acum să vedem cum funcționează declarația ȘI ȘI SAU cu construcția IF Then Else.

Să presupunem că aveți scorurile pentru două subiecte în loc de una și doriți să verificați următoarele condiții:

  • Fail - Când scorul este mai mic de 35 la oricare dintre subiecte.
  • Trece - Când scorul este mai mare sau egal cu 35, dar mai mic de 80 la ambele subiecte.
  • Treceți, cu Distincție - Când scorul este mai mare de 35 la ambele subiecte și este mai mare sau egal cu 80 la unul sau ambii subiecți.

Iată codul care va face acest lucru:

Sub CheckScore () If Range ("A1"). Value <35 Sau Range ("B1"). Value <35 Then MsgBox "Fail" ElseIf Range ("A1"). Value <80 And Range ("B1"). Valoare <80 Apoi MsgBox "Pass" Else MsgBox "Pass, cu distincție" End If End Sub

Codul de mai sus folosește atât instrucțiuni OR, cât și AND.

De asemenea, puteți scrie același cod cu o ușoară modificare (folosind OR în loc de ȘI).

Sub CheckScore () If Range ("A1"). Valoare <35 Sau Range ("B1"). Valoare 80 Sau Range ("B1"). Value> 80 Apoi MsgBox "Pass, cu Distincție" Else MsgBox "Pass" End Dacă se termină Sub

Ambele coduri VBA de mai sus vă vor oferi același rezultat. Personal, îl prefer pe primul, deoarece are un flux logic de verificare a scorurilor (dar eu sunt doar eu).

Folosind Not Equal to în If Then

În toate exemplele de mai sus, am folosit condițiile care verifică dacă o valoare egală cu o valoare specificată sau nu.

De asemenea, puteți utiliza coduri similare atunci când verificați când valoarea nu este egală cu o valoare specificată în codul VBA. Nu este egal cu reprezentat de Excel VBA.

Pentru a vedea un exemplu practic de utilizare, aruncați o privire la Exemplul 1 de mai jos.

Folosind If Then Else cu Loops în VBA

Până acum, am trecut prin câteva exemple care sunt bune pentru a înțelege modul în care funcționează afirmațiile „IF-THEN” în VBA, dar nu sunt utile în lumea practică.

Dacă trebuie să notez elevii, pot face asta cu ușurință folosind funcțiile Excel.

Așadar, să aruncăm o privire la câteva exemple utile și practice care vă pot ajuta să automatizați unele lucruri și să fiți mai eficienți.

Exemplul 1 - Salvați și închideți toate registrele de lucru, cu excepția registrului de lucru activ

Dacă aveți multe cărți de lucru deschise și doriți să închideți rapid toate, cu excepția registrului de lucru activ, puteți utiliza codul de mai jos,

Sub SaveCloseAllWorkbooks () Dim wb Ca registru de lucru pentru fiecare wb din Workbooks On eroare reluați următoarea Dacă wb.Name ActiveWorkbook.Name Apoi wb.Save wb.Închideți sfârșitul Dacă următorul wb Finalizați sub

Codul de mai sus ar salva și închide toate registrele de lucru (cu excepția celui activ).

Folosește bucla For Next pentru a parcurge colecția tuturor registrelor de lucru deschise și verifică numele folosind condiția IF.

Dacă numele nu este același cu cel al registrului de lucru activ, acesta îl salvează și îl închide.

În cazul în care există un cod VBA în oricare dintre registrele de lucru și nu l-ați salvat ca .xls sau .xlsm, veți vedea un avertisment (deoarece codurile vba se pierd când îl salvați în format .xlsx).

Exemplul 2 - Evidențiați celulele cu valori negative

Să presupunem că aveți o coloană plină de numere și doriți să evidențiați rapid toate celulele cu valori negative în roșu, puteți face acest lucru folosind codul de mai jos.

Sub HighlightNegativeCells () Dim Cll ca interval pentru fiecare Cll din selecție Dacă Cll.Value <0 Apoi Cll.Interior.Color = vbRed Cll.Font.Color = vbWh End End Dacă următorul Cll End Sub

Codul de mai sus folosește bucla Pentru fiecare și verifică fiecare celulă din selecția pe care ați făcut-o. Dacă celula are o valoare negativă, este evidențiată în roșu cu culoare albă a fontului.

Exemplul 3 - Ascundeți toată foaia de lucru, cu excepția foii de lucru curente

În cazul în care doriți să ascundeți rapid toate foile de lucru, cu excepția celei active, puteți utiliza codul de mai jos:

Sub HideAllExceptActiveSheet () Dim ws Ca foaie de lucru pentru fiecare ws din ThisWorkbook.Worksheets If ws.Name ActiveSheet.Name Then ws.Visible = xlSheetHidden Next ws End Sub

Codul de mai sus folosește bucla For Each pentru a parcurge o colecție de foi de lucru. Verifică numele fiecărei foi de lucru și o ascunde dacă nu este foaia de lucru activă.

Exemplul 4 - Extrageți partea numerică dintr-un șir alfanumeric

Dacă aveți șiruri alfanumerice în celule și doriți să extrageți partea numerică din aceasta, puteți face acest lucru folosind codul de mai jos:

Funcția 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 = Funcția de finalizare a rezultatului

Acest cod va crea o funcție personalizată în Excel care poate fi utilizată în foaia de lucru (la fel ca o funcție obișnuită).

Unde să puneți codul VBA?

Vă întrebați unde merge codul VBA în registrul dvs. de lucru Excel?

Excel are un backend VBA numit editor VB. Trebuie să copiați și să lipiți codul în fereastra de cod a modulului VB Editor.

Iată pașii pentru a face acest lucru:

  1. Accesați fila Dezvoltator.
  2. Faceți clic pe opțiunea Visual Basic. Aceasta va deschide editorul VB în backend.
  3. În panoul Explorator de proiecte din Editorul VB, faceți clic dreapta pe orice obiect pentru registrul de lucru în care doriți să inserați codul. Dacă nu vedeți Project Explorer, accesați fila View și faceți clic pe Project Explorer.
  4. Accesați Insert și faceți clic pe Module. Aceasta va insera un obiect modul pentru registrul dvs. de lucru.
  5. Copiați și lipiți codul în fereastra modulului.

Vei ajuta la dezvoltarea site-ului, partajarea pagina cu prietenii

wave wave wave wave wave