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.
[caption id="attachment_16610" align="aligncenter" width="388"] Ivan Veselinović, Senior planer analitičar, Atlantic grupa[/caption]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.
[caption id="attachment_16611" align="aligncenter" width="546"] Forma za planiranje troškova za mesto troška CC_01[/caption]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 SubAko 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?
[caption id="attachment_16612" align="aligncenter" width="546"] Sređena baza podataka[/caption]Pa naravno, dobri stari pivot. Mogu sada da analiziram podatke onako kako želim, a isto tako i moj menadžer. Jednostavno, zar ne?
[caption id="attachment_16613" align="aligncenter" width="546"] Primer izveštaja (pivot tabela)[/caption]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.