Avaldiste struktuur ja liigid
Avaldis määrab, mis tehted (operatsioonid) ja millises järjekorras on vaja 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 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 nimede abil, struktuurmuutujate elementide esitus sõltub andmekogumiku liigist (massiiv, kirje jmt).
Objekti omadus esitatakse alati koos viitega objektile kujul:
objekt.omadus,
kus omadus näidatakse vastava nime abil: Value, Left, Top, Address jne. Vaikimisi võetav omadus võib puududa, näiteks omadus Value Range‑objektil.
Funktsiooniviide esitatakse kujul:
nimi (argument {, argument })
kus nimi on VBA sisefunktsiooni või kasutajafunktsiooni nimi (Sin, Sqr, CDbl, Pos_Kesk, Kolm_Pind jmt). VBA funktsioonide nimed ei kuulu reserveeritud võtmesõnade hulka, kuid muuks otstarbeks neid kasutada ei ole mõistlik, sest see võib tekitada segadust. Funktsiooniviites esinevad argumendid näitavad funktsioonile edastatavaid väärtusi. 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 Not, And, Or
Ü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äärtus 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 = 641/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 |
Teisendusfunktsioonid |
Funktsioon |
Selgitus. a – arv- või tekstavaldis |
Asc(a) |
Esimese märgi ASCII-kood. Asc(“Abi“) = 65, Asc(1) = 48 |
CDbl(a) |
Teisendus topelttäpsusega realarvuks. | a | < 10^307 |
CInt(a) |
Teisendus täisarvuks. -32768 ≤ a ≤ 32767. Ümardatakse |
CLng(a) |
Teisendus pikaks täisarvuks. -2^31 ≤ a ≤ 2^31 |
CSng(a) |
Teisendus ühekordse täpsusega reaalarvuks. | a | < 10^37 |
CStr(a) |
Teisendus stringiks |
CVar(a) |
Teisendus Variant tüüpi |
Val(a) |
Teksti teisendus arvuks. Murdosa jäetakse ära |
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 |
Round(a [, mp]) |
Ümardab väärtuse mp numbrikohani murdosas |
Format(a, for) |
Arvu teisendamine etteantud vormingusse. for – vorming. Peamine variant “0.0{0}“. Võimaldab määrata murdosa pikkuse: Format(45.67375, "0.000") = > 45.674 |
Stringaaldivsed 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" annab Peeter Kask,
35.7 & " " & 2.5 annab 35.7 2.5
Kui S=5378.75, x1=2.538, x2=-1.34, siis
"Summa= " & S annab 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 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.
UCase(S)=VISUAL BASIC |
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) |
Eemaldavad 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. Murdosa jäetakse ära |
Str(s) |
Teisendab arvu stringiks Str(3.14159*r*r) |
Format(a, for) |
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õrdlused on käsitletavad loogikaavaldiste erijuhtudena, nende 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. 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*x + y*y > r*r, 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"
Mõned loogikafuktsioonid |
IsDate(a) |
Tõene, kui argument (a) on kuupäev |
IsEmpty(a) |
Tõene, kui argumendi väärtus on tühi |
IsMissing(param) |
Tõene, kui parameeter puudub |
IsNumeric(a) |
Tõene, kui avaldise väärtus on arv |
IsObject(a) |
Tõene, kui argumendiks on objekt |
Ajaavaldised ja ajafunktsioonid
Kuna ajaväärtused on salvestatud lihtsalt reaalarvudena: täisosa - päeva järjenumber alates baasajast (01:01:1900), murdosa - kellaaeg keskööst päeva osades, saab nendega täita põhimõtteliselt suvalisi operatsioone, kuid praktilist tähendust omavad ainult mõned:
aeg2 - aeg1
kuupäev2 - kuupäev1
kellaaeg2 - kellaaeg1
kuupäev + arv
kuupäev - arv
jooksev aeg - algaeg
|
NOW() - #01/01/2000#
Date() - sünniaeg
finaeg - startaeg
Date() + 100
Date() - 100 Timer() – algaeg |
Ajaväärtus üldjuhul koosneb kahest osast: kuupäev ja kellaaeg. Kahe ajaväärtuse (näiteks vahe on arv, mille täisosa on päevade arv kahe ajaväärtuse vahel, murdosa kellaaeg päeva osades. Kahe kuupäeva vahe saadakse päevades.
Mõned ajafuktsioonid |
Now() |
Jooksev aeg arvutis kujul: pp.kk.aaaa hh:mm:ss |
Date() |
Jooksev kuupäev kujul: pp.kk.aaaa |
Time() |
Jooksev kellaaeg kujul hh:mm:ss |
Timer() |
Keskööst möödunud aeg sekundites täpsusega 0,01 sek |
Year(aeg) |
Aasta number ajaväärtuses |
Month(aeg) |
Kuu number ajaväärtuses |
Day(aeg) |
Kuu number ajaväärtuses |
Hour(aeg) |
Tunnid ajaväärtuses |
Minute(aeg) |
Minutid ajaväärtuses |
Second(aeg) |
Sekundid ajaväärtuses |
DateSerial(a, k, p) |
Teeb kuupäeva aasta (a), kuu (k) ja päeva (p) alusel |
TimeSerial(h, m, s) |
Teeb kellaja tundide (h), minutite (m) ja sekundite (s) alusel |
|