Când este sfârșitul dacă este nevoie de declarație? Operatori condiționali în VBA. Componentele funcției IIf

Operatori VBA de bază

Comentarii (0)

3.1. Reguli pentru operatorii de înregistrare

Când înregistrați operatorii, trebuie să respectați următoarele reguli:

Fiecare declarație nouă este scrisă pe un rând nou.

Pentru a scrie mai multe instrucțiuni pe o singură linie, acestea sunt separate prin două puncte (:).

Dacă afirmația nu se potrivește pe o singură linie, atunci trebuie să puneți un spațiu și o liniuță de subliniere (_) la sfârșitul rândului, apoi continuați partea care nu se potrivește pe următoarea linie.

3.2. Operator de atribuire

Operatorul de atribuire este utilizat atunci când unei variabile trebuie să i se atribuie o nouă valoare. Are următoarea sintaxă:

VARIABLE_NAME= EXPRESIE

Mai întâi, se evaluează expresia din partea dreaptă, iar apoi rezultatul este atribuit variabilei din partea stângă.

De exemplu. Scrieți următoarea expresie matematică folosind operatorul de atribuire:

În VBA această expresie poate fi scrisă ca următorul operator:

Y = a^(1/3)+(a^2+Exp(-b))/(Sin(a)^2-Log(b))

3 .3. Operatori I/O

3 .3.1. Operatorul și funcția MsgBox

Operator MsgBox afișează informații într-o casetă de dialog și setează modul să aștepte ca utilizatorul să apese un buton.

Are următoarea sintaxă:

MsgBox Mesaj[,Butoane][, Antet]

Argumente:

Mesaj - un argument obligatoriu care specifică mesajul informativ care urmează să fie afișat în fereastră. Poate consta din mai multe linii de text unite printr-un semn & . Utilizare în acest argument Chr(13) conduce la o nouă linie la ieșirea informațiilor.

Butoane - valoarea acestui argument determină categoriile de butoane care apar în fereastră. Valoarea argumentului butonului determină, de asemenea, dacă în fereastră apare vreo pictogramă. Dacă nu specificați ce butoane să afișați în caseta de mesaj, se utilizează valoarea implicită corespunzătoare butonului OK. În tabel 3.1 prezintă combinații posibile de butoane și pictograme în fereastra de mesaje.

Titlu - setează titlul ferestrei.

Funcţie MsgBox returnează o valoare întreagă care indică ce buton a fost făcut clic în caseta de dialog.

Tabelul 3.1. Valori valide ale variabilei butonului

Afişa

Argument

butonul OK

butoanele OK și Anulare

butoanele Da și Nu

Butoanele Da, Nu și Anulare

Butoanele Stop, Repeat și Ignore

VbAbortRetryIgnore

Butoanele Reîncercați și Anulați.

Semn informativ

Semnul întrebării

Semnul exclamarii

De exemplu. Afișează un mesaj despre data curentă.

MsgBox „Astăzi pe calendar” & Data , „Atenție”

Ca rezultat, va fi afișată următoarea fereastră (Fig. 3.1).

După ce faceți clic pe OK, caseta de mesaj se va închide și execuția programului va relua din instrucțiunea imediat după apelul MsgBox.

3.3.2. Funcţie InputBox

Funcţie InputBox introduce valori variabile folosind fereastra de introducere și are următoarea sintaxă:

Nume_variabilă = InputBox(Mesaj[, Titlu] )

Argumente:

Mesaj - argument necesar. Setează un mesaj informațional în fereastră, explicând de obicei semnificația valorii introduse.

Titlu - setează titlul ferestrei.

De exemplu, Introduceți valoarea variabilei N de la tastatură, furnizând o valoare implicită de 10.

Pentru a face acest lucru, puteți utiliza următorul operator:

N = InputBox("Introduceți N", "Introduceți", 10)

Ca urmare, va fi afișată următoarea fereastră pentru introducerea valorii variabilei N (Fig. 3.2).

Dacă valoarea implicită se potrivește utilizatorului, atunci după ce faceți clic pe butonul OK, fereastra de introducere se va închide, variabila N va fi setată la 10 și execuția programului se va relua cu instrucțiunea imediat în spatele apelului. InputBox.

Dacă valoarea implicită nu este potrivită pentru utilizator, atunci înainte de a face clic pe butonul OK, trebuie să introduceți valoarea dorită pentru variabila N.

3 .4. Declarație IF condiționată

Pentru a implementa un proces de calcul de ramificare în VBA, se folosește operatorul Dacă... Atunci... Altfel, care este cea mai simplă formă de verificare a stării. Are următoarea sintaxă:

DacăCONDIȚIEApoiOPERATOR_1ElseOPERATOR_2

OPERATOR_1 executat dacă CONDIȚIE adevărat, altfel executat OPERATOR_2. În acest caz, instrucțiunea If...Then...Else este scrisă pe o singură linie.

CONDIȚIE este o expresie booleană. Rezultatul unei expresii este întotdeauna boolean. O expresie poate fi simplă sau complexă. Când scrieți condiții simple, pot fi utilizate toate operațiile relaționale posibile enumerate în tabel. 3.2.

Masa3 .2. Relații logice

Operațiune

Nume

Expresie

Rezultat

Adevărat dacă A este egal cu B

Adevărat dacă A nu este egal cu B

Adevărat dacă A este mai mare decât B

Adevărat dacă A este mai mic decât B

Mai mult sau egal

Adevărat dacă A este mai mare sau egal cu B

Mai puțin sau egal

Adevărat dacă A este mai mic sau egal cu B

Condițiile complexe se formează din cele simple prin utilizarea operațiilor logice și a parantezelor. Lista operațiilor logice este dată în tabel. 3.3.

Masa3 .3. Operații logice

Nume

Expresie

Rezultat

boolean
negare

ȘI logic

SAU logic

Într-o declarație condiționată, este permisă utilizarea unui bloc de instrucțiuni în loc de oricare dintre instrucțiuni. În acest caz, operatorul condiționat arată astfel:

DacăCONDIȚIEApoi

BLOCK_OPERATORS_1

BLOCK_OPERATORS_2

Sfârșitul If

O declarație condiționată poate testa mai multe condiții. În acest caz, operatorul condiționat arată astfel:

DacăCONDIȚIE_1Apoi

BLOCK_OPERATORS_1

ElseIfCONDIȚIE_2Apoi

BLOCK_OPERATORS_2

Altfel

SfârşitDacă

Exemplul 1. Scrieți o parte a programului pentru algoritmul din Fig. 3.3.

Exemplul 2. Scrieți o parte a programului pentru algoritmul din Fig. 3.4.

3.5. Selectați Case operator

Operatorul Selectare caz este util atunci când trebuie să efectuați diferite acțiuni în funcție de valoarea unei expresii care are un set finit de valori valide. Este, de asemenea, legat de instrucțiunile condiționate, dar are o formă diferită:

Selectați cazEXPRESIE ÎN TESTARE

CazVALUES_1

OPERATORI_1

CazVALORI_ 2

OPERATORI_ 2

. . .

CazVALORI_N

OPERATORI_N

[ CazAltfel

IN CAZ CONTRAR_ OPERATORI]

Încheierea selectării

EXPRESIE ÎN TESTARE poate fi de orice tip scalar, cu excepția realului. VALORI constau dintr-un număr arbitrar de valori sau intervale separate prin virgule.

Tip VALORI trebuie să se potrivească cu tipul TEST_EXPRESSION.

Mai întâi se calculează EXPRESIE ÎN TESTARE. Dacă valoarea sa se potrivește cu una dintre valori VALORI_I, atunci ele vor fi îndeplinite OPERATORI_I Încheierea selectării. Dacă valoarea sa nu se potrivește cu niciuna dintre valori VALORI_I, atunci ele vor fi îndeplinite ELSE_OPERATORI iar controlul este transferat operatorului care stă după Încheierea selectării

De exemplu. Scrieți o parte a programului pentru algoritmul din Fig. 3.5, care determină valoarea variabilei S în funcție de valoarea variabilei n.

3.6. Instrucțiuni de buclă

Pentru a implementa un proces de calcul ciclic, adică execuția repetată a unuia sau mai multor operatori, se utilizează operatorul buclă. Pentru următorul, care are următoarea sintaxă:

PentruCOUNTER=START_VALUEToCON_VALUEEtapaETAPA

OPERATOR_BLOCK

OPERATOR_BLOCK

UrmătorulTEJGHEA

Bucla For...Next trece prin valorile unei variabile TEJGHEA, care este un parametru de buclă, de la valoarea inițială la valoarea finală cu pasul de modificare specificat. Acest lucru asigură că blocul de instrucțiuni de corp buclei este executat cu fiecare valoare nouă a contorului. Dacă EtapaETAPA este absent în proiectare, apoi implicit se presupune că pasul este egal cu 1. Potrivit operatorului Ieșire pentru puteți părăsi instrucțiunea buclă înainte TEJGHEA atinge ultima valoare.*

Pentru a itera prin obiecte dintr-un grup de obiecte similare, de exemplu, celule dintr-un interval sau elemente de matrice, este convenabil să utilizați operatorul buclă Pentru...Fiecare... În continuare.

Pentru fiecareElementÎngrup

BLOC_ OPERATORI

OPERATOR_BLOCK

UrmătorulElement

În VBA, alți operatori de buclă sunt utilizați pentru a organiza bucle cu un număr necunoscut de repetări:

bucle cu precondiție - DoIn timp ceBuclă,

DoPana candBuclă;

bucle cu postcondiție - DoBuclăIn timp ce,

DoBuclăPana cand.

Mai jos este sintaxa acestor instrucțiuni bucle:

„Buclă cu precondițieDo In timp ce Buclă

Face în timp ceCONDIȚIE

OPERATOR_BLOCK

OPERATOR_BLOCK

„Buclă cu precondițieDo Pana cand Buclă

DoPana candCONDIȚIE

OPERATOR_BLOCK

OPERATOR_BLOCK

„Buclă cu postcondițieDo Buclă în timp ce

BLOC_ OPERATORI

OPERATOR_BLOCK

Buclă în timp ceCONDIȚIE

„Buclă cu postcondițieDo Buclă până la

BLOC_ OPERATORI

OPERATOR_BLOCK

Buclă până laCONDIȚIE

Operator DoWhile...Loop se asigură că un bloc de instrucțiuni este repetat de mai multe ori până când CONDIȚIE se observă, iar operatorul



Alte noutati

Luarea deciziilor permite programatorilor să controleze fluxul de execuție a unui script sau a uneia dintre secțiunile acestuia. Execuția este controlată de una sau mai multe instrucțiuni condiționale.

Mai jos este o prezentare generală a structurii tipice de luare a deciziilor găsite în majoritatea limbajelor de programare.

VBA oferă următoarele tipuri de soluții. Faceți clic pe următoarele link-uri pentru a verifica detaliile acestora.

Dacă... Atunci - Dacă Atunci

O instrucțiune If constă dintr-o expresie booleană urmată de una sau mai multe instrucțiuni. Dacă condiția se numește True, instrucțiunile din condiția If(s) sunt executate. Dacă condiția este False, instrucțiunile de după bucla If sunt executate.

Sintaxă

Mai jos este sintaxa instrucțiunii If în VBScript.

If(expresie_booleană) Then Instrucțiunea 1 ..... ..... Instrucțiunea n End If

Diagrama fluxului

exemplu

Private Sub if_demo_Click() Dim x As Integer Dim y As Integer x = 234 y = 32 If x > y Then MsgBox "X is Greater than Y" End If End Sub

X este mai mare decât Y

Dacă instrucțiunea constă dintr-o expresie booleană, este urmată de una sau mai multe instrucțiuni.

if..alse declarație

O instrucțiune If constă dintr-o expresie booleană urmată de una sau mai multe instrucțiuni. Dacă condiția se numește True, instrucțiunile din condiția If(s) sunt executate. Dacă condiția este False, instrucțiunile din partea Else sunt executate.

Sintaxă

Mai jos este sintaxa instrucțiunii If Else în VBScript.

If(expresie_booleană) Then Declarația 1 ..... ..... Declarația n Else Declarația 1 ..... .... Declarația n End If

Diagrama fluxului

exemplu

În scop demonstrativ, să găsim cel mai mare dintre două numere Excel folosind o funcție.

Private Sub if_demo_Click() Dim x As Integer Dim y As Integer x = 234 y = 324 Dacă x > y Atunci MsgBox „X este mai mare decât Y” Else Msgbox „Y este mai mare decât X” End If End Sub

Când este executat codul de mai sus, acesta produce următoarea ieșire.

Y este mai mare decât X

Dacă o altă declarație constă dintr-o expresie logică, urmează una sau mai multe instrucțiuni. Dacă condiția este adevărată, instrucțiunile din instrucțiunile If sunt executate. Dacă condiția este falsă, se execută partea Else a scriptului.

if ... elseif..else declarație

O instrucțiune If urmată de una sau mai multe instrucțiuni ElseIf, care constau din expresii booleene, și apoi urmată de o instrucțiune else implicită, care este executată atunci când întreaga condiție devine falsă.

Sintaxă

Mai jos este sintaxa instrucțiunii If Elseif-Else în VBScript.

If(expresie_booleană) Then Declarația 1 ..... ..... Declarația n ElseIf (expresie_booleană) Then Declarația 1 ..... .... Declarația n ElseIf (expresia_booleană) Then Declarația 1 ..... . ... Declarație n Else Declarație 1 ..... .... Declarație n End If

Diagrama fluxului

exemplu

În scop demonstrativ, să găsim cel mai mare dintre două numere Excel folosind o funcție.

Private Sub if_demo_Click() Dim x As Integer Dim y As Integer x = 234 y = 234 Dacă x > y Atunci MsgBox "X este mai mare decât Y" ElseIf y > x Then Msgbox "Y is Greater than X" Else Msgbox "X și Y sunt EGAL" End If End Sub

Când este executat codul de mai sus, acesta produce următoarea ieșire.

X și Y sunt EGALI

Dacă instrucțiunea este urmată de una sau mai multe instrucțiuni ELSEIF, care constă din expresii booleene, apoi este urmată de o instrucțiune opțională yet, care este executată atunci când toate condițiile devin false.

imbricate if instrucțiuni

O instrucțiune If sau ElseIf în interiorul unei alte instrucțiuni If sau ElseIf. Instrucțiunile If interne sunt executate pe baza instrucțiunilor If exterioare. Acest lucru permite VBScript să gestioneze cu ușurință condiții complexe.

Sintaxă

Mai jos este sintaxa instrucțiunii Imbricate If în VBScript.

If(expresie_booleană) Then Declarația 1 ..... ..... Declarația n If(expresia_booleană) Then Declarația 1 ..... ..... Declarația n ElseIf (expresia_booleană) Then Declarația 1 ..... .... Declarație n Else Declarație 1 ..... .... Declarație n End If Else Declarație 1 Declarație n End If

exemplu

În scopuri demonstrative, să găsim tipul unui număr pozitiv folosind o funcție.

Private Sub nested_if_demo_Click() Dim a As Integer a = 23 Dacă a > 0 Atunci MsgBox „Numărul este un număr POZITIV” Dacă a = 1 Atunci MsgBox „Numărul nu este nici prim, nici compus” Altfel Dacă a = 2 Atunci MsgBox „Numărul este singurul număr prim par" ElseIf a = 3 Then MsgBox "Numărul este cel mai mic număr prim impar" Else MsgBox "Numărul NU este 0,1,2 sau 3" End If ElseIf a< 0 Then MsgBox "The Number is a NEGATIVE Number" Else MsgBox "The Number is ZERO" End If End Sub

Când este executat codul de mai sus, acesta produce următoarea ieșire.

Numărul este un număr POZITIV
Numărul NU este 0,1,2 sau 3

O instrucțiune if sau ElseIf în interiorul unei alte instrucțiuni if ​​sau ELSEIF.

instrucțiuni de comutare

Când utilizatorul dorește să execute un grup de instrucțiuni în funcție de valoarea unei expresii, se folosește cazul de comutare. Fiecare valoare se numește caz și o variabilă este inclusă în funcție de fiecare caz. Instrucțiunea Case Else este executată dacă expresia de testare nu se potrivește cu niciunul dintre cazurile specificate de utilizator.

Case Else este o instrucțiune opțională în Select Case, dar pentru o bună practică de programare există întotdeauna o instrucțiune Case Else.

Sintaxă

Mai jos este sintaxa instrucțiunii Switch în VBScript.

Selectați Expresia caz Case expressionlist1 statement1 statement2 .... .... statement1n Case expressionlist2 statement1 statement2 .... .... Case expressionlistn statement1 statement2 .... .... Case Else elsestatement1 elsestatement2 .... .. ..End Select

exemplu

În scopuri demonstrative, să găsim tipul unui întreg folosind o funcție.

Private Sub switch_demo_Click() Dim MyVar As Integer MyVar = 1 Select Case MyVar Case 1 MsgBox „Numărul este cel mai mic număr compus” Cazul 2 MsgBox „Numărul este singurul număr prim par” Cazul 3 MsgBox „Numărul este cel mai puțin impar Număr prim" Casă Altfel MsgBox "Număr necunoscut" End Select End Sub

Când este executat codul de mai sus, acesta produce următoarea ieșire.

Numărul este cel mai mic număr compus

O instrucțiune switch permite ca o variabilă să fie testată pentru egalitate față de o listă de valori.

Utilizarea operatorului condiționat este o parte integrantă a aproape oricărui limbaj de programare. Și, de fapt, totul vine din matematică, deoarece inițial limbajele de programare s-au format ca instrumente pentru rezolvarea diferitelor probleme. Voi spune imediat că articolul este plictisitor și neinteresant. Este pur și simplu imposibil din punct de vedere fizic să stoarceți ceva nou din programare, în special din descrierea operatorilor, dar voi găsi ceva. Și astfel, în limbajul VBA, instrucțiunea if este folosită pentru a verifica condițiile, care pot exista în mai multe variante. Dar mai întâi, puțin umor...

Un iepure aleargă prin pădure și vedem un urs citind o carte. Iepurele întreabă: „Clubfoot, ce citești?” El răspunde cu o privire inteligentă: „Logic”. Kosoy, părând surprins, întreabă: „Ce este logica?” „Ei bine, uite”, spune ursul:

  • M: Ai chibrituri?
  • Z: Nu
  • M: Deci nu fumezi
  • Z: Da!
  • M: Dacă nu fumezi, atunci nu există bani de cheltuială în plus
  • Z: Corect!
  • M: Deci te duci după fete?
  • Z: Desigur!
  • M: Si din moment ce te duci dupa fete, inseamna ca nu esti impotenta!
  • Z: Așa este din nou!

Iepurele a fost încântat de o carte atât de inteligentă și i-a cerut piciorului stamb să o citească. Merge mulțumit prin pădure și se bucură, apoi vine spre el un lup. Iepurele a decis să încerce logica pe gri și îl întreabă:

  • Z: Ai chibrituri?
  • B: Da
  • Z: Deci esti impotent!

Ei bine, da, am reluat gluma așa cum mi-am amintit

Bine, acum să trecem la teorie...

Opțiunea 1. Cea mai simplă utilizare a instrucțiunii VBA if condițional este atunci când o condiție este verificată și, dacă este adevărată, atunci se execută o expresie:

Dacă condiție atunci expresie

Opțiunea 2. Poate apărea o situație când, după verificarea unei condiții, trebuie executate mai multe expresii, caz în care instrucțiunea if ia forma:

Dacă condiție atunci

Expresia 1

Expresia 2

Expresia N

După cum puteți vedea, în acest caz se utilizează blocul de închidere if ... end if, este relevant și în cazul în care instrucțiunile sunt imbricate.

Opțiunea 3: Pentru a evita crearea de instrucțiuni condiționale imbricate, utilizați următoarea construcție:

Dacă condiție atunci

Expresia 1

Expresia 2

Totul aici este extrem de simplu: dacă condiția este adevărată, se execută prima expresie, dacă nu, a doua. Merită să ne amintim că după verificarea stării pot urma mai multe afirmații, ca în opțiunea de mai sus.

Opțiunea 4: Verificarea mai multor condiții:

Dacă condiția 1 atunci

Expresii 1

ElseIf condiția 2 atunci

Expresii 2

ElseIf condiția 3 atunci

Expresii 3

Logica de funcționare este următoarea: mai întâi se verifică prima condiție, dacă este adevărată, apoi se execută primele expresii și apoi are loc trecerea la operator, care urmează End If. Dacă prima condiție nu este îndeplinită, a doua este verificată și așa mai departe, folosirea unei expresii Else la sfârșit este opțională, ea poate fi urmată de o instrucțiune care trebuie executată dacă nu este îndeplinită nici una dintre condițiile anterioare.

Bine, acum să scriem un exemplu simplu de utilizare a VBA dacă apoi construiți. Creați un formular în editorul Visual Basic pentru aplicații și adăugați trei etichete de text () și un buton () pe suprafața acestuia. În editorul de cod vom scrie:

Private Sub GetSub() Dim MySumm As Integer Dim MyVar As Byte MyVar = 0 Do While MySumm<= 10000 MySumm = MySumm + 1 If MySumm = 10 Then Label1.Caption = „Suma a ajuns la 10” ElseIf MySumm = 100 Then Label2.Caption = „Suma a ajuns la 100” ElseIf MySumm = 1000 Then Label3.Caption = „Suma a ajuns la 1000” Else Label4.Caption = „Valoare atinsă”& MySumm End If Loop End Sub Private Sub CommandButton1_Click() Call GetSub End Sub Private Sub UserForm_Initialize() Label1.Caption = "" Label1.FontSize = 13 Label1.ForeColor = vbRed Label2.Caption = "" Label2.FontSize2 =. ForeColor = vbGreen Label3.Caption = "" Label3.FontSize = 13 Label3.ForeColor = vbBlue Label4.Caption = "" Label4.FontSize = 13 CommandButton1.Caption = "Run" End Sub

În procedura GetSub se folosește o buclă, condiția pentru executarea buclei este ca valoarea variabilei MySumm să fie mai mică sau exact 10000. Corpul buclei în sine folosește instrucțiuni VBA if then cu mai multe opțiuni. Se verifică condițiile: dacă suma ajunge la valoarea de 10, atunci scrieți o informație în primul câmp de text, dacă 100 - altă informație, dacă 1000 - a treia informație, în caz contrar - scrieți datele în proprietatea Caption a celui de-al patrulea text camp.

O singură linie și mai multe linii If...Then...Else construcții de instrucțiuni și funcție IIf utilizate în codul VBA Excel - sintaxă, componente, exemple.

Dacă... Atunci... Altfel afirmație

Operator Dacă... Atunci... Altfel este conceput pentru a transfera controlul către unul dintre blocurile operator, în funcție de rezultatele condițiilor verificate.

Construcție cu o singură linie

Operator Dacă... Atunci... Altfel poate fi folosit într-o construcție cu o linie fără cuvinte cheie Altfel, Încheiați dacă.

Sintaxa liniei unice If...Then...

Dacă[condiție] Apoi[operatori]

Componente cu o linie Daca atunci...

  • condiție Adevărat sau Fals;
  • operatori condiție returnează valoarea Adevărat;

Dacă componenta condiție returnează valoarea Fals, bloc operatori constructii Daca atunci...

Exemplul 1

Sub primer1() Dim d As Integer, a As String d = InputBox("Introduceți un număr de la 1 la 20", "Exemplu 1", 1) Dacă d > 10 Atunci a = "Numărul " & d & " este mai mare mai mult de 10" MsgBox a End Sub

Construcție cu mai multe linii

Sintaxa constructiei multilinie If...Then...Else

Dacă[condiție] Apoi[operatori] ElseIf[condiție] Apoi[operatori] ---------------- Altfel[operatori] Încheiați dacă

Componentele unui design cu mai multe linii Dacă... Atunci... Altfel:

  • condiție- expresie numerică sau șir după cuvântul cheie Dacă sau ElseIfși returnând o valoare booleană Adevărat sau Fals;
  • operatori- un bloc de instrucțiuni de cod VBA Excel care este executat dacă componenta condiție returnează valoarea Adevărat.
  • linie punctata denotă blocuri suplimentare dintr-un șir ElseIf [condiție] Atunciși șiruri [operatori];
  • bloc de declarații după cuvântul cheie Altfel executat oricum, dar codul blochează din linie Altfelși șiruri [operatori] este opțional și poate fi omis.

Dacă componenta condiție returnează valoarea Fals, următorul bloc de operatori în construcții Dacă... Atunci... Altfel este omis și controlul programului este transferat la următoarea linie de cod.

Cea mai simplă versiune a unui design cu mai multe linii Dacă... Atunci... Altfel:

Dacă[condiție] Apoi[operatori] Altfel[operatori] Încheiați dacă

Exemplul 2

Sub primer2() Dim d As Integer, a As String d = InputBox("Introduceți un număr de la 1 la 40", "Exemplu 2", 1) Dacă d< 11 Then a = "Число " & d & " входит в первую десятку" ElseIf d >10 Și d< 21 Then a = "Число " & d & " входит во вторую десятку" ElseIf d >20 Și d< 31 Then a = "Число " & d & " входит в третью десятку" Else a = "Число " & d & " входит в четвертую десятку" End If MsgBox a End Sub

Funcția IIf

Funcţie IIf verifică o anumită condiție și returnează o valoare în funcție de rezultatul testului.

Sintaxa funcției

IIf([condiție], [dacă este adevărat], [dacă este fals])

Componentele funcției IIf

  • condiție- o expresie numerică sau șir care returnează o valoare booleană Adevărat sau Fals;
  • daca e adevarat IIf, Dacă condiție valoare returnată Adevărat;
  • dacă Fals- valoarea pe care o returnează funcția IIf, Dacă condiție valoare returnată Fals.

Exemplul 3

Sub primer3() Dim d As Integer, a As String d = InputBox("Introduceți un număr de la 1 la 20", "Exemplu 3", 1) a = IIf(d< 10, d & " - число однозначное", _ d & " - число двузначное") MsgBox a End Sub

Când faceți clic pe butonul „Anulare” sau închideți caseta de dialog InputBox din exemple cu o cruce, este generată o eroare, deoarece în aceste cazuri returnează un șir gol. Atribuirea unui șir gol unei variabile Integer d provoacă o eroare. Când faceți clic pe butonul „OK” din caseta de dialog, VBA Excel convertește automat numerele introduse în câmpul de introducere în format text în formatul numeric al variabilei d.

Condițiile sunt foarte utile în programare deoarece ne permit să realizăm acțiuni în funcție de criterii stabilite (se folosește același principiu ca și în DACĂ funcții Excel).

Cea mai importantă funcție care stabilește condiția este DACĂși acum vom vedea cum funcționează:

Dacă [CONDIȚIE AICI] Atunci „=> DACĂ condiția este adevărată, ATUNCI „Instrucțiuni dacă este adevărată Altfel” => ELSE „Instrucțiuni dacă este fals Sfârșit dacă

Să fim practici și să revenim la exemplul pe care l-am folosit în lecția variabilă. Scopul acestei proceduri a fost deschiderea unei casete de dialog care să conțină valoarea din șirul specificat în celulă F5:

Dacă introduceți o literă într-o celulă F5, aceasta va provoca o eroare. Vrem să prevenim acest lucru.

Subvariabile () „Declararea variabilelor Dim last_name As String, first_name As String, age As Integer, row_number As Integer „Atribuirea valorilor variabilelor row_number = Range(”F5”) + 1 last_name = Cells(row_number, 1) first_name = Cells(row_number , 2) age = Cells(row_number, 3) "Casa de dialog MsgBox last_name & " " & first_name & "," & varsta & " ani" End Sub

Să adăugăm o condiție care va verifica dacă valoarea introdusă este în celulă F5 numărul înainte de executarea codului.

Vom folosi funcția EsteNumeric pentru a verifica starea:

Subvariabile () „Dacă valoarea din paranteze (celula F5) este numerică (ȘI DECI CONDIȚIA IF ESTE ADEVĂRATĂ), atunci „execuți instrucțiunile care urmează THEN If IsNumeric (Range („F5”)) Apoi „Declararea variabilelor Dim last_name As String , first_name As String, age As Integer, row_number As Integer "Atribuirea valorilor variabilelor row_number = Interval ("F5") + 1 last_name = Cells (row_number, 1) first_name = Cells (row_number, 2) varsta = Cells ( row_number, 3) "Dialog Case MsgBox last_name & " " & first_name & "," & varsta & " ani" End If End Sub

De asemenea, trebuie să notăm instrucțiuni dacă nu este îndeplinită condiția pe care am stabilit-o:

Subvariabile () If IsNumeric (Range ("F5")) Atunci "Dacă condiția este adevărată" Declararea variabilelor Dim last_name As String, first_name As String, age As Integer, row_number As Integer "Atribuirea de valori variabile row_number = Range ("F5") + 1 nume = Celule (număr_rând, 1) prenume = Celule (număr_rând, 2) vârstă = Celule (număr_rând, 3) "Casa de dialog MsgBox nume & " " & prenume & "," & vârstă & " ani " Altfel "Dacă condiția nu este executată " Caseta de dialog: Avertisment MsgBox "Valoarea introdusă " & Interval ("F5") & " nu este validă!" „Ștergerea conținutului celulei F5 Range („F5”).ClearContents End If End Sub

Acum, valorile non-numerice nu vor cauza probleme.

Lucrând cu matricea noastră, care conține 16 rânduri de date, următorul nostru pas va fi să verificăm dacă variabila row_number este „mai mare sau egală cu 2” și „mai mică sau egală cu 17”.

Dar mai întâi, să aruncăm o privire la operatorii de comparație:

și acești operatori utili:

Acum să adăugăm una dintre condițiile de mai sus ȘIîntre operatorii de comparație:

Subvariabile () Dacă IsNumeric (Range ("F5")) Apoi "Dacă valoarea numerică Dim last_name As String, first_name As String, age As Integer, row_number As Integer row_number = Interval ("F5") + 1 Dacă row_number > = 2 Și row_number

Dacă vrem să facem macro-ul mai practic, putem înlocui 17 la o variabilă care ar conține numărul de linii. Acest lucru ne-ar permite să adăugăm și să eliminăm rânduri din matrice fără a fi nevoie să modificăm această limită de fiecare dată.

Pentru a face acest lucru trebuie să creăm o variabilă nb_rânduriși adăugați această caracteristică.

În acest caz, folosim funcția WorksheetFunction.CountA, care este un analog al funcției COUNTAîn Excel în sine.

Dorim ca această funcție să numere numărul de celule negoale din prima coloană și să scrie valoarea rezultată într-o variabilă nb_rânduri:

Subvariabile () If IsNumeric (Range ("F5")) Then "IF NUMBER Dim last_name As String, first_name As String, age As Integer, row_number As Integer Dim nb_rows As Integer row_number = Interval ("F5") + 1 nb_rows = WorksheetFunction.CountA (Range ("A:A")) "Funcția de numărare a rândurilor Dacă row_number > = 2 And row_number

ElseIf

ElseIf face posibilă adăugarea unor condiții suplimentare după comanda IF:

Dacă [CONDIȚIA 1] Atunci „=> DACĂ condiția 1 este adevărată, ATUNCI „Instrucțiunile 1 AltcevaDacă [CONDIȚIA 2] Atunci „=> DACĂ condiția 1 este falsă, dar condiția 2 este adevărată, ATUNCI „Instrucțiunile 2 Altceva” => ELSE „ Instrucțiuni 3 End If

Dacă CONDIȚIA 1 efectuat, Instrucțiunea 1 va fi executat și va lăsa declarația DACĂ(care începe cu DACĂși se termină cu End If). Dacă CONDIȚIA 2 ia valoarea " minciună „, atunci va fi executat Instrucțiunea 2, iar dacă se întoarce la rândul său " minciună ", Apoi Instrucțiunea 3(sub Altfel) vor fi executate.

Sub scores_comment () "Variabile Dim note As Integer, score_comment As String note = Range ("A1") "Comentarii bazate pe scorul primit Dacă nota = 6 Apoi score_comment = "Minge grozavă!" ElseIf note = 5 Then score_comment = "Scor bun" ElseIf note = 4 Then score_comment = "Scor satisfăcător" ElseIf note = 3 Then score_comment = "Scor nesatisfăcător" ElseIf note = 2 Then score_comment = "Scor prost" ElseIf note_comment = 1 Then = "Scor groaznic" Else score_comment = "Scor zero" End If "Coment in cell B1 Range ("B1") = score_comment End Sub

Selectați

Există o alternativă la utilizare Dacă cu multe ElseIf instrucțiuni, și anume comanda Selectați, care este mai potrivit pentru aceste tipuri de situații.

Să ne uităm la un exemplu de macrocomandă cu operator Selectați:

Sub scores_comment () "Variabile Dim note As Integer , score_comment As String note = Range ("A1") "Comentarii bazate pe scorul primit Select Case note "

Este de remarcat faptul că am putea folosi și alți operatori de comparație:

Cazul este >=6 "dacă valoarea >=6

Exemple cu semnificații diferite:

Cazul este = 6, 7 "dacă valoarea = 6 sau 7 Cazul este 6, 7" dacă valoarea nu este 6 sau 7 Cazul 6 până la 10 "dacă valoarea = orice număr de la 6 la 10