excel vba

26
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.

Upload: amir-kadic

Post on 27-Nov-2015

106 views

Category:

Documents


6 download

DESCRIPTION

upustvo basic exscel

TRANSCRIPT

Page 1: EXCEL VBA

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.

Page 2: EXCEL VBA

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

Page 3: EXCEL VBA

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.

Page 4: EXCEL VBA

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

Page 5: EXCEL VBA

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

Page 6: EXCEL VBA

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

Page 7: EXCEL VBA

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

Page 8: EXCEL VBA

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)

Page 9: EXCEL VBA

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

Page 10: EXCEL VBA

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

Page 11: EXCEL VBA

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

Page 12: EXCEL VBA

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

Page 13: EXCEL VBA

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.

Page 14: EXCEL VBA

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.

Page 15: EXCEL VBA

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

Page 16: EXCEL VBA

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"

Page 17: EXCEL VBA

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.

Page 18: EXCEL VBA

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

Page 19: EXCEL VBA

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.

Page 20: EXCEL VBA

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

Page 21: EXCEL VBA

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

Page 22: EXCEL VBA

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

Page 23: EXCEL VBA

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

Page 24: EXCEL VBA

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")

Page 25: EXCEL VBA

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

Page 26: EXCEL VBA

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