Avaldised

Avaldiste struktuur ja liigid

Avaldis määrab, mis tehted (operatsioonid) millises järjekorras väärtuse leidmiseks täita. Üldjuhul koosneb avaldis operandidest, tehtesümbolitest ja ümarsulgudest. Erijuhul võib avaldis koosneda ainult ühest operandist.

Operandideks võivad olla konstandid, lihtmuutujad, objektide omadused, struktuurmuutujate (massiivid, kirjed) elemendid ja funktsiooniviidad. Nimeta konstandi väärtus (arv, string jm) esitatakse otse avaldises. Nimega konstant deklareeritakse lausega Const ning avaldises kasutatakse selle nime. Lihtmuutujad esitatakse samuti nimede abil, struktuurmuutujate elementide esitus sõltub andmekogumiku liigist (massiiv, kirje jmt). Funktsiooniviide esitatakse kujul

nimi ( argument { , argument } )

kus nimi on VBA sisefunktsiooni või kasutajafunktsiooni nimi. VBA funktsioonide nimed kuuluvad reserveeritud võtmesõnade hulka ning muuks otstarbeks neid kasutada ei tohi. Funktsiooniviites esinev argument näitab funktsioonile edastatavat väärtust. Argumendid võivad olla esitatud avaldiste abil. Argumentide arv, tüüp ja esitusjärjekord sõltuvad konkreetsest funktsioonist.

Tehted jagunevad nelja rühma:

•  aritmeetikatehted: ^ , * , / , \ , Mod , + , -

•  stringitehe & või +

•  võrdlustehted: = , <> , < , <= , > , >=

•  loogikatehted: And, Or, Not

Üldjuhul võivad avaldises esineda tehted kõikidest liikidest. Avaldise väärtuse leidmisel arvestatakse tehete prioriteete liikide vahel ning aritmeetika- ja loogikatehete puhul ka liigi sees. Tehete liigid on siin toodud prioriteetide kahanemise järjekorras. Aritmeetika- ja loogikatehete prioriteedid kahanevad vasakult paremale.
Avaldises a + b > c And a + c > b And b + c > a esinevad aritmeetika-, võrdlus- ja loogikatehted. Väärtuse leidmisel täidetakse kõigepealt aritmeetika-, siis võrdlus- ning lõpuks loogikatehted.

Tehete järjekorra muutmiseks võib kasutada ümarsulge. Sulgudes asuva avaldise väär­tus leitakse eraldi. Ümarsulgudes esitatakse ka funktsiooniviidete argumendid.

Sõltuvalt andmete liigist ning kasutatavatest tehetest ja leitava väärtuse liigist võib avaldised jagada järgmistesse rühmadesse: arvavaldised , stringavaldised ja loogikaavaldised .

Arvavaldised ja matemaatikafunktsioonid

Arvavaldiste operandide väärtusteks on arvud ning neis kasutatakse aritmeetikatehteid ning funktsioone, mis tagastavad arvväärtusi. Aritmeetikatehted ja nende prioriteedid on järgmised.

Prioriteet
Tehtesümbol
 Selgitus
1 ^  Astendamine a^n
2 -  Unaarne miinus -a * -b + c
3 * ja /  Korrutamine ja jagamine a * b, a / b
4 \  Jagatise täisosa a \ b, 13 \ 5= 2
5 Mod  Jagatise jääk a Mod b, 13 Mod 5 = 3
6 + ja -  Liitmine ja lahutamine a + b, a - b

Tehete prioriteetide rakendamise näiteid

-3^2*5+18/2*3 = -9*5+9*3 = -45+27 = -18,
(-3)^2*5+18/(2*3)=9*5+18/6= 48 4^3^2 = 64^2 = 4096;
64^1/3 = (64^1) /3 = 64/3; 64^(1/3) = 4

Võrreldes Exceliga on VBAs suhteliselt väike arv matemaatikafunktsioone. Puuduvad näiteks sellised sageli kasutatavad funktsioonid nagu kümnendlogaritm, arkussiinus ja arkuskoosinus.

Matemaatikafunktsioonid
 Funktsioon  Selgitus
 Sqr(a)  Ruutjuur Sqr (b^2 - 4*a*c) = (b^2 - 4*a*c)^(1/2)
 Log(a)  Naturaallogaritm (ln a) Log (a) / Log (10) = log 10 a
 Exp(a)  e^a (e = 2,71828…) ( Exp (-x) + Exp (2 * x)) / 2 = (e -x + e 2x ) / 2
 Abs(a)  Absoluutväärtus Abs ((a-x)/(a+x))
 Sin(a), Cos(a),  Tan(a)  Argument radiaanides Sin (x) + Cos (2*x) + Tan (x^2) - Cos (2*x)^2 =
 sin x + cos 2x + tan x 2 - cos 2 2x
 Atn(a)  arctan radiaanides (- p /2<x< p /2). Atn (a/Sqr(1-a^2))=
 arcsin a 2* Atn (1) - Atn (a/Sqr(1-a^2)) = arccos a. 4* Atn (1) = pi
 Int(a)  Lähim täisarv, mis on väiksem kui a Int (4.9)=4, Int (-4.9)=-5
 Fix(a)  Arvu täisosa Fix (4.9) = 4 Fix (-4.9) = -4
 Sgn(a)  Arvu märk Sgn (5)=1, Sgn (0)=0 (a=0), Sgn (-5)= -1 (a<0)
 Rnd()  Juhuslik arv x: 0 <= x < 1. n= Int ((b-a+1)* Rnd ()+a) - täisarv  vahemikus a <= n <= b

Stringavaldised ja funktsioonid

Stringavaldiste operandide väärtuseks on stringid, neis võib kasutada stringitehet ja stringifunktsioone.
Stringitehet & nimetataks sidurdamiseks. See võimaldab ühendada stringe ja ka arve. Sidurdamisel käsitletakse arve stringidena. Sidurdustehte sümbolina võib kasutada ka märki " + ", kuid see pole soovitav.

Näiteid
"Peeter" & " " & "Kask" => Peeter Kask , 35.7 & " " & 2.5 => 35.7 2.5
Kui S=5378.75, x1=2.538, x2=-1.34,
siis "Summa=" & S => Summa=5378.75,
" x1=" & x1 & " x2=" & x2 => x1=2.538 x2=-1.34

Stringifunktsioonid (s - stringiavaldis) Näidetes S=Visual Basic
 Left(s, n)  Eraldab stringist n vasakpoolset märki Left (S,6)=Visual
 Right(s, n)  Eraldab stringist n parempoolset märki Right (S,5)=Basic
 Mid(s, m, n)  Eraldab n märki alates märgist m Mid (S,8,3)=Bas
 Len(s)  Leiab stringi pikkuse Len (S) = 12
 InStr([ n, ] s1, s2 )  Leiab positsiooni, millest algab string s2 stringis s1. n näitab  otsingu algust, vaikimisi 1. InStr (S, “a”) = 5.
 Ucase(s)  Muudab väiketähed suurtähtedeks
 Lcase(s)  Muudab suurtähed väiketähtedeks LCase (S)=visual basic
 Space(n)  Moodustab n tühikust koosneva stringi Space (80)
 String(n, märk)  Moodustab stringi, mis sisalda n näidatud märki
 Ltrim(s), Rtrim(s),  Trim(s)  Eemaldab tühikut vastavalt stringi algusest, lõpust ning  lõpust ja algusest Trim ( Inputbox ("Sisestage nimi"))
 Chr(kood)  ASCII koodile vastav märk Chr (65) = A
 Asc(s)  Esimesele märgile vastav ASCII kood Asc ("A") = 65
 Val(s)  Teisendab stringi arvuks
 Str(s)  Teisendab arvu stringiks Str (3.14159*r*r)
 Format(v, formaat)  Teisendab väärtuse etteantud formaadiga tekstiks
 Format (34.36732,"0.00") => 34.37

Operatsioonideks stringidega kasutatakse ka mõningaid erilauseid:

Mid ( s1, m[, n]) = s2
Asendab stringis s1 n märki, alates positsioonist m, märkidega stringist s2. Kui n puudub, kasutatakse stringi s2 tervikuna.

LSet s1 = s2
Salvestab stringi s2 stringi s1 algusesse (vasakule).

RSet s1 = s2
Salvestab stringi s2 stringi s1 lõppu (paremale).

Võrdlused ja loogikaavaldised

Võrdlus on loogikaavaldise erijuhtut, selle kuju on järgmine:

avaldis1 tehtesümbol avaldis2

tehtesümbolid on järgmised: = , <> , < , <= , > , >=

Avaldised: avaldis1 ja avaldis2, on arv- või stringavaldised. Ühes võrdluses esinevad avaldised peavad kuuluma samasse liiki.
NB! Võrdluses võib olla ainult üks tehtesümbol.
Võrdluse tulemiks on alati tõeväärtus True (tõene) või False (väär).

Võrdluste näiteid

x <= 0,  b * b - 4 * a * c < 0,   x^2+ y^2 > r^2,   Ucase (vastus) = "EI" 

NB! Stringide võrdlemisel eristatakse suur- ja väiketähti!

Loogikaavaldise üldkuju on järgmine:

avaldis LTS avaldis { LTS avaldis }

Siin on avaldis võrdlus või loogikaavaldis ja LTS loogikatehte sümbol. Peamised loogikatehted on Or, And ja Not. Nende tähendused on

Or - või. Tehte a Or b väärtus on tõene (True), kui vähemalt ühe operandi väärtus on tõene, vastupidisel juhul on tulem väär (False).

And - ja. Tehte a And b tulem on tõene (True) ainult siis, kui mõlema operandi väärtused on tõesed, vastupidisel juhul on tehte tulem väär (False).

Not - mitte. Tehte Not a tulem on tõene (True) siis, kui a väärtus on väär (False) ja väär (False) vastupidisel juhul.

Loogikaavaldiste näiteid

x >= 2 And x <= 13, x < 2 Or x >13 , a+b > c And a+c > b And b+c > a

sugu = 1 Or UCase (sugu) = "N" Or Ucase (Trim (sugu)) = "NAINE"