Iako VBA nudi pristojan asortiman ugrađenih funkcija, možda nećete uvijek pronaći točno ono što vam je potrebno. Na sreću, većinu funkcija Excelovog radnog lista također možete koristiti u svojim VBA procedurama. Jedine funkcije radnog lista koje ne možete koristiti su one koje imaju ekvivalentnu VBA funkciju. Na primjer, ne možete koristiti Excelovu RAND funkciju (koja generira slučajni broj) jer VBA ima ekvivalentnu funkciju: Rnd.
VBA čini Excelove funkcije radnog lista dostupnim putem objekta WorksheetFunction, koji se nalazi u objektu Application. Evo primjera kako možete koristiti Excelovu funkciju SUM u VBA izjavi:
Ukupno = Application.WorksheetFunction.SUM(Raspon(“A1:A12”))
Možete izostaviti dio Application ili WorksheetFunction dio izraza. U oba slučaja, VBA shvaća što radite. Drugim riječima, ova tri izraza rade potpuno isto:
Ukupno = Application.WorksheetFunction.SUM(Raspon(“A1:A12”))
Ukupno = Funkcija radnog lista.SUM(Raspon(“A1:A12”))
Ukupno = Primjena.SUM(Raspon(“A1:A12”))
Moja osobna preferencija je korištenje dijela WorksheetFunction samo kako bi bilo savršeno jasno da kod koristi funkciju Excel.
Primjeri funkcija radnog lista
Ovdje ćete otkriti kako koristiti funkcije radnog lista u svojim VBA izrazima.
Pronalaženje maksimalne vrijednosti u rasponu
Evo primjera koji pokazuje kako koristiti Excelovu funkciju MAX radnog lista u VBA proceduri. Ovaj postupak prikazuje maksimalnu vrijednost u stupcu A aktivnog radnog lista:
Korištenje funkcije radnog lista u vašem VBA kodu.
Sub ShowMax()
Zatamnite TheMax kao dvostruko
TheMax = Funkcija radnog lista.MAX(Raspon(“A:A”))
MsgBox TheMax
Kraj Sub
Možete koristiti funkciju MIN da biste dobili najmanju vrijednost u rasponu. I kao što možete očekivati, možete koristiti druge funkcije radnog lista na sličan način. Na primjer, možete koristiti LARGE funkciju za određivanje k -te najveće vrijednosti u rasponu. Sljedeći izraz to pokazuje:
SecondHighest = WorksheetFunction.LARGE(Raspon(“A:A”),2)
Primijetite da funkcija LARGE koristi dva argumenta. Drugi argument predstavlja k- ti dio — 2, u ovom slučaju (druga najveća vrijednost).
Izračunavanje plaćanja hipoteke
Sljedeći primjer koristi funkciju PMT radnog lista za izračunavanje plaćanja hipoteke. Tri varijable koriste se za pohranu podataka koji se prosljeđuju funkciji Pmt kao argumenti. Okvir s porukom prikazuje izračunatu uplatu.
Sub PmtCalc()
Dim IntRate As Double
Dim LoanAmt kao dupli
Prigušena razdoblja kao duga
IntRate = 0,0625 / 12
Razdoblja = 30 * 12
Iznos zajma = 150000
MsgBox WorksheetFunction.PMT(IntRate, Razdoblja, -LoanAmt)
Kraj Sub
Kao što pokazuje sljedeća izjava, vrijednosti možete umetnuti i izravno kao argumente funkcije:
MsgBox WorksheetFunction.PMT(0,0625 /12, 360, -150000)
Međutim, korištenje varijabli za pohranu parametara čini kod lakšim za čitanje i modificiranje, ako je potrebno.
Korištenje funkcije pretraživanja
Sljedeći primjer koristi funkcije VBA InputBox i MsgBox, plus Excelovu funkciju VLOOKUP. Traži broj dijela, a zatim dobiva cijenu iz tabele za pretraživanje. U nastavku se raspon A1:B13 naziva Cjenik.
Raspon, nazvan PriceList, sadrži cijene dijelova.
Pod GetPrice()
Dim PartNum kao varijanta
Dim Price As Double
PartNum = InputBox ("Unesite broj dijela")
Sheets(“Cijene”).Aktivirajte
Cijena = Funkcija radnog lista.VLOOKUP(Broj dijela, Raspon(“Cijena”), 2, False)
MsgBox PartNum & " troškovi " & Cijena
Kraj Sub
Evo kako postupak GetPrice funkcionira:
-
VBA-ova funkcija InputBox traži od korisnika broj dijela.
-
Broj dijela koji korisnik unese dodjeljuje se varijabli PartNum.
-
Sljedeća izjava aktivira radni list Cijene, samo u slučaju da već nije aktivan list.
-
Kod koristi funkciju VLOOKUP za pronalaženje broja dijela u tablici.
-
Primijetite da su argumenti koje koristite u ovoj izjavi isti kao oni koje biste koristili s funkcijom u formuli radnog lista. Ova izjava dodjeljuje rezultat funkcije varijabli Price.
-
Kod prikazuje cijenu za dio putem funkcije MsgBox.
Ovaj postupak nema nikakvog rukovanja pogreškama i ne uspijeva ako unesete nepostojeći broj dijela. (Probajte.) Da je ovo stvarna aplikacija koja se koristi u stvarnom poslovanju, htjeli biste dodati neke izjave koje se elegantnije bave pogreškama.
Unos funkcija radnog lista
Ne možete koristiti dijaloški okvir Excel Paste Funkcija za umetanje funkcije radnog lista u VBA modul. Umjesto toga, unesite takve funkcije na starinski način: ručno. Međutim, možete koristiti dijaloški okvir Zalijepi funkciju da biste identificirali funkciju koju želite koristiti i saznali o njezinim argumentima.
Također možete iskoristiti prednost VBE-ove opcije Auto List Members, koja prikazuje padajući popis svih funkcija radnog lista. Samo upišite Application.WorksheetFunction , nakon čega slijedi točka. Zatim ćete vidjeti popis funkcija koje možete koristiti. Ako ova značajka ne radi, odaberite naredbu VBE Alati → Opcije, kliknite karticu Uređivač i stavite kvačicu pored Automatski članovi popisa.
Dobivanje popisa funkcija radnog lista koje možete koristiti u svom VBA kodu.
Više o korištenju funkcija radnog lista
Pridošlice u VBA često brkaju ugrađene funkcije VBA i funkcije Excelove radne knjige. Dobro pravilo koje treba zapamtiti je da VBA ne pokušava ponovno izmisliti točak. Većinom VBA ne duplicira funkcije Excelovog radnog lista.
Za većinu funkcija radnog lista koje nisu dostupne kao metode objekta WorksheetFunction, možete koristiti ekvivalentni VBA ugrađeni operator ili funkciju. Na primjer, funkcija radnog lista MOD nije dostupna u objektu WorksheetFunction jer VBA ima ekvivalent: svoj ugrađeni Mod operator.
Poanta? Ako trebate koristiti funkciju, prvo odredite ima li VBA nešto što zadovoljava vaše potrebe. Ako ne, provjerite funkcije radnog lista. Ako ništa drugo ne uspije, možda ćete moći napisati prilagođenu funkciju pomoću VBA.