negație Vba. Operatori de comparare (Visual Basic). Tipuri de date VBA de bază

28.03.2020 Știri

semnNumeDescriere
= EgalReturnează True dacă operanzii din stânga și din dreapta sunt egali. Rețineți că aceasta este o supraîncărcare a operatorului de atribuire.
<> Nu este egalReturnează True dacă operanzii din stânga și din dreapta nu sunt egali.
> Mai bun decâtReturnează True dacă operandul din stânga este mai mare decât operandul din dreapta.
< Mai puțin decâtReturnează adevărat dacă operandul din stânga este mai mic decât operandul din dreapta.
>= Mai mult sau egalReturnează True dacă operandul din stânga este mai mare sau egal cu operandul din dreapta.
<= Mai puțin sau egalReturnează True dacă operandul din stânga este mai mic sau egal cu operandul din dreapta.
Este Capital de referințăReturnează True dacă referința obiectului din stânga este aceeași instanță cu referința obiectului din dreapta. Poate fi folosit și cu Nimic (referință la obiect nul) pe ambele părți. Notă. Operatorul Is va încerca să forțeze ambii operanzi la Object înainte de a efectua comparația. Dacă oricare parte este de tip primitiv sau O variantă care nu conține un obiect (fie un subtip non-obiect, fie o comparație vtEmpty) va avea ca rezultat o eroare de rulare 424 - „Obiect necesar”. Dacă vreun operand aparține altuia interfata același obiect, comparația va returna True . Dacă trebuie să verificați corectitudinea ambelor instanțe, atunci Și interfață, ObjPtr(stânga) = ObjPtr(dreapta) folosește ObjPtr(stânga) = ObjPtr(dreapta) .

Note

Sintaxa VBA permite „înlănțuirea” operatorilor de comparație, dar în general aceste construcții ar trebui evitate. Comparația se face întotdeauna de la stânga la dreapta pe doar 2 operanzi la un moment dat, iar fiecare comparație are ca rezultat un boolean. De exemplu, expresia...

A = 2: b = 1: c = 0 expr = a > b > c

Poate fi citit în unele contexte ca testând dacă b este între a și c. În VBA, acest lucru este evaluat după cum urmează:

A = 2: b = 1: c = 0 expr = a > b > c expr = (2 > 1) > 0 expr = Adevarat > 0 expr = -1 > 0 "CInt(True) = -1 expr = Fals

Orice operator de comparație, altul decât Se folosește cu Object ca operand, va funcționa pe valoarea returnată a membrului implicit al Object. Dacă obiectul nu are un membru implicit, comparația va avea ca rezultat eroarea de rulare 438 - „Obiectul nu acceptă proprietatea sau metoda sa”.

Dacă Object nu este inițializat, comparația va avea ca rezultat eroarea de rulare 91 - „Variabilă obiect sau Cu variabila bloc blocată”.

Dacă literalul Nimic este folosit cu orice operator de comparație, altul decât Is, va avea ca rezultat o eroare de compilare - „Utilizarea ilegală a obiectului”.

Dacă obiectul implicit al obiectului este alt Obiect, VBA va apela continuu elementul implicit al fiecărei valori returnate ulterioare până când este returnat un tip primitiv sau apare o eroare. De exemplu, să presupunem că SomeClass are un membru implicit Value , care este o instanță a ChildClass cu un membru ChildValue al ChildValue . Comparaţie...

Set x = New SomeClass Debug.Print x > 42

Va fi evaluat ca:

Set x = New SomeClass Debug.Print x.Value.ChildValue > 42

Dacă operandul este numeric și o alta operandul este un String sau o Varianta a unui subtip String, se va efectua o comparație numerică. În acest caz, dacă String nu poate fi mapat la un număr, rezultatul comparării va fi eroarea de rulare 13 - „Tip nepotrivire”.

Dacă ambii operanzii sunt un șir sau o variantă a subtipului șir, compararea șirurilor va fi efectuată pe baza parametrului de comparație al parametrilor modulului de cod. Aceste comparații sunt făcute pe bază de personaj. Rețineți că reprezentare simbolicăȘir care conține numărul Nu este același cu valorile numerice care se potrivesc:

Public Sub Example() Dim left As Variant Dim right As Variant left = "42" right = "5" Debug.Print stânga > right "Tipărește False Debug.Print Val(stânga) > Val(dreapta) "Tipărește True End Sub

Din acest motiv, asigurați-vă că variabilele String sau Variant sunt transmise numerelor înainte de a efectua comparații de inegalități numerice.

Dacă unul dintre operanzi este o dată, atunci se va efectua o comparație numerică asupra dublului subiacent dacă celălalt operand este numeric sau poate fi convertit într-un tip numeric.

Dacă celălalt operand este un șir de caractere sau o variantă a unui subtip de șir de caractere care poate fi turnat la Date folosind localitatea curentă, șirul va fi turnat la Date . Dacă nu poate fi aplicată la Data în localitatea curentă, rezultatul comparării va fi eroarea de rulare 13 - „Nepotrivire tip”.

Ar trebui să aveți grijă când comparați valorile duble sau simple și booleenii. Spre deosebire de alte tipuri numerice, valorile diferite de zero nu pot fi considerate adevărate din cauza comportamentului VBA în promovarea unui tip de date de comparație folosind un număr cu virgulă mobilă în Double:

Public Sub Example() Dim Test As Double Test = 42 Debug.Print CBool(Test) „Prints True.” True este promovat la Double - Testul nu este turnat la Boolean Debug.Print Test = True „Prints False” Cu turnări explicite: Debug.Print CBool(Test) = True „Tipărește True Debug.Print CDbl(-1) = CDbl(True) „Tipărește True End Sub


Operator Sintaxă Descriere
ȘI A SI B Conjuncție: Dacă A și B sunt adevărate, atunci adevărate. Altfel - Fals
SAU A SAU B Disjuncție: Dacă oricare dintre operanzi este adevărat, atunci adevărat. Altfel - Fals
NU NU A Negare: Dacă A este fals, atunci este adevărat. Altfel - Fals
XOR A XOR B Excepție: Dacă A este adevărat sau B este adevărat, atunci - adevărat. Altfel - Fals
EQV A EQV B Echivalenţă: Dacă A are aceeași valoare cu B, atunci este adevărat. Altfel - Fals
IMP A IMP B Implicare: Dacă A este adevărat și B este fals, atunci fals. Altfel - Adevărat

Operandul pentru un operator boolean poate fi orice expresie validă care are un rezultat boolean, precum și un număr care poate fi convertit într-o valoare booleană.

Rezultatul unei operații logice este o valoare de tip Boolean (sau Null dacă cel puțin unul dintre operanzi este Null).

Operatorul logic AND

Sintaxă:
Operand_1 ȘI Operand_2


Operatorul AND efectuează conjuncție logică.

Rezultatul acestei operații este Adevărat numai atunci când ambii operanzi sunt Adevărați, în caz contrar Fals.


Tabelul adevărului


Operatorul AND poate fi folosit pentru operanzi multipli:


(5 3) ȘI (5=6) rezultatul va fi Fals


Indiferent de numărul de operanzi, rezultatul operației logice AND va fi Adevărat numai dacă toți operanzii expresiei se evaluează la Adevărat. În orice alt caz, rezultatul va fi Fals. Rețineți că operanzii sunt încadrați în paranteze. VBA evaluează mai întâi valoarea fiecărui operand din paranteze și apoi întreaga expresie.

Operatorul logic SAU

Sintaxă:
Operand_1 SAU Operand_2


Operatorul SAU o face disjuncție logică.

Rezultatul acestei operații este adevărat dacă cel puțin unul dintre operanzi este adevărat, în caz contrar fals.


Tabelul adevărului


Operatorul OR poate fi folosit pentru operanzi multipli:


(5 3) SAU (5=6) rezultatul va fi adevărat


Indiferent de numărul de operanzi, rezultatul operației logice SAU va fi întotdeauna Adevărat dacă cel puțin unul dintre operanzii expresiei este Adevărat. În caz contrar, rezultatul va fi Fals.

Operatorii AND și OR pot fi combinați:


((5 3)) SAU (5=6) rezultatul va fi adevărat

Operatorul logic NU

Sintaxă:
NU operand


Operatorul NOT o face negație logică.

Operatorul NOT folosește un singur operand.


Tabelul adevărului


Operatorii AND OR NOT pot fi combinați:


((5 3)) SAU NU (5=6) rezultatul va fi adevărat

Operatorul logic XOR

Sintaxă:
Operand_1 XOR Operand_2


Operatorul XOR o face excepție logică.

Rezultatul acestei operații este adevărat dacă operanzii au valori diferite, în caz contrar, fals.


Tabelul adevărului


((5 3)) SAU NU (5=6) XOR (5=5) rezultatul va fi Fals

Operatorul logic EQV

Sintaxă:
Operand_1 EQV Operand_2


Operatorul EQV este operatorul echivalență logică.

Rezultatul acestei operații este adevărat dacă operanzii au aceleași valori, în caz contrar, fals.


Tabelul adevărului


((5 3)) SAU NU (5=6) EQV (5=5) rezultatul va fi adevărat

Operatorul logic IMP

Sintaxă:
Operand_1 IMP Operand_2


Operatorul IMP efectuează o operație logică implicatii.


Tabelul adevărului


((5 3)) SAU NU (5=6) IMP (5=5) rezultatul va fi adevărat


Operatorul logic IMP este cel mai puțin intuitiv dintre toți operatorii logici. Din fericire, nevoia de a-l folosi apare destul de rar.


Există cinci operatori logici de bază și importanți în Visual Basic: And, Or, Not, Xor și Eqv. Voi încerca acum să explic rolul fiecăruia dintre ei!

Deci si!
Acesta este probabil cel mai simplu și mai necesar operator logic printre altele.

Ajutor:
Returnează rezultatul unei conjuncții (ȘI logic) a două expresii.

Sintaxă:
rezultat = expresia1Șiexpresie2

Acestea. rezultat va fi adevărat numai dacă este adevărat expresie1ȘIexpresie2. Valorile returnate de operator sunt prezentate în următorul tabel:

expresie1 expresie2 rezultat
Adevărat Adevărat Adevărat
Adevărat Fals Fals
Adevărat Nul Nul
Fals Adevărat Fals
Fals Fals Fals
Fals Nul Fals
Nul Adevărat Nul
Nul Fals Fals
Nul Nul Nul

Și acum un mic exemplu:

Să ne imaginăm că variabilele User_Has_Computer și User_Has_Car sunt declarate ca valori booleene și în procesul de acțiune le iau asupra valorilor fie Adevărat, fie Fals. Setați o condiție care verifică aceste valori:

Emulăm asta noi înșine :) - introduceți undeva următoarele rânduri:


Dim User_Has_Car As Boolean
User_Has_Computer = Adevărat
User_Has_Car = Adevărat

Dacă User_Has_Computer și User_Has_Car, atunci
MsgBox „Ești o persoană fericită!”
Încheiați dacă

La verificare această condiție Pe ecran va apărea un mesaj care vă va informa că utilizatorul este o persoană fericită, deoarece... el are o mașină ȘI calculator:-)! Și acum înainte de a treia sau a patra linie puneți un apostrof """ - comentați linia. Acum una dintre variabile va fi False în mod implicit. Acum mesajul NU va apărea, deoarece utilizatorul nu este foarte mulțumit de a avea o mașină SAU calculator...

Următorul operator nu este mai puțin simplu - Or.

Ajutor:
Efectuează o operație logic SAU (adăugare) pe două expresii.

Sintaxă:
rezultat = expresia1Sauexpresie2

Rezultatul va fi adevărat numai dacă numai una dintre expresii este adevărată. Valorile returnate de operator sunt prezentate în următorul tabel:

expresie1 expresie1 rezultat
Adevărat Adevărat Adevărat
Adevărat Fals Adevărat
Adevărat Nul Adevărat
Fals Adevărat Adevărat
Fals Fals Fals
Fals Nul Nul
Nul Adevărat Adevărat
Nul Fals Nul
Nul Nul Nul

Și din nou un mic exemplu cu aceleași variabile booleene User_Has_Computer și User_Has_Car, care în procesul de acțiune a luat valorile fie adevărate, fie false.

Dim User_Has_Computer ca boolean
Dim User_Has_Car As Boolean
User_Has_Computer = Fals
User_Has_Car = Adevărat

Dacă User_Has_Computer Sau User_Has_Car Apoi
MsgBox „Ești aproape o persoană fericită!”
Încheiați dacă

La verificarea acestei stări, pe ecran va apărea un mesaj care anunță că utilizatorul este aproape o persoană fericită, deoarece are masina, dar fara calculator:-|...

Nu operator

Ajutor:
Efectuează o operație de negație logică asupra unei expresii.

Sintaxă:
rezultat = Nu expresie

Acestea. rezultat devine opusul expresie(excluzând Null). Valorile returnate de operator sunt prezentate în următorul tabel:

Exemplu:

Dim User_Has_Computer ca boolean

User_Has_Computer = Fals

Dacă nu User_Has_Computer, atunci
MsgBox „Compatizez...:)”
Încheiați dacă

Permiteți-mi să explic: condiția Dacă... Atunci este executată atunci când o expresie (în loc...) este adevărată. Să ne imaginăm că variabila User_Has_Computer = Fals. Apoi linia
Not User_Has_Computer dă rezultatul adevărat și condiția este adevărată!

operator Xor.

Ajutor:
Efectuează o operație SAU exclusivă pe două expresii.

Sintaxă:
[rezultat =] expresie1 Xor expresie2

În principiu, acest operator este similar cu Or, dar nu este simplu SAU, și exclusiv SAU. Dacă unul şi numai unul dintre expresii adevărat (are valoarea True), rezultat este adevarat. Iar operatorul Or permite două adevărate expresii. Rezultat

Exemplu:

Dim User_Has_Computer ca boolean
Dim User_Has_Car As Boolean
User_Has_Computer = Fals
User_Has_Car = Adevărat

Dacă User_Has_Computer Xor User_Has_Car, atunci
MsgBox „Ai nevoie de o mașină ȘI de un computer!”
Încheiați dacă

Aici, la fel ca în exemplul anterior, condiția este îndeplinită numai atunci când linia User_Has_Computer Xor User_Has_Car este adevărat (= adevărat). Și este adevărat dacă și numai dacă doar una dintre condiții este adevărată. Dacă sunt ambele, atunci condiția nu va mai fi îndeplinită.

operator Eqv.

Ajutor:
Folosit pentru a testa echivalența logică a două expresii.

Sintaxă:
rezultat = expresie1 Eqv expresie2

Totul este destul de simplu aici: rezultatul va fi adevărat dacă ambele expresii sunt fie adevărate, fie false. Rezultat este definită după cum urmează:

Exemplu:

Dim User_Has_Computer ca boolean
Dim User_Has_Car As Boolean
User_Has_Computer = Adevărat
User_Has_Car = Adevărat

Dacă User_Has_Computer Eqv User_Has_Car Atunci
MsgBox „Ești fie o persoană fericită, fie nefericită!”
Încheiați dacă

Aici computerul te va numi o persoană „fericită sau nefericită”, pentru că... condiția este îndeplinită numai atunci când utilizatorul are atât mașină, cât și computer sau niciunul.

În mod obișnuit, operațiunile de comparare sunt utilizate în operatorii de buclă pentru a lua o decizie cu privire la cursul ulterioar al operațiilor.

Rezultatul oricărei operațiuni de comparare este o valoare booleană: Adevărat, Fals.

Dacă ambii operanzi dintr-o expresie de comparație au același tip de date, VBA efectuează o comparație simplă pentru acel tip.

Dacă ambii operanzi dintr-o expresie de comparație au tipuri specifice și tipurile nu sunt compatibile, VBA emite o eroare de nepotrivire de tip.

Dacă unul sau ambii operanzi dintr-o expresie de comparație sunt variabile de tip Variant, VBA încearcă să convertească tipul Variant într-un tip compatibil.

Comparație de șiruri

Când compară șiruri cu operatori relaționali, VBA compară fiecare șir de la stânga la dreapta caracter cu caracter.

În VBA, un șir este egal cu altul numai atunci când ambele șiruri conțin exact aceleași caractere în exact aceeași ordine și ambele șiruri au aceeași lungime. De exemplu, șirurile „abcd” „abcd” „abcd” nu sunt egale între ele, deoarece VBA nu ignoră caracterele de spații albe de început sau de sfârșit atunci când compară șiruri.

Ar trebui să fiți atenți când comparați șiruri de lungime variabilă.

Comparație binar și șir de text

Pentru a stoca text, computerul folosește o schemă în care fiecare caracter afișat are un număr unic. Toate literele alfabetului au propriile lor litere numere unice. De obicei litere majuscule au numere mai mici decât literele mici. Se numește numărul corespunzător unei anumite litere sau simbol codul caracterelor.

Când se efectuează o comparație de șiruri binare informații VBA folosește echivalentul binar al unui număr pentru fiecare caracter. Această metodă de comparare se numește binar sau binarși este metoda implicită de comparare.

Deoarece literele mari au numere binare mai mici, literele mari sunt alfabetizate înaintea literelor mici. Prin urmare, în timpul unei comparații binare a șirurilor de caractere, șirul „ABV” va fi mai mic decât șirul „abc”.


Când compară șiruri de caractere textual, VBA nu folosește echivalentul binar al caracterelor și nu „diferențiază” între litere mari și mici. Într-o comparație de text, șirul „abc” este egal cu șirul „ABC”.

Pentru a selecta o metodă de comparare a șirurilor, utilizați directiva Option Compare


Opțiunea Comparare


Această directivă trebuie să fie în zona de declarare a modulului.

Concatenarea șirurilor

Adăugarea unui șir la altul se numește concatenare de șiruri.

Concatenarea șirurilor este folosită în mod obișnuit pentru a forma șiruri din diverse surse într-o procedură pentru a crea un mesaj pentru afișare. VBA are doi operatori pentru concatenarea șirurilor.

Operator de concatenare (&)

Operatorul (&) din VBA este folosit numai pentru concatenarea șirurilor.

Sintaxă


Operand_1 și Operand_2 [& Operand_3..]


Operand_N este orice șir valid sau expresie numerică (care se transformă în șir).

Tipul de date al rezultatului concatenării șirurilor este String.

Dacă operandul dintr-o expresie de concatenare a șirurilor este gol sau nul, VBA interpretează acel operand ca un șir de lungime zero (un șir care nu conține caractere).

Notă! Simbolul (&) al operației de concatenare trebuie separat printr-un spațiu de numele variabilei, deoarece în caz contrar, VBA poate interpreta caracterul ca un caracter de definiție de tip lung.

Operator de adăugare în concatenarea șirurilor

De asemenea, puteți utiliza operatorul (+) pentru a concatena șiruri.

Acest operator are aceeași sintaxă și cerințe ca și operatorul (&). Cu toate acestea, înțelegeți că în VBA scopul principal al operatorului (+) este adunarea aritmetică. Prin urmare, pentru a evita ambiguitatea în citirea codului programului, este recomandat să folosiți operatorul (&) pentru a concatena șiruri.

Priorități operaționale

Multe dintre expresiile din codul programului sunt complexe (compozite), adică. constau din două sau mai multe expresii.

Când evaluează expresii complexe, VBA urmează aceste reguli:

  • Părțile unei expresii cuprinse între paranteze sunt întotdeauna evaluate mai întâi;
  • Se efectuează operațiuni specifice în funcție de ierarhia operatorului (tabelul de mai jos);
  • Dacă ierarhia operatorilor este egală, aceștia sunt evaluați de la stânga la dreapta.
Operator

Toți operatorii aritmetici sunt descriși în detaliu aici. operatori de comparaţie, operatori logici și de concatenare. Am încercat să adun tot ce trebuie să știți despre acești operatori. Fiecare afirmație este prevăzută cu un exemplu. Descrierile au fost traduse de mine din Ajutorul standard"a VB5.

Operatori aritmetici

operator ^ (exponentiație)

Acest operator este folosit pentru a ridica un număr la o putere.

Sintaxă:

rezultat = număr^grad

Opțiuni:

rezultat
număr
grad- necesar; orice expresie numerică

Note:

număr poate fi negativ numai dacă grad- un număr întreg. Dacă într-o expresie se folosesc mai mulți operatori ^, atunci calculul are loc de la stânga la dreapta. De obicei, tipul de rezultat este Double. Cu toate acestea, dacă sau grad, sau număr- Expresie nulă, atunci rezultat de asemenea Null.

Exemplu:

Dim Valoarea mea
Valoarea mea = 2^2" Returnează 4.
Valoarea mea = 2^3^3" Va reveni 512 (2^3=8, 8^3=512)
Valoarea mea = (-5)^3" Va reveni -125.

Sfat:

Dacă trebuie să ridicați un număr la o putere constantă, atunci este mai bine să utilizați mai mulți operatori - înmulțiri, decât unul - ridicarea la o putere, judecă singur, un ciclu de un milion de treceri cu calculul expresiei a trecut:

test1 = 2^8" 893 ms
test1 = 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 " 130 ms!

operator * (înmulțire)

Folosit pentru a înmulți două numere.

Sintaxă:

rezultat = Numărul 1* numarul 2

Opțiuni:

rezultat- necesar; orice variabilă numerică
Numărul 1- Neapărat; orice expresie numerică
numarul 2- Neapărat; orice expresie numerică

Note:

Tipul de date al rezultatului este de obicei același cu cel mai precis tip al celor două numere. Ordinea preciziei, de la cel mai mare la cel mai mic, este Byte, Integer, Long, Single, Currency, Double, Decimal. Adevărat, există și excepții:

  • Dacă Single și Long sunt înmulțite, atunci rezultatul este Double
  • Dacă tipul de date rezultat- Long Single sau Date, care nu conține rezultatul expresiei în sine, apoi rezultatul este convertit într-o Variant care conține Double.

Dacă Numărul 1 sau numarul 2

Ordinea preciziei în înmulțire este diferită de cea folosită la adunare și scădere.

Exemplu:

Dim Valoarea mea
MyValue = 2 * 2 " Returnează 4.
MyValue = 459,35 * MyValue " Returnează 495,35 * 4

operator / (diviziune)

Folosit pentru a împărți două numere și a obține un rezultat în virgulă mobilă.

Sintaxă:

rezultat = Numărul 1 / numarul 2

Opțiuni:

rezultat- necesar; orice variabilă numerică
Numărul 1- Neapărat; orice expresie numerică
numarul 2- Neapărat; orice expresie numerică

Note:

Rezultat de obicei de tip Double. Adevărat, există și excepții:

  • Dacă ambele expresii sunt de tip Byte, Integer, Single, atunci rezultatul este Single. Cu toate acestea, dacă dimensiunile expresiei nu se încadrează în domeniul de aplicare a Single, apare o eroare.
  • Dacă ambele expresii de expresie sunt de tip Variant care conține octet, întreg sau unic, atunci rezultatul este o variantă unică. Cu toate acestea, dacă dimensiunile expresiei nu se încadrează în Varianta unică, atunci Varianta dublă.
  • Dacă unul dintre numere este de tip Decimal, atunci rezultatul este Decimal.

Dacă Numărul 1 sau numarul 2- Null, atunci este interpretat simplu ca un 0 obișnuit.

Exemple:

Dim Valoarea mea
Valoarea mea = 10/4" !} Va reveni 2.5.
Valoarea mea = 10/3 " Va reveni 3.333333.

operator \ (diviziunea întregului)

Folosit pentru a împărți două numere și a obține un rezultat întreg.

Sintaxă:

rezultat = Numărul 1 \ numarul 2

Opțiuni:

rezultat- necesar; orice variabilă numerică
Numărul 1- Neapărat; orice expresie numerică
numarul 2- Neapărat; orice expresie numerică

Note:

Înainte de a avea loc o astfel de împărțire, expresiile sunt rotunjite la expresii octeți, întregi sau lungi. În mod obișnuit, tipul de date rezultat este Byte, Varianta de octeți, Integer, Varianta întreg, Varianta lungă sau lungă. Orice parte fracțională este tăiată.

Totuși, dacă oricare dintre expresii este nulă, atunci rezultatul este nul. Orice expresie care conține Gol este interpretată ca 0.

Exemple:

Dim Valoarea mea
Valoarea mea = 11\4" Va reveni 2.
Valoarea mea = 9\3" Va reveni 3.
Valoarea mea = 100\3" Va reveni 33.

Operator mod (diviziune rest)

Folosit pentru a împărți două numere și a obține restul împărțirii lor.

Sintaxă:

rezultat = Numărul 1 Mod numarul 2

Opțiuni:

rezultat- necesar; orice variabilă numerică
Numărul 1- Neapărat; orice expresie numerică
numarul 2- Neapărat; orice expresie numerică

Note:

La împărțire, numerele cu un punct drept sunt rotunjite. De exemplu, rezultatul următoarei expresii este 5:

A=19 Mod 6.7

Ce se petrece aici? Mai întâi, numărul 6,7 este rotunjit la 7. Apoi are loc împărțirea, obținem 2,7.... Restul diviziunii = 5. (2 * 7 = 14, 19 - 14 = 5).

Rezultatul este de obicei de tip Byte, Varianta de octet, Integer, Varianta Integer, Long sau Variant care contine Long.

Dacă oricare dintre expresii este nulă, atunci rezultatul este nul. Orice expresie care conține Gol este interpretată ca 0.

Exemple:

Dim MyResult
MyResult = 10 Mod 5" Va reveni 0.
MyResult = 10 Mod 3" Va reveni 1.
MyResult = 12 Mod 4.3" Va reveni 0.
MyResult = 12.6 Mod 5" Va reveni 3.

operator + (adăugare)

Folosit pentru a adăuga două numere.

Sintaxă:

rezultat = expresie1+expresie2

Opțiuni:

rezultat- necesar; orice variabilă numerică
expresie1
expresie2- Neapărat; orice expresie

Note:

Când utilizați operatorul +, nu puteți determina dacă va avea loc adăugarea sau concatenarea șirurilor. Pentru concatenare, utilizați operatorul & pentru a evita confuzia și pentru a face codul mai lizibil.

Dacă una dintre expresii nu este o Variantă, atunci se aplică următoarele reguli:

  • Dacă ambele expresii sunt de tip numeric (Byte, Boolean, Integer, Long, Single, Double, Date, Currency sau Decimal), atunci acestea sunt adăugate.
  • Dacă ambele expresii șir sunt concatenare.
  • Dacă una dintre expresii este de tip numeric, iar cealaltă este orice valoare Variant, inclusiv Null, atunci are loc adăugarea.
  • Dacă una dintre expresii este un șir și cealaltă este orice valoare Variant, atunci are loc concatenarea.
  • Dacă una dintre expresii conține Gol, atunci este returnată a doua expresie neschimbată.
  • Dacă una dintre expresii este de tip numeric, iar cealaltă este un șir, apare o eroare de nepotrivire tip.
  • Dacă orice expresie este nulă, atunci rezultatul este și nul.

Dacă ambele expresii sunt Variante, atunci se aplică următoarele reguli:

  • Dacă ambele expresii sunt numere, atunci se adună.
  • Dacă ambele expresii sunt șiruri, atunci ele sunt concatenate.
  • Dacă una dintre expresii este un număr, iar cealaltă este un șir, are loc adunarea.

Pentru adăugarea obișnuită, tipul de date al rezultatului este de obicei același cu cel mai precis tip al celor două numere. Ordinea preciziei este Byte, Integer, Long, Single, Double, Currency și Decimal. Exista si exceptii:

  • Dacă sunt adăugate Single și Long, atunci rezultatul este Double
  • Dacă o expresie de tip Date este adăugată cu orice altă expresie, atunci rezultatul este Data.

Dacă una sau ambele expresii sunt nule, atunci rezultatul este și nul. Dacă ambele expresii conțin Gol, rezultatul este Integer. Dacă există doar una, atunci a doua expresie neschimbată este returnată ca rezultat.

Exemple:

Dim MyNumber, Var1, Var2
Numărul meu = 2 + 2 " Va reveni 4.
Numărul meu = 4257,04 + 98112 " Va reveni 102369.04.

Var1 = "34"
Var2 = 6 „Inițializați variabile mixte
MyNumber = Var1 + Var2 " Va reveni 40.

Var1 = "34"
Var2 = "6" „Inițializați variabilele cu șiruri
MyNumber = Var1 + Var2 " Va reveni„346” (a apărut
„concatenare, nu adăugare!).

Sfat:

Operatorul de adăugare (+) poate fi folosit pentru a adăuga date, de ex. Variabile tip dată:

Dim d Ca Data
d = DataSerial(2002, 8, 15) " data initializării 15.08.2002
d = d + 15 „ acum d conține data 30/08/2002
„adică am adăugat 15 zile

operator - (scădere, schimbare de semn)

Folosit pentru a găsi diferența dintre două numere sau, de asemenea, pentru a schimba semnul unei expresii.

Sintaxă:

rezultat = expresie1- expresie2

-expresie

Opțiuni:

rezultat- necesar; orice variabilă numerică
expresie- Neapărat; orice expresie
expresie1- Neapărat; orice expresie
expresie2- Neapărat; orice expresie

Note:

În prima sintaxă, operatorul „-” este necesar pentru a găsi diferența dintre două numere. În a doua sintaxă, „-” este folosit pentru a schimba semnul lui expresii.

Tipul de date al rezultatului este de obicei același cu cel mai precis tip al celor două numere. Ordinea preciziei este Byte, Integer, Long, Single, Double, Currency și Decimal. Exista si exceptii:

  • Dacă tipurile Single și Long sunt implicate în scădere, atunci rezultatul este Double
  • Dacă scăderea folosește o expresie de tipul Date,
    atunci rezultatul este Data.
  • Scăderea a două date dă rezultatul Double.

Dacă una sau ambele expresii sunt nule, atunci rezultatul este și nul. Dacă una dintre expresii este goală, atunci este interpretată ca 0.

Ordinea preciziei adunării și scăderii este diferită de cea folosită la înmulțire.

Exemple:

Dim MyResult
MyResult = 4 - 2 " Va reveni 2.
MyResult = 459,35 - 334,90 " Va reveni 124.45.

Sfat:

Ca și operatorul de adunare, operatorul de scădere poate fi folosit pentru a calcula diferența (în zile) dintre două date:

Dim d1 Ca Data
Dim d2 ca dată
Dim razn As Long
d1 = DataSerial(1983, 10, 14)
d2 = DataSerial(2002, 8, 15)
razn = d2 - d1 „diferență în zile (6880).

Operatori de comparație

Folosit pentru a compara anumite expresii. Au 3 sintaxe:

Sintaxă:

rezultat = expresie1 operator de comparaţie expresie2
rezultat = obiect1 Este obiect2
rezultat = linia Ca probă

Opțiuni:

rezultat necesar; orice variabilă numerică
expresie Neapărat; orice exprimat
operator de comparaţie necesar; orice operator de comparaţie
un obiect necesar; numele oricărui obiect
linia necesar; orice expresie șir.
probă necesar; orice expresie șir sau interval de litere și numere

Note:

Următorul tabel conține o listă de operatori de comparație și condițiile care determină rezultatul unei expresii (adevărat sau fals).

Operator

Adevărat dacă

Fals dacă

Nulă dacă

< (меньше чем) expresie1 <
expresie2
expresie1 >=
expresie2

unu
din
expresia conține Null

<= (меньше или равно) expresie1 <=
expresie2
expresie1 >
expresie2
> (mai mult de) expresie1 >
expresie2
expresie1 <=
expresie2
>= (mai mare sau egal cu) expresie1 >=
expresie2
expresie1 <
expresie2
= (egal) expresie1 =
expresie2
expresie1 <>
expresie2
<>(nu este egal) expresie1 <>
expresie2
expresie1 =
expresie2

Operatorii Is și Like îndeplinesc funcții specifice, iar tabelul lor de comparație este diferit de cel prezentat (le vom analiza mai jos).

Când două expresii sunt comparate, nu este întotdeauna posibil să se determine dacă numerele sau șirurile vor fi comparate. Următoarele arată cum va fi calculat rezultatul dacă ambele expresii sunt de alt tip decât Variant:

  • Dacă ambele expresii sunt numere (Byte, Boolean, Integer, Long, Single, Double, Date, Currency sau Decimal), atunci numerele sunt comparate.
  • Dacă ambele expresii sunt șiruri, atunci are loc o comparație de șiruri. (linia mai mică este cea ale cărei litere prima și următoare au un cod ascii mai mic).
  • Dacă una dintre expresii este un număr, iar cealaltă este o Variantă, care poate fi interpretată ca număr, atunci numerele sunt comparate.
  • Dacă una dintre expresii este un număr, iar cealaltă Variant este un șir care nu poate fi interpretat ca număr, atunci apare o eroare (Tip nepotrivire).
  • Dacă una dintre expresii este un șir, iar cealaltă este orice valoare Variant (chiar nulă), atunci are loc o comparație de șir.
  • Dacă una dintre expresii este goală și cealaltă este un număr, atunci are loc o comparație a numerelor, unde gol este tratat ca 0.
  • Dacă una dintre expresii este goală, iar cealaltă este un șir, atunci are loc o comparație de șiruri, unde Empty este tratată ca șirul gol "".

Dacă atât prima expresie, cât și a doua sunt de tip Variant, atunci expresiile sunt comparate în funcție de tipurile de date pe care le conține Varianta:

  • Dacă ambele expresii Variant conțin numere, atunci numerele sunt comparate.
  • Dacă ambele expresii Variant conțin șiruri, atunci șirurile sunt comparate.
  • Dacă una dintre expresiile Variant conține un număr și cealaltă un șir, atunci expresia numerică este mai mică decât cea șir.
  • Dacă una dintre expresiile Variant este goală, iar cealaltă este un număr, atunci Empty este tratată ca 0.
  • Dacă una dintre expresiile Variant este goală, iar cealaltă este un șir, atunci Empty este tratată ca șirul gol „”.
  • Dacă ambele expresii sunt goale, atunci ele sunt considerate egale.

Când o variabilă Single este comparată cu o dublă, dubla este rotunjită la precizia simplei.

Dacă Currency este comparată cu Single sau Double, atunci Single sau Double este convertită în Currency. De asemenea, atunci când se compară Decimal cu Single sau Double, atunci Single sau Double este convertit în Decimal. Pentru Currency, orice parte fracțională mai mică de .0001 poate fi pierdută. Pentru Decimal, această valoare este 1E-28 sau poate apărea o eroare. Astfel, atunci când partea fracțională este pierdută, expresiile pot fi interpretate ca egale, deși, de fapt, una de cealaltă va fi diferită. (deși cu o cantitate mică).

Exemple:

Dim MyResult, Var1, Var2
Rezultatul meu = (45< 35) " Va reveni Fals.
MyResult = (45 = 45) " Va reveni Adevărat.
Rezultatul meu = (4<> 3) " Va reveni Adevărat.
MyResult = ("5" > "4") " Va reveni Adevărat.

Var1 = "5": Var2 = 4 " în VB puteți folosi două puncte,
„la declarații separate.

MyResult = (Var1 > Var2) " Va reveni Adevărat.

Var1 = 5: Var2 = Gol
MyResult = (Var1 > Var2) " Va reveni Adevărat.

Var1 = 0: Var2 = Gol
MyResult = (Var1 = Var2) " Va reveni Adevărat.

operator de comparație Is

Acest operator este folosit pentru a compara variabile obiect.

Sintaxa acestui operator este dată mai sus.

Note:

Dacă obiect1 și obiect1 se referă la același obiect, atunci rezultatul este Adevărat, dacă nu, atunci Fals. Două variabile se pot referi la același obiect în mai multe moduri. În exemplul următor, A se referă la același obiect cu B:

Setul A = B

Următorul exemplu face ca variabilele A și B să se refere la același obiect - C:

Set A = C
Setați B=C

Exemple:

Dim MyObject, YourObject, ThisObject, _
OtherObject, ThatObject, MyCheck

Setează YourObject = MyObject „creați legături către obiecte
Setați ThisObject = MyObject
Setați ThatObject = OtherObject
MyCheck = YourObject Is ThisObject " Returnează adevărat.
MyCheck = ThatObject Is ThisObject " Returnează fals.
„Presumăm că MyObject<>AltObject
MyCheck = MyObject Is ThatObject " Returnează fals.

operator de comparare a șirurilor - Ca

Operatorul de comparare a șirurilor Like este folosit pentru a compara șirurile.

Sintaxa acestui operator a fost deja discutată mai sus.

Cometariu:

Acest operator poate fi folosit pentru a testa un String pe o mască de tip Pattern. Acesta este un operator foarte puternic, aproape analog expresii obisnuiteîn Perl.

Deci, acest operator funcționează după cum urmează. Dacă șirul se potrivește cu masca, atunci rezultatul este adevărat. Dacă nu - Fals. Dacă una dintre expresii este Null, rezultatul este și Null.

Comportamentul operatorului Like depinde de tipul implicit de comparare a șirurilor. (Opțiune operator Compare).

Dacă tipul este setat la Binary (adică comparație binară), atunci șirurile sunt comparate în funcție de codurile lor Ascii (este diferit în diferite codificări). De obicei, se utilizează următoarea secvență:

A< B < E < Z < a < b < e < z < А < К < Я < а < к < я

Dacă tipul este setat la Text (comparație text). Cu această comparație, secvența diferă de cea anterioară, aici literele mari și mici sunt egale:

(A=a)< (А=а) < (B=b) < (E=e) < (К=к) < (Z=z) < (Я=я)

Cel mai functie principala Operatorul Like este o verificare pentru a vedea dacă un șir aparține unei măști. Următoarele ingrediente speciale pot fi folosite în mască. personaje:

Orice personaj
* Zero sau mai multe caractere
# Orice număr (0–9).
Orice personaj care se încadrează în listă
[!charlist] Orice caracter unic care nu este inclus în lista de caractere

O notă rapidă aici. Pentru a verifica identitatea unui șir de pe o mască care conține o specială. simboluri (adică verificați, de exemplu, dacă șirul conține simbolurile [,?,#,],*), atunci trebuie să concluzionați din paranteza patrata. Nu puteți pune pur și simplu o paranteză separată [ sau ] așa.

Când specificați o listă de caractere, puteți utiliza o liniuță (–). De exemplu, pentru a specifica secvența de la A la Z, trebuie să utilizați o mască. Totul dintre paranteze nu trebuie să conțină niciun delimitator (spații, virgule etc.), altfel vor fi și ele incluse în succesiune.

Există și alte reguli importante atunci când verificați folosind o mască:

  • Semnul (!) de la începutul listei de simboluri indică faptul că trebuie să căutați simboluri care nu sunt incluse în această listă. Dacă trebuie să găsiți semnul în sine!, atunci trebuie să puneți paranteze [!].
  • (–) este folosit pentru a specifica o serie de caractere.
  • Când este specificat un interval de caractere, acesta trebuie să crească în codurile ASCII. Acestea. masca potrivită sau nu.
  • Secvența este interpretată ca șirul gol „”.

Exemple:

Dim MyCheck
MyCheck = „aBBBa” Ca „a*a” „ Returnează adevărat.
MyCheck = "F" La fel ca "" " Returnează adevărat.
MyCheck = „F” Ca „[!A-Z]” „ Returnează fals.
MyCheck = „a2a” La fel ca „a#a” „ Returnează adevărat.
MyCheck = „aM5b” La fel ca „a#[!c-e]” „ Returnează adevărat.
MyCheck = „BAT123khg” La fel ca „B?T*” „ Returnează adevărat.
MyCheck = „CAT123khg” La fel ca „B?T*” „ Returnează fals.

myString = „312T-87GD-8922”

Dacă myString Ca „###-##-####” Apoi...

Operatori de concatenare a șirurilor

De fapt, pentru a concatena șiruri în Visual Basic, puteți folosi doar 2 operatori. Acestea sunt & și +. Operatorul + este descris mai sus. Să vorbim despre operatorul &.

operator de concatenare a șirurilor - &

Folosit pentru a concatena două expresii.

Sintaxă:

rezultat = expresie1 & expresie2

rezultat necesar; Orice variabilă șir sau variantă
expresie1 Neapărat; Orice expresie
expresie2 Neapărat; Orice expresie

Note:

Dacă expresia nu este un șir, atunci este convertită într-o variantă șir. Tipul de date rezultat este String numai atunci când ambele expresii sunt de tip String. În caz contrar, rezultatul este String Variant. Dacă ambele expresii sunt Null, atunci rezultatul este și Null. Totuşi, dacă numai una dintre expresii conţine Valoare nulă, apoi este interpretat ca șirul gol „”. Gol este, de asemenea, interpretat ca șirul gol „”.

Exemple:

Dim MyStr
MyStr = „Bună ziua” și „Lumea”
" Va revenișirul „Hello World”.
MyStr = „Verifică” și 123 și „Verifică”
" Returnează șirul „CHECK 123 CHECK”.

Operatori logici

Acesta este cel mai interesant grup de operatori. Când programați, trebuie să cunoașteți funcționarea și aplicarea acestora (și nu numai în Visual Basic).

Există 6 dintre ele în Visual Basic. Să ne uităm la fiecare operator în detaliu.

Și operator

Folosit pentru a efectua înmulțirea logică pe două expresii.

Sintaxă:

rezultat = expresie1Și expresie2

rezultat
expresie1 Neapărat; Orice expresie
expresie2 Neapărat; Orice expresie

Note:

Următorul tabel arată cum funcționează operatorul și:

Dacă expresia1 =

, iar expresia2 =

Apoi rezultatul =

Adevărat Adevărat Adevărat
Adevărat Fals Fals
Adevărat Nul Nul
Fals Adevărat Fals
Fals Fals Fals
Fals Nul Fals
Nul Adevărat Nul
Nul Fals Fals
Nul Nul Nul

Operatorul și este folosit și pentru a testa biții unui număr. Pentru biți, operatorul și funcționează după cum urmează (văzut de la stânga la dreapta)

0 0 0
0 1 0
1 0 0
1 1 1

Exemple:

Dim A, B, C, D, MyCheck
MyCheck = A > B și B > C " Va reveni Adevărat.
MyCheck = B > A și B > C " Va reveni Fals.
MyCheck = A > B și B > D " Va reveni Nul.
MyCheck = A și B" Va reveni8 (comparație de biți).

Să ne uităm la ultimul exemplu mai detaliat. Numărul 10 este reprezentat ca biți, după cum urmează (ca o tetradă, adică 4 biți):

Și numărul 8 este așa:

Ca rezultat al operatorului Și, conform tabelului de mai sus, obținem:

Acestea. 8. De ce am făcut asta? Am făcut asta pentru a verifica dacă al patrulea bit al numărului A este setat? După ce am primit B, am verificat că acest bit este setat.

Sau operator

Folosit pentru a efectua adăugarea logică a două expresii.

Sintaxă:

rezultat = expresie1 Sau expresie2

rezultat necesar; Orice variabilă numerică (inclusiv booleană).
expresie1 Neapărat; Orice expresie
expresie2 Neapărat; Orice expresie

Note:

Următorul tabel arată cum funcționează operatorul Or:

Dacă expresia1 =

, iar expresia2 =

Apoi rezultatul =

Adevărat Adevărat Adevărat
Adevărat Fals Adevărat
Adevărat Nul Adevărat
Fals Adevărat Adevărat
Fals Fals Fals
Fals Nul Nul
Nul Adevărat Adevărat
Nul Fals Nul
Nul Nul Nul

Operatorul Or este folosit pentru a seta biți specifici unui număr. Pentru biți, operatorul Or funcționează după cum urmează (văzut de la stânga la dreapta)

0 0 0
0 1 1
1 0 1
1 1 1

Rezultatul este evidentiat cu aldine.

Exemple:

Dim A, B, C, D, MyCheck
MyCheck = A > B sau B > C " Va reveni Adevărat.
MyCheck = B > A Sau B > C " Va reveni Adevărat.
MyCheck = A > B sau B > D " Va reveni Adevărat.
MyCheck = B > D sau B > A " Va reveni Nul.
MyCheck=A sau 5" Va reveni 15:

Să ne uităm la ultimul exemplu mai detaliat. Numărul 10 este reprezentat ca biți, după cum urmează (ca o tetradă, adică 4 biți):

Și numărul 5:

Ca urmare a funcționării operatorului Or, conform tabelului de mai sus, obținem:

Acestea. 15. După cum puteți vedea, operatorul Or este foarte ușor și convenabil de utilizat nu numai în expresii de comparație, ci și pentru a seta anumiți biți dintr-un număr.

operator Xor

Folosit pentru a efectua negația logică a două expresii.

Sintaxă:

rezultat = expresie1 Xor expresie2

rezultat necesar; Orice variabilă numerică (inclusiv booleană).
expresie1 Neapărat; Orice expresie
expresie2 Neapărat; Orice expresie

Note:

Următorul tabel arată cum funcționează operatorul Xor:

Operatorul Xor este folosit pentru a inversa anumiți biți ai unui număr. Pentru biți, operatorul Xor funcționează după cum urmează (privit de la stânga la dreapta)

0 0 0
0 1 1
1 0 1
1 1 0

Rezultatul este cu caractere aldine. Xor diferă de Or doar prin faptul că, atunci când ambii biți sunt unul, Xor produce 0. Proprietatea interesantă a operatorului Xor este că atunci când este folosit de două ori, produce același număr. Acesta este adesea folosit în criptografie.

Exemple:

Dim A, B, C, D, MyCheck
A = 10: B = 8: C = 6: D = nul
MyCheck = A > B Xor B > C " Va reveni Fals.
MyCheck = B > A Xor B > C " Va reveni Adevărat.
MyCheck = B > A Xor C > B " Va reveni Fals.
MyCheck = B > D Xor A > B " Va reveni Nul.
MyCheck = A Xor B " Va reveni 2

Un exemplu interesant Operatorul Xor este folosit pentru a schimba valorile a două variabile numerice:

Dim a Cât timp, b Cât timp
a = 4
b = 7
a = a X sau b
b = a X sau b
a = a X sau b

Acum variabila a conține valoarea variabilei b și invers.

Nu operator

Folosit pentru a efectua o inversare logică a două expresii.

Sintaxă:

rezultat=Nu expresie

rezultat necesar; Orice variabilă numerică (inclusiv booleană).
expresie Neapărat; Orice expresie

Note:

Următorul tabel arată cum funcționează operatorul Not:

Operatorul Not inversează toți biții expresii. Pentru biți, operatorul Not funcționează după cum urmează (privit de la stânga la dreapta):

0 1
1 0

Rezultatul este cu caractere aldine.

Exemple:

Dim A, B, C, D, MyCheck
A = 10: B = 8: C = 6: D = nul
MyCheck = Nu (A > B) " Va reveni Fals.
MyCheck = Nu (B > A)" Va reveni Adevărat.
MyCheck = Nu (C > D) " Va reveni Nul.
MyCheck = Not A " Va reveni-11 (toți biții inversați)

Să aruncăm o privire mai atentă la ultimul exemplu. Numărul 10 este reprezentat ca biți, după cum urmează (ca un octet, adică 8 biți):

După ce inversăm toți biții obținem:

Și acesta este -11.

operator Eqv

Folosit pentru a efectua echivalența logică între două expresii.

Sintaxă:

rezultat = expresie1 Eqv expresie2

rezultat necesar; Orice variabilă numerică (inclusiv booleană).
expresie1 Neapărat; Orice expresie
expresie2 Neapărat; Orice expresie

Note:

Următorul tabel arată cum funcționează operatorul Eqv:

Pentru biți, operatorul Eqv funcționează după cum urmează (privit de la stânga la dreapta)

0 0 1
0 1 0
1 0 0
1 1 1

Exemple:

Dim A, B, C, D, MyCheck
A = 10: B = 8: C = 6: D = nul
MyCheck = A > B Eqv B > C " Va reveni Adevărat.
MyCheck = B > A Eqv B > C " Va reveni Fals.
MyCheck = A > B Eqv B > D " Va reveni Nul.
MyCheck = A Eqv B " Va reveni -3

Operator imp

Folosit pentru a efectua implicarea logică a două expresii.

Sintaxă:

rezultat = expresie1 Imp expresie2

rezultat necesar; Orice variabilă numerică (inclusiv booleană).
expresie1 Neapărat; Orice expresie
expresie2 Neapărat; Orice expresie

Note:

Următorul tabel arată cum funcționează operatorul Imp:

Dacă expresia1 =

, iar expresia2 =

Apoi rezultatul =

Adevărat Adevărat Adevărat
Adevărat Fals Fals
Adevărat Nul Nul
Fals Adevărat Adevărat
Fals Fals Adevărat
Fals Nul Adevărat
Nul Adevărat Adevărat
Nul Fals Nul
Nul Nul Nul

Pentru biți, operatorul Imp funcționează după cum urmează (privit de la stânga la dreapta)

0 0 1
0 1 1
1 0 0
1 1 1

Exemple:

Dim A, B, C, D, MyCheck
A = 10: B = 8: C = 6: D = nul
MyCheck = A > B Imp B > C " Va reveni Adevărat.
MyCheck = A > B Imp C > B " Va reveni Fals.
MyCheck = B > A Imp C > B " Va reveni Adevărat.
MyCheck = B > A Imp C > D " Va reveni Adevărat.
MyCheck = C > D Imp B > A " Va reveni Nul.
MyCheck = B Imp A " Returnează -1