excel vba
DESCRIPTION
upustvo basic exscelTRANSCRIPT
1
Osnove programiranja u Excel/VBA
1. Pristupanje VB Editoru
Excel aplikacija se sastoji od dva odvojena ali povezana okruženja:
- okruženje radne knjige koja se sastoji od radnih listova, grafika itd. i
- VBA okruženja koje omogućava pisanje programa koji su u interakciji da
radnom knjigom.
Podaci i informacije se mogu prenositi sa Excela na VBA i obrnuto.
VBA okruženje je tzv. Visual Basic Editor (VBE). Da bi se pristupilo VBA
okruženju koriste se jedna od ponuđenih opcija:
1. Otvorite jednu novu radnu knjigu u Excelu i upotrijebite kombinaciju tipki
[Alt+F11]
2. Aktivirajne alatnu traku Developer→Visual Basic (slika 1.)
Slika 1. Pristupanje VB editoru.
Ulaskom u okruženje VBA pojavljuje se prozor sličan prozoru prikazanom na slici
3. Okruženje sadrži nekoliko bitnih elemenata. Kao i kod svake Windows
aplikacije ima se meni (Menu) sa opcijama i standardna alatna traka.
Prozor u lijevoj gorjoj strani se naziva Project Explorer. Njegova svrha je da
programeru omogući istraživanje svih otvorenih projekata i njohovih komponenti,
i radi na sličan način kao i Windows Explorer.
2
Slika 2. VBA okruženje
2. Procedure
VBA kod pisan u Visual Basic Editor-u je ounačen kao procedure. Svaka procedura
predstavlja kolekciju izjava, koje izvršavaju jedan ili više zadataka.
Dva su najčešće korištena tipa procedura:
- Potprogrami
- Funkcije
Osnovna razlika između njih je u tome što funkcije mogu vratiti neku vrijednost
procesu koji ih je pozvao (modul ili Excel-ov radni list).
Potprogrami. U opštem slučaju, sintaksa potprograma izgleda ovako:
Sub ImePotprograma ( (parametri) )
[naredbe]
End Sub
Za potrebe svakog potprograma možete, ali i ne morate, deklarisati parametre.
Ako definišete neki parametar svaka procedura koja poziva taj potprogram moraće
da isporuči vrijednost tih parametara.
Ovo je najjednostavniji način kako možete deklarisati jedan potprogram. Na
osnovu toga možete kreirati svoj prvi kompletan program, koji će se zvati
3
MojPrviProgram i koji će imati samo jednu liniju teksta (naredbu) da ispiše niz
karaktera.
Sub MojPrviProgram()
Debug.Print "ovo je moj prvi potprogram"
End Sub
Ovaj potprogram slobodno možete i praktično isprobati:
3. Otvorite jednu novu radnu knjigu u Excelu.
4. Upotrijebite prečicu Alt+F11, kako biste otvorili VBE editor
5. Sa menija odaberite komandu Insert→Module.
6. Unesite prikazani kod
7. Pokrenite izvršavanje (Run) programskog koda, tako što ćete pritisnuti F5
Funkcije predstavljaju korak naprijed u odnosu na potprograme, jer omogućavaju
povratak određene vrijednosto proceduri iz koje je funkcija pozvana. Funkcije se
pored toga mogu koristiti za kreiranje tzv. korisnični definiranih (user-
defined) funkcija, koje se mogu koristiti poput običnih Excel-ovih funkcija kao
šro su LN(), EXP() i dr. U opštem slučaju funkcije imaju slijedeću sintaksu.
Function ImeFunkcije ((parametri)) [As TipPodatka]
[naredbe]
ImeFunkcije=Rezultati
End Function
Treba obratiti pažnju na razlike sintakse funkcija, i sintakse koja se koristi
za deklarianje potprograma. Kao prvo, umjesto ključne riječi Sub, kod funkcija
se upotrebljava ključna riječ Function. Drugo, opcija [As TipPodatka] označava
mjesto na kome treba definisati tip podataka izlazne vrijednosti funkcije.
Uglasta zagrada ukazuje na činjenicu da definisanje tipa izlazne vrijednosti
nije obavezno, ali je poželjno jer će programski kod biti čitljiviji i jasnije
odražavati namjene programa koji pišete. Poslijednja razlika između potprograma
i funkcija sastoji se u tome da negdje unutar funkcije njenu izlaznu vrijednost
morate dodijeliti nazivu same funkcije.
4
3. Varijable
Programski kod se obično sastoji od promjenjljivih (varijabli), operatora i
izjava. Varijable predstavljaju osnovne elemente svake aplikacije. Konceptualno,
vaarijable predstavljaju stavke ili objekte, koje programski kod obrađuje. Npr.,
varijabla može biti bilo koji broj nad kojim je potrebno izvršiti matematičke
operacije, string koji je potrebno editovati, neki radni list itd.
Varijable se koriste za označavanje mjesta u memoriji računara gdje mogu
biti pohranjeni podaci. Svaka varijabla ima ime koje određuje programer.
Programer također odlučuje koji tip podataka je dodijeljen varijabli. Npr., ako
varijabla pohranjuje, recimo, Ime i Prezime neke osobe, onda nije poželjeno da
se deklariše kao cjelobrojni tip, ali se to može uraditi za broj godina osobe
kao npr. 32 ili 45.
Svaka varijabla pripada određenom tipu. Tip varijable odabire programer u
procesu koji de naziva deklaracija ili definisanje varijable. Varijabla se može
zamisliti kao kutija unutar memorije računara kao što je prikazano u tabeli 1.
Tabela 1. Informacije sadržane u
definiciji varijabli.
IME Broj_godina
TIP PODATAKA Integer
(cjelobrojni)
VRIJEDNOST 32
Tabela pokazuje da je varijabla, imenovana kao Broj_godina, deklarisana kao
cjelobrojni tip (Integer), i varijabla sadrži broj 32.
Kada se ime dodijeli varijabli, programer treba da odluči koji će tip podataka
podijeliti varijabli, što određuje tip podataka koje varijabla može poprimiti.
Npr., ako deklarišemo varijablu koja će pohranjivati broj godina neke osobe,
najbolje bi bilo da se varijabli dodijeli tip Integer. Varijabla koja pohranjuje
niz karaktera ili tekstualne podatke kao šro je recimo adresa prebivališta takva
varijabla će se deklarisati kao String. Postoji nekoliko tipova podataka
dostupni u VBA i oni su prikazani u tabeli 2.
Varijabli se može dati bilo koje ime ukoliko su zadovoljena slijedeća pravila:
- Ime varijable treba početi za slovom alfabeta
- Ime varijable ne smije biti veće dužine od 256 karaktera
- Ime varijable me smije biti isto kao ime procedure, karakteristike,
funkcije ili rezervisane riječi
5
- Ime varijable ne smije sadržavati razmak (space) ili tačku
- Nije dozvoljeno koristiti slijedeće karaktere (%, $, #, !, &)
Prilikom imenovanja varijabli moožete koristiti velika imi mala slova (VBA ne
razlikuje velika i mala slova).
Varijable se definišu/deklarišu koristeći slijedeću sintaksu:
Dim ImeVarijable As TipPodataka
Prilikom deklarisanja ili kreiranja neke varijable, najbolje je da najprije
razmislite o tome koji tip podataka će u njoj biti smješten, pa da tek onda
kreirate varijablu sa odgovarajućim tipom podataka. Ukoliko niste sigurni koji
će tip podataka meka varijablasadržati mežete je deklarisati kao varijantnu
varijablu, što je specijalna vrsta varijabli, koje u sebi mogu sadržavati
podatke bilo kojeg tipa. U tabeli 2 prikazani su najčešće korišteni tipovi
podataka.
Tabela 2. Tipovi podataka
Tip podataka Opseg vrijednosti Iskorištenost
memorije
Byte 0-255 1 bajt
Boolean True ili False (tačno ili netačno) 2 bajta
Date Svi datumi od 1.januara 100.godine do 31.
Decembra 9999.godine i vrijeme od 0:00:00 do
23:59:59
8 bajta
Integer Od -32 768 do 32 767 2 bajta
Long Od -2 147 483 648 do 2 147 483 647 4 bajta
Single Od -3.402823e38 do -1.401298e-45 za negativne
vrijednosti
Od 1.401298e-45 do 3.402823e38 za pozitivne
vrijednosti
4 bajta
Double Od -1.79769313486231E308 do -4.940656458421247e-
324
Od 4.940656458421247e-324 do
1.79769313486231E308
8 bajta
String Stringovi promjenjljive dužine mogu sadržavati do
2 milijarde karaktera
varira
6
Boolean Podaci tipa Boolean najčešće se upotrebljavaju u implementaciji
logičkih zakonitosti u programski kod.
Integer Cjelobrojne promjenjljive predstavljaju najčešće korišteni tip
podataka. Najčešće se upotrebljavaju u kombinaciji sa For..Next
izjavama, brojačkim petljama itd.
Long Ukoliko cjelobrojne vrijednosti tipa Integer nisu dovoljne,
koristi se tip podataka Long, koji je „stariji brat“ tipa Integer.
Double Najčešće se koristi uimlementaciji funkcija pomoću kojih se
izračunava neka vrijednost.
Slijedeći primjeri pokazuju način na koji se varijable deklarišu u VBA
procedurama. Varijable se obično deklarišu prije izjava koje izvršavaju
manipulacije sa varijablama.
Dim Ime As String 'ime studenta deklarisano kao niz karaktera
Dim Godina As Integer 'broj godina deklarisan kao cjelobrojni tip
Dim Brzina As Double 'brzina kretanja automobila deklarisana kao broj sa
decimalnim zarezom
Naime, VBA omogućava da sa programiranjem počnete veoma jednostavno, i bez
razumjevanja koncepta deklaracije i upotrebe varijabli. Za razliku od većine
programskih jezika, u VBA je radi upotrebe neke varijable dovoljno samo da u
programskom kodu navedete njeno ime (pod uslovom da ne koristite opciju Option
Explicit). Ovaj postupak je poznat ako imlicitno deklarisanje varijabli. Npr.
Ispod je prikaza veoma jednostavan potprogram koji vrši sabiranje dvije
cjelobrojne varijable x i y i varijabli z dodjeljuje vrijednost zbira:
Sub suma () Sub suma ()
x=2:y=5 Dim x As Integer, y As Integer, z As Integer
z=x+y x=2: y=5
Debug.Print z z=x+y: Debug.Print z
End Sub End Sub
Kao što možete i sami primijetiti varijable x, y i z u prvom slučaju nisu
prethodno deklarisane.
Deklarisanje varijable se, konceprualno, može shvatiti kao iskazivanje namjere
da neku variablu kasnije upotrijebite. Priliom izvršavanja programskog koda u
memoriji računara će biti rezervisan odgovarajući prostor, koji će Vaš program
moći da poziva korištenjem imena varijable. Osim toga, prilikom definisanja
7
varijable treba definisati i tip podatka koji su u tu varijablu može smjestiti.
Na prvi pogled, može se učiniti da mogućnost korištenja varijabli bez njihovog
prethodnog deklarisanja predstavlja veliku prednost. Da, to je istina, ali sa
male procedure sa nekolicinom linija programskog koda. Iako se na ovaj način
korisnici jednostavnije uvode u tajne programiranja, postoji realna mogućnost da
ćete prilikom pisanja programskog koda nehotice unijeti vizuelno neprimjetne ali
programski veoma značajne graške. Deklarisanjem varijabli te je greške moguće
znatno brže uklonuti.
Dodjeljivanje vrijednosti varijablama. Deklaracija varijabli nam govori koji tip
podataka je pohranjen u njoj, a svrha kreiranja varijabli je storiranje
vrijednosti u varijable. U narednom tekstu je pokazano kako se vrijednosti mogu
dodjeljivati varijablama. Slijedeći primjeri pokazuju na koji način vse
arijablama različitog tipa mogu dodijeliti vrijednosti. Primijetite da se
stringovi (nizovi karaktera stavljaju pod ''znake navodnika'' a datumi između
#rešetki#. Vrijednosti Boolean varijablama primaju vrijednost True ili False.
Ime_Varijable=Vrijednost
Broj_bodova=88
Naziv_grada=''New York''
Zadnji_rok=# 24 Aug 2010#
Kamata=0.075
x=1
x=x+1
Varijabli se mogu dodjeljivati i vrijednosti storirane u ćelijama radnog lista
u Excel-u, npr.
Ime_Varijable=Range(''A1'') ili
Ime_Varijable=Cells(1,1)
pri čemu sintaksa Cells metode izgleda uopšteno kao Cells(red,kolona). Naravno
to se odnosi na redni broj reda i kolone.
Ponekad je zgodno imenovati neku vrijednost koja se koristi prilikom pisanja
potprograma ili funkcije kao konstantnu vrijednost.
Npr., brzina svjetlosti ima konstantnu vrijednost 300000 km/s. Ako pišemo
proceduru koja se poziva na brzinu svjetlosti imenovali bi je na isti način kao
što imenujemo varijable. Međutim, razlikovat će se od varijabli zato što ima
konstantu vrijednost. U tu svrhu meže se koristiti sintaksa napisana ispod:
Const ImeKonstante As TipPodatka=Vrijednost
Const Brzina_svjetlosti As Integer=300000
Const pi As Single=3.14
8
4. Operatori
Operatori imaju važnu ulogu u VBA. Osim operatora dodjeljivanja vrijednosti (=),
VBA i ostale bitne operatore, kako je prikazano u tabeli 3.
Tabela 3. Operatori u VBA
Funkcija Simbol
Sabiranje +
Množenje *
Dijeljenje /
Oduzimanje -
Eksponent ^
Sastavljanje stringova &
Dijeljenje cjelobrojnih
vrijednosti
\
VBA pruža i niz logičkih operatora, kao što je prikazano u tabeli 4.
Tabela 4. Logiči operatori u VBA
Operator Šta operator radi
Not Logička negacija izraza
And Logička konjukcija dva izraza
Or Logička disjunkcija dva izraza
XoR Logičko isključivanje dva izraza
Eqv Logička ekvivalencija dva izraza
Imp Logička implikacija dva izraza
Osnovne matematičke funkcije u VBA. U VBA je ugrađen i određeni broj osnovnih
matematičkih funkcija, a neke od njih su date u tabeli 5:
Funkcija VBA
Eksponencijalna Exp(x)
Logaritamska (baza e) Log(x)
Logaritamska (baza10) Log(x)/log(10)
Kvadratni korijen Sqr()
Sinus Sin(x)
Cosinus Cos(x)
Apsolutna vrijednost Abs(x)
Tangens ugla Tan(x)
Arcus Tangens Atn(x)
9
5. Primjeri kreiranja procedura
Primjer 5.1. Kreirati podprogram pod nazivom volumen koji računa volumen
tekućine u sfernom rezervoaru prema jednačini:
3
)3(2
hrhV
pri čemu je: V- volumeni tekućine u rezervoaru (m3); r- radijus sfere (m) i h-
nivo tekućine u rezervoaru (m). Varijablama h i r dodijeliti vrijednosti koje su
pohranjene u ćelijama B1 i B2 aktivnog radnog lista. Rezultate za vrijednost
volumena ispisivati u ćeliji B4 aktivnog radnog lista.
Korak 1: Deklarisati proceduru Sub pod nazivom volumen
Sub volumen ()
Korak 2: Deklarisati varijable (dati im ime i odrediti tip podatka)
Dim V As Double
Dim h As Double
Dim r As Double
Ili
Dim V As Double, h As Double, r As Double
Korak 3: Deklarisati konstantu pi
Const pi As Single=3.14
Konstanta se može deklarisati i kao varijabla
Dim pi As Single
Kokrak 4: Dodijeliti vrijednosti varijablama (nivo tekućine ima vrijednost
storiranu u ćeliji B1 u aktivnom radnom listu a radijus u ćeliji
B2.
h=Range(''B1'')
r=Range(''B2'')
Korak 5: Dodjeljivanje vrijednosti varijabli V (vrijednost matematičkog
izraza)
V=pi*(h^2)*(3*r-h)/3
Korak 6: Ispisivati rezultate u ćeliji B4 aktivnog radnog lista
Range(''B4'')=V
Korak 7: Kraj procedure
End Sub
10
Sub volumen ()
'deklaracija varijabli V, h, r kao Double tip podatka
Dim V As Double, h As Double, r As Double
'deklaracija konstante pi
Const pi As Single=3.14
'dodjeljivanje vrijednosti varijablama h i r i V
h=Range(''B1'')
r=Range(''B2'')
V=pi*(h^2)*(3*r-h)/3
'ispisivanje rezultata
Range(''B4'')=V
End Sub
Primjer 5.2. Kreirati funkciju pod nazivom volumen_tekucine koja vraća
vrijednost volumena iz prethodnog primjera. Parametri funkcije su nivo tekućine
i radijus sfere.
Function volumen_tekucine (h As Double, r As Double) As Double
'deklaracija konstante pi
Const pi As Single=3.14 'konstanta pi se može deklarisati i kao
varijabla
'dodjeljivanje imenu funkcije vrijednosti koju funkcija vraća
volumen_tekucine=pi*(h^2)*(3*r-h)/3
End Function
Primjer 5.3. Kreirati podprogram pod nazivom protok koji računa volumni protok
fluida u cjevovodu prema jednačini:
vd
V
4
2
pri čemu je: V- volumni protok fluida u rezervoaru (m3/s); d- dijametar cjevovoda
(m) i v- brzina strujanja fluida (m/s). Varijablama d i v dodijeliti vrijednosti
koje su pohranjene u ćelijama B1 i B2 aktivnog radnog lista. Rezultate za
vrijednost volumenog protoka ispisivati u ćeliji B4 aktivnog radnog lista.
Korak 1: Deklarisati proceduru Sub pod nazivom protok
Sub protok ()
Korak 2: Deklarisati varijable (dati im ime i odrediti tip podatka)
Dim V As Double
11
Dim d As Double
Dim brzina As Double
Ili
Dim V As Double, d As Double, brzina As Double
Korak 3: Deklarisati konstantu pi
Const pi As Single=3.14
Konstanta se može deklarisati i kao varijabla
Dim pi As Single
Kokrak 4: Dodijeliti vrijednosti varijablama
d=Range(''B1'')
brzina=Range(''B2'')
Korak 5: Dodjeljivanje vrijednosti varijabli V (vrijednost matematičkog
izraza)
V= (d^2)*pi*brzina/4
Korak 6: Ispisivati rezultate u ćeliji B4 aktivnog radnog lista
Range(''B4'')=V
Korak 7: Kraj procedure
End Sub
Sub protok ()
'deklaracija varijabli V, d, brzina kao Double tip podatka
Dim V As Double, d As Double, brzina As Double
'deklaracija konstante pi
Const pi As Single=3.14
'dodjeljivanje vrijednosti varijablama d, brzina i V
d=Range(''B1'')
brzina=Range(''B2'')
V= (d^2)*pi*brzina/4
'ispisivanje rezultata
Range(''B4'')=V
End Sub
12
Primjer 5.4. Kreirati funkciju pod nazivom protok_fluida koja vraća vrijednost
volumnog protoka iz prethodnog primjera. Parametri funkcije dijametar cjevovoda
i brzina strujanja fluida.
Function protok_fluida (d As Double, brzina As Double) As Double
'deklaracija konstante pi
Const pi As Single=3.14 'konstanta pi se može deklarisati i kao
varijabla
'dodjeljivanje imenu funkcije vrijednosti koju funkcija vraća
protok_fluida=(d^2)*pi*brzina/4
End Function
Primjer 5.5. Kreirati funkciju pod nazivom volumen_plina koja vraća vrijednost
volumena zraka iz jednačine stanja idealnog gasa
Mp
TRmV
Pri čemu je: R- gasna konstanta 8314 J/(kmolK).
M- molukulska masa zraka 29 kg/kmol.
Parametri funkcije su količina gasa m (kg), temperatura gasa (°C) i pritisak
gasa (bar).
Function volumen_plina (m As Double, T As Double, p As Double) As Double
'deklaracija gasne konstante i molekulske mase gasa kao konstanti
Const R As Single=8314
Const Mm As Single=29
'pretvaranje vrijednosti pritiska iz bar u Pa i temperature iz °C u
K
p=p*1E5
T=T+273.15
'dodjeljivanje imenu funkcije vrijednosti koju funkcija vraća
volumen_plina=m*R*T/(p*Mm)
End Function
13
6. Grananje programskog koda uz pomoć IF...Then izjave
Grananje je proces selektivnog izvršavanja određenih blokova koda, u zavisnosti
od vrijednosti određenog izraza. U cilju implementacije grananja koda,
upotrebljava se izjava If..Then.
U svom najprostijem obliku , izjava If...Then testira samo jedna izraz i,
ukolikoje on istinit, izvršava jednu jedinu izjavu.
If uslov Then [naredba ako je uslov tačan]
Ako je potrebno d izvršite veći broj izjava, ukolikoje izraz istinit, možete
upotrijebiti varijaciju If..End If
If uslov Then
[naredba_1 ako je uslov tačan]
[naredba_2 ako je uslov tačan]
End If
Još jedna varijacija If...Then izjave je If...Then...Else...End If. Ovaj oblik
pmogućava da izvršite jednu ili više izjava ako je izraz (uslov) istinit, kao i
jednu ili više izjava ako uslov/izraz nije tačan.
If uslov Then
[naredba ako je uslov tačan]
Else
[naredba ako uslov nije tačan]
End If
Uslov je obično neki logički izraz koji treba da se zadovolji, i on je obavezan
dio if then strukture. Tumačenje If..Then..Else Petlje je u suštini vrlo
jednostavno. Ako je uslov zadovoljen izvršava se naredba u narednoj liniji koda.
U suprotonom ista naredba se preskače i izvršava naredba definisana u slučaju
kada uslov nije tačan. Slijedeći primjer vrlo jednostavno pokazuje strukturu
petlje.
14
Primjer 6.1. Napisati potprogram koji će za vrijednost broja bodova koju ste
unijeli u ćeliju B2 aktivnog radnog lista, ispisati da li ste položili ispit.
Uslov je da na ispitu ostvarite broj bodova veći od 54.
Sub ispit()
Dim bodovi As Integer
Dim ocjena As String
bodovi = Range("B1")
If bodovi < 54 Then
ocjena = "Niste položili ispit"
Else
ocjena = "Položili ste ispit"
End If
Range("B2") = ocjena
End Sub
Ponekad ćete grananje programskog koda poželjeti da kreirate uz pomoć više od
dvije grane (više uslova). U ovakvim slučajevima, jedno od rješenja sastoji se u
upotrebi If...Then...ElseIf izjave.
If uslov_1 Then
[naredba ako je uslov_1 tačan]
ElseIf uslov_2 Then
[naredba ako je uslov_1 tačan]
ElseIf uslov_n Then
[naredba ako je uslov_n tačan]
Else
[naredba ako niti jedan uslov tačan]
End If
Slijedeći primjeri desmonstriraju upotrebu If...Then...ElseIf izjave.
15
Primjer 6.2. Napisati potprogram koji će za vrijednost broja bodova koju ste
unijeli u ćeliju B2 aktivnog radnog lista, ispisati da li ste položili ispit. U
tabeli je prikazan sistem bodovanja
bodovi ocjena
bodovi <54 5
bodovi >= 54 and bodovi <= 63 6
bodovi >= 64 and bodovi <= 73 7
bodovi >= 74 and bodovi <= 83 8
bodovi >= 84 and bodovi <= 93 9
bodovi >= 94 and bodovi <= 100 100
Sub ispit()
Dim bodovi As Integer
Dim ocjena As String
bodovi = Range("B1")
If bodovi < 54 Then
ocjena = 5
ElseIf bodovi >= 54 And bodovi <= 63 Then
ocjena = 6
ElseIf bodovi >= 64 And bodovi <= 73 Then
ocjena = 7
ElseIf bodovi >= 74 And bodovi <= 83 Then
ocjena = 8
ElseIf bodovi >= 84 And bodovi <= 93 Then
ocjena = 6
Else
ocjena = 10
End If
Range("B2") = ocjena
End Sub
16
Primjer 6.3. Napisati potprogram koji rješava kvadratnu jednačinu oblika
02 cbxax
za vrijednosti a, b, c koje se unoste u ćelijama B1, B2 i B3. Program treba da
ispisuje Koliko jednačina ima rješenjau ćečiji D1 i koje su vrijednosti rješenja
u ćelijama D2 i D3.
Rješenje:
Ako je vrijednost parametra D
acbD 42
jednaka nuli (D=0) jednačina ima jedno rješenje x:
)2/( abx
Za vrijednosti parametra D<0 jednačina ima imaginarno rješenje, dok za
vrijednosti D>0 jednačina ima dva rješenja
a
Dbx
22/1
Sub kvadratna_jednacina()
'deklarisane varijabli
Dim a As Single, b As Single, c As Single, D As Single
Dim x As Single, x1 As Single, x2 As Single
'dodjeljivanje vrijednosi varijablama
a = Range("B1")
b = Range("B2")
c = Range("B3")
D = (b ^ 2) - 4 * a * c
If D = 0 Then
x = -b / (2 * a)
Range("D1") = "Jednačina ima jedno rjesenje"
Range("D2") = x
Range("D3") = ""
ElseIf D < 0 Then
Range("D1") = "Jednačina ima imaginarno rjesenje"
Range("D2") = ""
Range("D3") = ""
Else
x1 = (-b + D ^ (1 / 2)) / (2 * a)
x2 = (-b - D ^ (1 / 2)) / (2 * a)
Range("D1") = "Jednačina ima dva rjesenja"
17
Range("D2") = x1
Range("D3") = x2
End If
End Sub
7. Implementacija petlji
Izjave predstavljaju pokretačku snagu VBA programskog jezika. Pomoću izjava
možete u svojim programima implementirati petlje i donositi logičke usluge.
Program napisan u VB se izvršava jednu po jednu liniju koda kako su napisane u
editoru. Međutim, linije koda se mogu kontrolisati na način da se određene
linije koda izvršavaju pod specificiranim uslovima.
Programske petlje, koje se koriste radi višestrukog i uzastopnog izvršavanja
određenog dijela programskog koda,predstavljaju nezaobilazan alat u bilo kojoj
vrsti programa. Postoje dvije klase programskih petlji: fiksne petlje, čiji je
broj izvršavanja poznat i konačan, i tzv. varijabilne petlje koje su oslonjene
na neki logički izraz, na osnovu čijeg izračunavanja program donosi odluku da li
izvršavanje petlje treba nastaviti ili ne.
Fiksna petlja: For...Next
Opšta struktura For...Next izjave, odnosno njena sintaksa predstavljena je u
tekstu što slijedi.
For Counter=Start To End [Step]
[naredbe]
[Exit For] [Continue For]
[naredbe]
Next [Counter]
Counter je varijabla koja je obavezna u For...Next petlji, i ona je kontrolna
varijabla u petlji.
Start je numerički izraz ili početna vrijednost za Counter.
End je numerički izraz ili konačna vrijednost za Counter.
Step predstavlja korak povećanja varijable Counter pri svakom prolazku kroz
petlju. Ako se ne naglasi korak on po osnovnoj opciji ima vrijednost 1.
Exit For i Countinue For služe za kontrolu petlje pod određenim uslovima.
Next predstavlja završetak definicije For petlje.
18
Opšta struktura For...Next petlje prikazana je na primjeru jednostavne
procedure. Kao rezultat izvršavanja ove prodedure, u prozoru Immediate će redom
biti ispisani brojevi od 1 do 50.
Sub SimpleForNext()
Dim n As Integer
For n = 1 To 50
Debug.Print n
Next n
End Sub
U slijedećem primjeru je pokazano, kako se petlja može kretati i unazad, odnosno
od većih prema manjim vrijednostima, dok se za korak povećanja/smanjenja
vrijednosti može i broj različit od jedinice. Kao izlazni rezultat slijedeće
procedure, u prozoru Immediate biće ispisani svi parni brojevi od 50 do 1, i to
opadajućim redoslijedom.
Sub ReverseForNext()
Dim n As Integer
For n = 50 To 1 Step -2
Debug.Print n
Next n
End Sub
Varijabilne petlje: Do...Loop
Petlje tipa Do možete upotrijebiti radi uzastopnog ponavljanja neke sekvence
koda, sve dok ne bude ispunjen tzv. uslov prekida. U opštem slučaju sintaksa
glasi ovako:
Do {While│Until} uslov
[naredbe]
[Exit Do]
[naredbe]
Loop
Petlja tipa Do...While, izvršavaće se za sve vrijeme dok je izraz iz uslova
istinit. Nasuprot toma petljia tipa Do...Until izvršavaće se do trenutka kada
19
izraz iz uslova postane istinit. Exit Do prestavlja bezuslovan i momentalan
izlazak iz Do petlje. U nastavku je prikazana varijacija istog problema kao za
For...Next petlju.
Sub SimpleDoWhile()
Dim n As Integer
n = 1 'početna vrijednost varijable n
Do While n <= 50
Debug.Print n 'definisanje koraka povećanja varijable n
n = n + 1
Loop
End Sub
Kao što je već naglašeno Do...While petlja se izvršava za sve vrijeme dok je
izraz iz uslova istinit. Ako za iste uslove primijenimo Do...Until petlju u
rezultatu se neće ispisati nijedna vrijednost varijable n jer se Do...Until
petlja izvršava do trenutka kada izraz iz uslova postane istinit.
Sub SimpleDoUntil()
Dim n As Integer
n = 1 'početna vrijednost varijable n
Do Until n <= 50
Debug.Print n 'definisanje koraka povećanja varijable n
n = n + 1
Loop
End Sub
Ako umjesto uslova n<=50 stavite uslov n=51 Do..Until petlja će se izvršavati
sve dok varijabla n ne poprimi vrijednost 51 tj., ispisaće se sve vrijednosti
brojeva od 1do 50 sa korakom 1.
20
Primjer 7.1. Kreirati proceduru tipa potprogram pod nazivom kvadrat_x koja
ispisuje u prozoru Immediate vrijednosti varijable x i vrijednosti varijable
broj koja predstavlja kvadrat broja x.
Varijabla x poprima vrijednosti od 0 do 10 sa korakom 0.5. Vrijednosti
dodijeliti varijabli pod nazivom broj.
Sub kvadrat_x()
Dim x As Single, broj As Single
For x = 0 To 10 Step 0.5
broj = x ^ 2
Debug.Print x, broj
Next x
End Sub
Istu proceduru možete napisati i na slijedeći način, koristeći Do...While
petlju.
Sub kvadrat_x()
Dim x As Single, broj As Single
x = 0
Do While x <= 10
broj = x ^ 2
Debug.Print x, broj
x = x + 0.5
Loop
End Sub
21
Primjer 7.2. Napisati funkciju pod nazivom Trap_rule koja vraća vrijednost
integrala
dxex
b
a
x
)2(
5
Koristeći trapezoidno pravilo integriranja.
)()()(2
1
1
0 n
n
i
ixfxfxf
hIntegral
Pri čemu je h korak integracije koji se računa kao
n
abh
)(
gdje je n broj intervala na koje je podijeljen interval [a,b].
Vrijede i jednakosti bxaxn ;
0. Parametri funkcije su granice integrala a
i b kao i broj intervala n. Broj intervala je cijeli broj.
Function Trap_rule(a As Single, a As Single, n As Integer)As Single
Dim h As Single, i As Integer
'korak integracije
h = (b - a) / n
'početna vrijednost sume vrijednosti funkcije f(xi)
suma = 0
For i = 1 To (n - 1)
suma = suma + funkcija(a + h * i)
Next i
Trap_rule = (h / 2) * (funkcija(a) + 2 * suma + funkcija(b))
End Function
______________________________________________________________________________
Function funkcija(x)
funkcija = 5 * x * Exp(-2 * x)
End Function
22
8. Urađeni primjeri
Primjer 8.1. Napisati funkciju pod nazivom CubeRoot koja vraća vrijednost trećeg
korijena broja x. Funkcija ima jedan parametar/argument (x).Funkcija treba da
vraća vrijednost svih realnih brojeva x.
Function CubeRoot(x As Double) As Double
CubeRoot = x ^ (1 / 3)
End Function
Primjer 8.2. Napisati funkciju pod nazivom napon_para koja vraća vrijednost
napona vodene pare u funkciji temperature prema jednačini
CKT
BA
ebarp)(
)(
Pri čemu su A, B i C konstante.
A = 11.6834
B = 3816.44
C = -46.13
Function napon_para(T As Single) As Single
'deklaracija konstanti
Const A As Single = 11.6834
Const B As Single = 3816.44
Const C As Single = -46.13
'dodjeljivanje izraza na racunanje napona para funkciji
napon_para = Exp(A - B / (T + C))
End Function
23
Primjer 8.3. Napisati potprogram koji računa vrijednost površine presjeka kruga
prema jednačini
2rA
Vrijednost varjable r je storirana u ćeliji B1 aktivnog radnog lista, dok u
ćeliji B2 treba da se ispiše vrijednost površine kruga. Ime procedure treba da
bude CircleArea.
Sub CircleArea()
Dim radijus As Single
Dim povrsina As Single
Const pi As Single = 3.14
radijus = Range("B1")
povrsina = (radijus ^ 2) * pi
Range("B2") = povrsina
End Sub
Primjer 8.4. Napisati potprogram (Discount) koji ispisuje vrijednost popusta (%)
na kupljenu robu. Vrijednosti popusta u funkciji količine robe su date u tabeli
Količina robe Popust
0-24 10%
25-49 15%
50-100 20%
>100 25%
Program treba da varijabli kolicina_robe dodijeli cjelobrojnu vrijednost iz
ćelije A1 aktivnog radnog lista i u ćeiji A2 da ispisuje vrijednost popusta kao
niz karaktera.
Sub Dicsount()
Dim kolicina As Integer
Dim popust As String
kolicina = Range("A1")
If kolicina < 25 Then
popust = "10%"
ElseIf kolicina >= 25 And kolicina <= 49 Then
popust = "15%"
ElseIf kolicina >= 50 And kolicina <= 100 Then
24
popust = "20%"
Else
popust = "25%"
End If
Range("A2") = popust
End Sub
Primjer 8.5. Napisati potprogram pod nazivom Reynolds, koji na treba da u
ćelijama D1 i D2 aktivnog radnog lista ispisuje režim strujanja fluida u
zavisnosti od izračunate vrijednosti za broj Re, kao i vrijednost broje Re.
vdRe
Pri čemu je d- dijametar cjevovoda
v- brzina strujanja fluida
μ- viskozitet fluida
ρ- gustina fluida
Režimi strujanja su:
Re Režim strujanja
Re<2320 „strujanje je laminarno“
2320<Re<10000 „strujanje je prelazno“
Re>10000 „strujanje je turbulentno“
Varijable su vrijednosti za decimalnim zarezom i treba ima dati slijedeća imena,
njihove vrijednosti su smještene u odgovarajućim ćelijama kako je naznačeno:
d- dijametar (B1)
v- brzina (B2)
μ- visk (B3)
ρ- ro (B4)
Sub Reynolds()
Dim dijametar As Single
Dim brzina As Single
Dim visk As Single
Dim ro As Single
Dim Re As Single
Dim rezim_strujanja As String
dijametar = Range("b1")
25
brzina = Range("b2")
visk = Range("b3")
ro = Range("b4")
Re = (dijametar * brzina * ro) / visk
If Re < 2320 Then
rezim_strujanja = "Strujanje je laminarno"
ElseIf Re >= 2320 And Re < 10000 Then
rezim_strujanja = "Strujanje je prelazno"
Else
rezim_strujanja = "Strujanje je turbulentno"
End If
Range("D1") = rezim_strujanja
Range("D2") = Re
End Sub
26
Primjer 8.6. Napisati potprogram pod nazivom Antoine koja vraća vrijednost
napona vodene pare za sve temperature iz intervala {300-400} sa korakon 10
temperature prema jednačini
CKT
BA
ebarp)(
)(
Pri čemu su A, B i C konstante.
A = 11.6834
B = 3816.44
C = -46.13
Sub Antoine()
Const A As Single = 11.6834
Const B As Single = 3816.44
Const C As Single = -46.13
Dim napon_para As Single
Dim t As Integer
For t = 300 To 400 Step 10
napon_para = Exp(A - B / (t + C))
Debug.Print t, napon_para
Next t
End Sub