Vous êtes sur la page 1sur 26

1

Osnove programiranja u Excel/VBA



1. Pristupanje VB Editoru
Excel aplikacija se sastoji od dva odvojena ali povezana okruenja:
- okruenje radne knjige koja se sastoji od radnih listova, grafika itd. i
- VBA okruenja koje omoguava pisanje programa koji su u interakciji da
radnom knjigom.
Podaci i informacije se mogu prenositi sa Excela na VBA i obrnuto.
VBA okruenje je tzv. Visual Basic Editor (VBE). Da bi se pristupilo VBA
okruenju koriste se jedna od ponuenih opcija:
1. Otvorite jednu novu radnu knjigu u Excelu i upotrijebite kombinaciju tipki
[Alt+F11]
2. Aktivirajne alatnu traku DeveloperVisual Basic (slika 1.)

Slika 1. Pristupanje VB editoru.

Ulaskom u okruenje VBA pojavljuje se prozor slian prozoru prikazanom na slici
3. Okruenje sadri 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 omogui istraivanje svih otvorenih projekata i njohovih komponenti,
i radi na slian nain kao i Windows Explorer.




2


Slika 2. VBA okruenje

2. Procedure
VBA kod pisan u Visual Basic Editor-u je ounaen kao procedure. Svaka procedura
predstavlja kolekciju izjava, koje izvravaju jedan ili vie zadataka.
Dva su najee koritena tipa procedura:
- Potprogrami
- Funkcije
Osnovna razlika izmeu njih je u tome to funkcije mogu vratiti neku vrijednost
procesu koji ih je pozvao (modul ili Excel-ov radni list).
Potprogrami. U optem sluaju, sintaksa potprograma izgleda ovako:

Sub ImePotprograma ( (parametri) )
[naredbe]
End Sub

Za potrebe svakog potprograma moete, ali i ne morate, deklarisati parametre.
Ako definiete neki parametar svaka procedura koja poziva taj potprogram morae
da isporui vrijednost tih parametara.
Ovo je najjednostavniji nain kako moete deklarisati jedan potprogram. Na
osnovu toga moete kreirati svoj prvi kompletan program, koji e se zvati
3

MojPrviProgram i koji e imati samo jednu liniju teksta (naredbu) da ispie niz
karaktera.

Sub MojPrviProgram()
Debug.Print "ovo je moj prvi potprogram"
End Sub

Ovaj potprogram slobodno moete i praktino isprobati:
3. Otvorite jednu novu radnu knjigu u Excelu.
4. Upotrijebite preicu Alt+F11, kako biste otvorili VBE editor
5. Sa menija odaberite komandu InsertModule.
6. Unesite prikazani kod
7. Pokrenite izvravanje (Run) programskog koda, tako to ete pritisnuti F5

Funkcije predstavljaju korak naprijed u odnosu na potprograme, jer omoguavaju
povratak odreene vrijednosto proceduri iz koje je funkcija pozvana. Funkcije se
pored toga mogu koristiti za kreiranje tzv. korisnini definiranih (user-
defined) funkcija, koje se mogu koristiti poput obinih Excel-ovih funkcija kao
ro su LN(), EXP() i dr. U optem sluaju funkcije imaju slijedeu sintaksu.

Function ImeFunkcije ((parametri)) [As TipPodatka]
[naredbe]
ImeFunkcije=Rezultati
End Function

Treba obratiti panju na razlike sintakse funkcija, i sintakse koja se koristi
za deklarianje potprograma. Kao prvo, umjesto kljune rijei Sub, kod funkcija
se upotrebljava kljuna rije Function. Drugo, opcija [As TipPodatka] oznaava
mjesto na kome treba definisati tip podataka izlazne vrijednosti funkcije.
Uglasta zagrada ukazuje na injenicu da definisanje tipa izlazne vrijednosti
nije obavezno, ali je poeljno jer e programski kod biti itljiviji i jasnije
odraavati namjene programa koji piete. Poslijednja razlika izmeu 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 obino sastoji od promjenjljivih (varijabli), operatora i
izjava. Varijable predstavljaju osnovne elemente svake aplikacije. Konceptualno,
vaarijable predstavljaju stavke ili objekte, koje programski kod obrauje. Npr.,
varijabla moe biti bilo koji broj nad kojim je potrebno izvriti matematike
operacije, string koji je potrebno editovati, neki radni list itd.
Varijable se koriste za oznaavanje mjesta u memoriji raunara gdje mogu
biti pohranjeni podaci. Svaka varijabla ima ime koje odreuje programer.
Programer takoer odluuje koji tip podataka je dodijeljen varijabli. Npr., ako
varijabla pohranjuje, recimo, Ime i Prezime neke osobe, onda nije poeljeno da
se deklarie kao cjelobrojni tip, ali se to moe uraditi za broj godina osobe
kao npr. 32 ili 45.
Svaka varijabla pripada odreenom tipu. Tip varijable odabire programer u
procesu koji de naziva deklaracija ili definisanje varijable. Varijabla se moe
zamisliti kao kutija unutar memorije raunara kao to je prikazano u tabeli 1.
Tabela 1. Informacije sadrane 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 sadri broj 32.
Kada se ime dodijeli varijabli, programer treba da odlui koji e tip podataka
podijeliti varijabli, to odreuje tip podataka koje varijabla moe poprimiti.
Npr., ako deklariemo 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 prebivalita takva
varijabla e se deklarisati kao String. Postoji nekoliko tipova podataka
dostupni u VBA i oni su prikazani u tabeli 2.

Varijabli se moe dati bilo koje ime ukoliko su zadovoljena slijedea pravila:
- Ime varijable treba poeti za slovom alfabeta
- Ime varijable ne smije biti vee duine od 256 karaktera
- Ime varijable me smije biti isto kao ime procedure, karakteristike,
funkcije ili rezervisane rijei
5

- Ime varijable ne smije sadravati razmak (space) ili taku
- Nije dozvoljeno koristiti slijedee karaktere (%, $, #, !, &)
Prilikom imenovanja varijabli mooete koristiti velika imi mala slova (VBA ne
razlikuje velika i mala slova).
Varijable se definiu/deklariu koristei slijedeu 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 smjeten, pa da tek onda
kreirate varijablu sa odgovarajuim tipom podataka. Ukoliko niste sigurni koji
e tip podataka meka varijablasadrati meete je deklarisati kao varijantnu
varijablu, to je specijalna vrsta varijabli, koje u sebi mogu sadravati
podatke bilo kojeg tipa. U tabeli 2 prikazani su najee koriteni tipovi
podataka.

Tabela 2. Tipovi podataka
Tip podataka Opseg vrijednosti Iskoritenost
memorije
Byte 0-255 1 bajt
Boolean True ili False (tano ili netano) 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 duine mogu sadravati do
2 milijarde karaktera
varira



6

Boolean Podaci tipa Boolean najee se upotrebljavaju u implementaciji
logikih zakonitosti u programski kod.
Integer Cjelobrojne promjenjljive predstavljaju najee koriteni tip
podataka. Najee se upotrebljavaju u kombinaciji sa For..Next
izjavama, brojakim petljama itd.
Long Ukoliko cjelobrojne vrijednosti tipa Integer nisu dovoljne,
koristi se tip podataka Long, koji je stariji brat tipa Integer.
Double Najee se koristi uimlementaciji funkcija pomou kojih se
izraunava neka vrijednost.
Slijedei primjeri pokazuju nain na koji se varijable deklariu u VBA
procedurama. Varijable se obino deklariu prije izjava koje izvravaju
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 omoguava da sa programiranjem ponete veoma jednostavno, i bez
razumjevanja koncepta deklaracije i upotrebe varijabli. Za razliku od veine
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 vri 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 moete i sami primijetiti varijable x, y i z u prvom sluaju nisu
prethodno deklarisane.
Deklarisanje varijable se, konceprualno, moe shvatiti kao iskazivanje namjere
da neku variablu kasnije upotrijebite. Priliom izvravanja programskog koda u
memoriji raunara e biti rezervisan odgovarajui prostor, koji e Va program
moi da poziva koritenjem imena varijable. Osim toga, prilikom definisanja
7

varijable treba definisati i tip podatka koji su u tu varijablu moe smjestiti.
Na prvi pogled, moe se uiniti da mogunost koritenja 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 nain
korisnici jednostavnije uvode u tajne programiranja, postoji realna mogunost da
ete prilikom pisanja programskog koda nehotice unijeti vizuelno neprimjetne ali
programski veoma znaajne grake. Deklarisanjem varijabli te je greke mogue
znatno bre 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. Slijedei primjeri pokazuju na koji nain vse
arijablama razliitog tipa mogu dodijeliti vrijednosti. Primijetite da se
stringovi (nizovi karaktera stavljaju pod ''znake navodnika'' a datumi izmeu
#reetki#. 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 uopteno 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 piemo
proceduru koja se poziva na brzinu svjetlosti imenovali bi je na isti nain kao
to imenujemo varijable. Meutim, razlikovat e se od varijabli zato to ima
konstantu vrijednost. U tu svrhu mee 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 vanu 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 +
Mnoenje *
Dijeljenje /
Oduzimanje -
Eksponent ^
Sastavljanje stringova &
Dijeljenje cjelobrojnih
vrijednosti
\

VBA prua i niz logikih operatora, kao to je prikazano u tabeli 4.
Tabela 4. Logii operatori u VBA
Operator ta operator radi
Not Logika negacija izraza
And Logika konjukcija dva izraza
Or Logika disjunkcija dva izraza
XoR Logiko iskljuivanje dva izraza
Eqv Logika ekvivalencija dva izraza
Imp Logika implikacija dva izraza

Osnovne matematike funkcije u VBA. U VBA je ugraen i odreeni broj osnovnih
matematikih 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 rauna volumen
tekuine u sfernom rezervoaru prema jednaini:
3
) 3 (
2
h r h
V

=
t

pri emu je: V- volumeni tekuine u rezervoaru (m
3
); r- radijus sfere (m) i h-
nivo tekuine 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 moe deklarisati i kao varijabla
Dim pi As Single
Kokrak 4: Dodijeliti vrijednosti varijablama (nivo tekuine 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 matematikog
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 vraa
vrijednost volumena iz prethodnog primjera. Parametri funkcije su nivo tekuine
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 moe deklarisati i kao
varijabla
'dodjeljivanje imenu funkcije vrijednosti koju funkcija vraa
volumen_tekucine=pi*(h^2)*(3*r-h)/3
End Function

Primjer 5.3. Kreirati podprogram pod nazivom protok koji rauna volumni protok
fluida u cjevovodu prema jednaini:
v
d
V

=
4
2
t

pri emu je: V- volumni protok fluida u rezervoaru (m
3
/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 moe 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 matematikog
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 vraa 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 moe deklarisati i kao
varijabla
'dodjeljivanje imenu funkcije vrijednosti koju funkcija vraa
protok_fluida=(d^2)*pi*brzina/4
End Function


Primjer 5.5. Kreirati funkciju pod nazivom volumen_plina koja vraa vrijednost
volumena zraka iz jednaine stanja idealnog gasa

M p
T R m
V


=
Pri emu je: R- gasna konstanta 8314 J/(kmolK).
M- molukulska masa zraka 29 kg/kmol.
Parametri funkcije su koliina 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 vraa
volumen_plina=m*R*T/(p*Mm)
End Function





13

6. Grananje programskog koda uz pomo IF...Then izjave
Grananje je proces selektivnog izvravanja odreenih blokova koda, u zavisnosti
od vrijednosti odreenog 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, izvrava jednu jedinu izjavu.
If uslov Then [naredba ako je uslov taan]

Ako je potrebno d izvrite vei broj izjava, ukolikoje izraz istinit, moete
upotrijebiti varijaciju If..End If
If uslov Then
[naredba_1 ako je uslov taan]
[naredba_2 ako je uslov taan]
End If

Jo jedna varijacija If...Then izjave je If...Then...Else...End If. Ovaj oblik
pmoguava da izvrite jednu ili vie izjava ako je izraz (uslov) istinit, kao i
jednu ili vie izjava ako uslov/izraz nije taan.
If uslov Then
[naredba ako je uslov taan]
Else
[naredba ako uslov nije taan]
End If

Uslov je obino neki logiki izraz koji treba da se zadovolji, i on je obavezan
dio if then strukture. Tumaenje If..Then..Else Petlje je u sutini vrlo
jednostavno. Ako je uslov zadovoljen izvrava se naredba u narednoj liniji koda.
U suprotonom ista naredba se preskae i izvrava naredba definisana u sluaju
kada uslov nije taan. Slijedei 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 poloili ispit.
Uslov je da na ispitu ostvarite broj bodova vei od 54.

Sub ispit()
Dim bodovi As Integer
Dim ocjena As String
bodovi = Range("B1")
If bodovi < 54 Then
ocjena = "Niste poloili ispit"
Else
ocjena = "Poloili ste ispit"
End If
Range("B2") = ocjena
End Sub

Ponekad ete grananje programskog koda poeljeti da kreirate uz pomo vie od
dvije grane (vie uslova). U ovakvim sluajevima, jedno od rjeenja sastoji se u
upotrebi If...Then...ElseIf izjave.
If uslov_1 Then
[naredba ako je uslov_1 taan]
ElseIf uslov_2 Then
[naredba ako je uslov_1 taan]
ElseIf uslov_n Then
[naredba ako je uslov_n taan]
Else
[naredba ako niti jedan uslov taan]
End If

Slijedei 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 poloili 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 rjeava kvadratnu jednainu oblika
0
2
= + + c bx ax
za vrijednosti a, b, c koje se unoste u elijama B1, B2 i B3. Program treba da
ispisuje Koliko jednaina ima rjeenjau eiji D1 i koje su vrijednosti rjeenja
u elijama D2 i D3.
Rjeenje:
Ako je vrijednost parametra D
ac b D 4
2
=
jednaka nuli (D=0) jednaina ima jedno rjeenje x:
) 2 /( a b x =
Za vrijednosti parametra D<0 jednaina ima imaginarno rjeenje, dok za
vrijednosti D>0 jednaina ima dva rjeenja

a
D b
x
2
2 / 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") = "Jednaina ima jedno rjesenje"
Range("D2") = x
Range("D3") = ""
ElseIf D < 0 Then
Range("D1") = "Jednaina ima imaginarno rjesenje"
Range("D2") = ""
Range("D3") = ""
Else
x1 = (-b + D ^ (1 / 2)) / (2 * a)
x2 = (-b - D ^ (1 / 2)) / (2 * a)
Range("D1") = "Jednaina ima dva rjesenja"
17

Range("D2") = x1
Range("D3") = x2
End If
End Sub


7. Implementacija petlji
Izjave predstavljaju pokretaku snagu VBA programskog jezika. Pomou izjava
moete u svojim programima implementirati petlje i donositi logike usluge.
Program napisan u VB se izvrava jednu po jednu liniju koda kako su napisane u
editoru. Meutim, linije koda se mogu kontrolisati na nain da se odreene
linije koda izvravaju pod specificiranim uslovima.
Programske petlje, koje se koriste radi viestrukog i uzastopnog izvravanja
odreenog dijela programskog koda,predstavljaju nezaobilazan alat u bilo kojoj
vrsti programa. Postoje dvije klase programskih petlji: fiksne petlje, iji je
broj izvravanja poznat i konaan, i tzv. varijabilne petlje koje su oslonjene
na neki logiki izraz, na osnovu ijeg izraunavanja program donosi odluku da li
izvravanje petlje treba nastaviti ili ne.

Fiksna petlja: For...Next
Opta 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 numeriki izraz ili poetna vrijednost za Counter.
End je numeriki izraz ili konana vrijednost za Counter.
Step predstavlja korak poveanja varijable Counter pri svakom prolazku kroz
petlju. Ako se ne naglasi korak on po osnovnoj opciji ima vrijednost 1.
Exit For i Countinue For slue za kontrolu petlje pod odreenim uslovima.
Next predstavlja zavretak definicije For petlje.


18

Opta struktura For...Next petlje prikazana je na primjeru jednostavne
procedure. Kao rezultat izvravanja 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 slijedeem primjeru je pokazano, kako se petlja moe kretati i unazad, odnosno
od veih prema manjim vrijednostima, dok se za korak poveanja/smanjenja
vrijednosti moe i broj razliit od jedinice. Kao izlazni rezultat slijedee
procedure, u prozoru Immediate bie ispisani svi parni brojevi od 50 do 1, i to
opadajuim 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 moete upotrijebiti radi uzastopnog ponavljanja neke sekvence
koda, sve dok ne bude ispunjen tzv. uslov prekida. U optem sluaju sintaksa
glasi ovako:
Do {WhileUntil} uslov
[naredbe]
[Exit Do]
[naredbe]
Loop
Petlja tipa Do...While, izvravae se za sve vrijeme dok je izraz iz uslova
istinit. Nasuprot toma petljia tipa Do...Until izvravae 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 'poetna vrijednost varijable n
Do While n <= 50
Debug.Print n 'definisanje koraka poveanja varijable n
n = n + 1
Loop
End Sub
Kao to je ve naglaeno Do...While petlja se izvrava za sve vrijeme dok je
izraz iz uslova istinit. Ako za iste uslove primijenimo Do...Until petlju u
rezultatu se nee ispisati nijedna vrijednost varijable n jer se Do...Until
petlja izvrava do trenutka kada izraz iz uslova postane istinit.
Sub SimpleDoUntil()
Dim n As Integer

n = 1 'poetna vrijednost varijable n
Do Until n <= 50
Debug.Print n 'definisanje koraka poveanja varijable n
n = n + 1
Loop
End Sub

Ako umjesto uslova n<=50 stavite uslov n=51 Do..Until petlja e se izvravati
sve dok varijabla n ne poprimi vrijednost 51 tj., ispisae 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 moete napisati i na slijedei nain, koristei 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 vraa vrijednost
integrala
dx e x
b
a
x
}


) 2 (
5
Koristei trapezoidno pravilo integriranja.

|
.
|

\
|
+ + =

=
) ( ) ( ) (
2
1
1
0 n
n
i
i
x f x f x f
h
Integral
Pri emu je h korak integracije koji se rauna kao

n
a b
h
) (
=
gdje je n broj intervala na koje je podijeljen interval [a,b].
Vrijede i jednakosti b x a x
n
= = ;
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
'poetna 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. Uraeni primjeri

Primjer 8.1. Napisati funkciju pod nazivom CubeRoot koja vraa vrijednost treeg
korijena broja x. Funkcija ima jedan parametar/argument (x).Funkcija treba da
vraa 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 vraa vrijednost
napona vodene pare u funkciji temperature prema jednaini

|
.
|

\
|
+

=
C K T
B
A
e bar p
) (
) (
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 rauna vrijednost povrine presjeka kruga
prema jednaini
t =
2
r A
Vrijednost varjable r je storirana u eliji B1 aktivnog radnog lista, dok u
eliji B2 treba da se ispie vrijednost povrine 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 koliine robe su date u tabeli
Koliina 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 reim strujanja fluida u
zavisnosti od izraunate vrijednosti za broj Re, kao i vrijednost broje Re.


=
v d
Re
Pri emu je d- dijametar cjevovoda
v- brzina strujanja fluida
- viskozitet fluida
- gustina fluida
Reimi strujanja su:
Re Reim 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 slijedea imena,
njihove vrijednosti su smjetene u odgovarajuim elijama kako je naznaeno:
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 vraa vrijednost
napona vodene pare za sve temperature iz intervala {300-400} sa korakon 10
temperature prema jednaini

|
.
|

\
|
+

=
C K T
B
A
e bar p
) (
) (
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

Vous aimerez peut-être aussi