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 |
|||||
Ș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 ce … Buclă,
DoPana cand … Buclă;
bucle cu postcondiție - Do … BuclăIn timp ce,
Do … Buclă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 SubConstrucț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 SubCâ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