Även om VBA erbjuder ett anständigt utbud av inbyggda funktioner, kanske du inte alltid hittar exakt det du behöver. Som tur är kan du också använda de flesta av Excels kalkylbladsfunktioner i dina VBA-procedurer. De enda kalkylbladsfunktioner som du inte kan använda är de som har en motsvarande VBA-funktion. Du kan till exempel inte använda Excels RAND-funktion (som genererar ett slumptal) eftersom VBA har en motsvarande funktion: Rnd.
VBA gör Excels kalkylbladsfunktioner tillgängliga via WorksheetFunction-objektet, som finns i Application-objektet. Här är ett exempel på hur du kan använda Excels SUM-funktion i en VBA-sats:
Totalt = Application.WorksheetFunction.SUM(Range(“A1:A12”))
Du kan utelämna antingen Application-delen eller WorksheetFunction-delen av uttrycket. I båda fallen räknar VBA ut vad du gör. Med andra ord, dessa tre uttryck fungerar alla exakt likadant:
Totalt = Application.WorksheetFunction.SUM(Range(“A1:A12”))
Totalt = KalkylbladFunction.SUM(Range(“A1:A12”))
Totalt = Application.SUM(Range(“A1:A12”))
Min personliga preferens är att använda WorksheetFunction-delen bara för att göra det helt klart att koden använder en Excel-funktion.
Exempel på arbetsbladsfunktioner
Här upptäcker du hur du använder kalkylbladsfunktioner i dina VBA-uttryck.
Hitta det maximala värdet i ett intervall
Här är ett exempel som visar hur du använder Excels MAX-kalkylbladsfunktion i en VBA-procedur. Denna procedur visar det maximala värdet i kolumn A i det aktiva arbetsbladet:

Använda en kalkylbladsfunktion i din VBA-kod.
Sub ShowMax()
Dim TheMax As Double
TheMax = WorksheetFunction.MAX(Range(“A:A”))
MsgBox TheMax
Avsluta Sub
Du kan använda MIN-funktionen för att få det minsta värdet i ett intervall. Och som du kanske förväntar dig kan du använda andra kalkylbladsfunktioner på liknande sätt. Du kan till exempel använda funktionen LARGE för att bestämma det k: te största värdet i ett område. Följande uttryck visar detta:
SecondHighest = WorksheetFunction.LARGE(Range(“A:A”),2)
Observera att funktionen LARGE använder två argument. Det andra argumentet representerar den k: te delen — 2, i detta fall (det näst största värdet).
Beräkna en bolånebetalning
I nästa exempel används funktionen PMT-kalkylblad för att beräkna en bolånebetalning. Tre variabler används för att lagra data som skickas till Pmt-funktionen som argument. En meddelanderuta visar den beräknade betalningen.
Sub PmtCalc()
Dim InRate As Double
Dim LoanAmt As Double
Dimperioder lika långa
IntRate = 0,0625 / 12
Perioder = 30 * 12
LoanAmt = 150 000
MsgBox WorksheetFunction.PMT(IntRate, Periods, -LoanAmt)
Avsluta Sub
Som följande sats visar kan du också infoga värdena direkt som funktionsargument:
MsgBox WorksheetFunction.PMT(0,0625 /12, 360, -150000)
Men att använda variabler för att lagra parametrarna gör koden lättare att läsa och ändra vid behov.
Använder en uppslagsfunktion
Följande exempel använder VBA:s InputBox- och MsgBox-funktioner, plus Excels VLOOKUP-funktion. Den frågar efter ett artikelnummer och får sedan priset från en uppslagstabell. Nedan heter intervall A1:B13 Prislista.

Sortimentet, som heter PriceList, innehåller priser på delar.
Sub GetPrice()
Dim PartNum Som Variant
Dim Pris Som Dubbel
PartNum = InputBox(”Ange artikelnumret”)
Sheets ("Priser"). Aktivera
Pris = WorksheetFunction.VLOOKUP(DelNum, Range(“Prislista”), 2, Falskt)
MsgBox PartNum & " kostnader " & Pris
Avsluta Sub
Så här fungerar GetPrice-proceduren:
-
VBA:s InputBox-funktion ber användaren om ett artikelnummer.
-
Artikelnumret som användaren anger tilldelas variabeln PartNum.
-
Nästa uttalande aktiverar kalkylbladet Priser, ifall det inte redan är det aktiva arket.
-
Koden använder VLOOKUP-funktionen för att hitta artikelnumret i tabellen.
-
Lägg märke till att argumenten du använder i den här satsen är desamma som de du skulle använda med funktionen i en kalkylbladsformel. Detta påstående tilldelar resultatet av funktionen till variabeln Pris.
-
Koden visar priset för delen via MsgBox-funktionen.
Denna procedur har ingen felhantering, och den misslyckas totalt om du anger ett icke-existerande artikelnummer. (Prova det.) Om detta var ett verkligt program som används i en verklig verksamhet, skulle du vilja lägga till några uttalanden som hanterar fel mer elegant.
Ange kalkylbladsfunktioner
Du kan inte använda dialogrutan Klistra in i Excel för att infoga en kalkylbladsfunktion i en VBA-modul. Ange i stället sådana funktioner på gammaldags sätt: för hand. Du kan dock använda dialogrutan Klistra in funktion för att identifiera funktionen du vill använda och ta reda på dess argument.
Du kan också dra nytta av VBE:s Auto List Members-alternativ, som visar en rullgardinslista med alla kalkylbladsfunktioner. Skriv bara Application.WorksheetFunction , följt av en punkt. Då ser du en lista över de funktioner du kan använda. Om den här funktionen inte fungerar, välj VBE:s Verktyg → Alternativ, klicka på fliken Redigerare och placera en bock bredvid Auto List Members.

Få en lista över kalkylbladsfunktioner som du kan använda i din VBA-kod.
Mer om att använda kalkylbladsfunktioner
Nykomlingar på VBA blandar ofta ihop VBA:s inbyggda funktioner och Excels arbetsboksfunktioner. En bra regel att komma ihåg är att VBA inte försöker uppfinna hjulet på nytt. För det mesta duplicerar VBA inte Excel-kalkylbladsfunktioner.
För de flesta kalkylbladsfunktioner som inte är tillgängliga som metoder för WorksheetFunction-objektet kan du använda en motsvarande inbyggd VBA-operator eller funktion. Till exempel är MOD-kalkylbladsfunktionen inte tillgänglig i WorksheetFunction-objektet eftersom VBA har en motsvarighet: dess inbyggda Mod-operator.
Slutsats? Om du behöver använda en funktion, avgör först om VBA har något som uppfyller dina behov. Om inte, kolla in kalkylbladsfunktionerna. Om allt annat misslyckas kan du kanske skriva en anpassad funktion genom att använda VBA.