Budžet na jedan klik!, Ivan Veselinović, Senior planer analitičar, Atlantic Grupa

Jedan od novih trendova u controllingu jeste i poznavanje Visual Basic for Aplications (VBA) programskog jezika. VBA može da se koristi u Excel-u i drugim Office aplikacijama u cilju povećanja efikasnosti rada, a kroz automatizaciju rutinskih, ponavljajućih operacija. Više nije dovoljno napredno poznavanje dobrog starog Excela, VLOOKUP funkcija i pivot tabela. Controlleri moraju da usavršavaju svoje znanje na polju programiranja, kako bi što više podataka dobili jednim klikom i što pre dostavili izveštaj menadžeru. U tom cilju, želim da vam pokažem praktičan primer primene VBA programiranja u jednom od najvažnijih procesa controllinga, a to je proces budžetiranja.
Cilj je kreiranje baze podataka, na osnovu podataka složenih u klasičnu formu za unos, i to na brz automatski način. Uz pomoć makroa, tj. pisanjem podprograma u VBA, može da se dođe do vrlo efikasnog rešenja.
U narednoj tabeli dat je primer formulara za unos troškova, koji sadrži podatke o budžetu. U redovima su prikazane vrste troškova, a u kolonama meseci. Ove podatke je potrebno složiti u formu baze podataka, radi lakše manipulacije podacima i eventualnog unosa u Data Warehouse (DWH). Ovako poređani podaci mogu vrlo jednostavno da se pretvore u bilo koji format za unos u ERP ili DWH sisteme.
Sada je potrebno samo da napišem ispravan kod, kako bih dobio bazu podataka koja će mi omogućiti laku manipulaciju. Kod koji zadajem u okviru DEVELOPER kartice u Excel-u je sledeći:
Sub PopuniBazu()
Dim i, n, kraj, red, kolona As Integer
‘aktiviraj radni list CC_01 (forma za unos troškova)
Sheets(“CC_01″).Activate
‘proveri koliko redova ima forma za unos (prebroj numeričke vrednosti u koloni A)
n = WorksheetFunction.Count(Sheets(“CC_01″).Range(“A:A”))
kraj = n + 5 ‘poslednji red je = n + 5, jer je početak tabele u 6. redu
‘postavi početnu vrednost promenljive red (početak baze)
red = 3
‘postavi početnu vrednost promenljive kolona (početak baze)
kolona = 2
For i = 6 To kraj ‘petlja prolazi kroz sve redove forme za unos
If Cells(i, 1) = 2 Then ‘ako je vrednost u koloni A = 2, tada uzmi podatke
For j = 1 To 12 ‘meseci
‘godina
Sheets(“Baza”).Cells(red, 2) = 2016
‘mesec
Sheets(“Baza”).Cells(red, 3) = j
‘vrsta troška – nivo 2
Sheets(“Baza”).Cells(red, 5) = Cells(i, 2)
‘mesto troška
Sheets(“Baza”).Cells(red, 6) = Range(“C3″)
‘planski period
Sheets(“Baza”).Cells(red, 7) = Range(“C2″)
‘odgovorna osoba
Sheets(“Baza”).Cells(red, 8) = Range(“C1″)
‘iznos (EUR)
Sheets(“Baza”).Cells(red, 9) = Cells(i, 2 + j).Value
red = red + 1 ‘u sledećem krugu, pređi na naredni red
Next j
End If
Next i
Sheets(“Pivot”).Activate
ActiveSheet.PivotTables(“PivotTable1″).PivotCache.Refresh
End Sub
Ako sam pravilno napisao kod, klikom na dugme „Popuni bazu“ dešava se magija. U narednih nekoliko sekundi dobijam sređenu bazu podataka. I šta dalje?
Pa naravno, dobri stari pivot. Mogu sada da analiziram podatke onako kako želim, a isto tako i moj menadžer. Jednostavno, zar ne?
U primeru je data tabela za jedno mesto troška, a uz manju nadogradnju, dodavanjem nekoliko linija koda, može da se napravi makro koji će spojiti više ovakvih tabela u jednu zajedničku bazu podataka, ali to je već tema za neki naredni broj.
Autor teksta je Ivan Veselinović, Senior planer analitičar, Adriatic Grupa.
Tekst je preuzet iz Controlling magazina 06.
Autor
Ivan Veselinović
Senior Planning Analyst
Atlantic Grupa
2 Komentara
Postovanje Ivane,
dosta dobro resenje ste dali, interesujeme da li Vam je pala na pamet ideja da to sve realizujete trodimenzionlno
Branko, nisam baš siguran da sam razumeo pitanje. U kom smislu trodimenzionalno? Ako ste misli na više mesta troška, kao treća dimenzija, onda jesam. To bi samo zahtevalo dodatnu promenljivu npr.
Dim ws as worksheet
For l = 1 to s
ws (l) activate
‘dalje bi se iskoristio kod iz gornjeg teksta