I VBA-programmering returnerar en funktion ett värde. Du kan köra funktionsprocedurer och anropa funktionen i Excel 2016. Funktioner, till skillnad från underprocedurer, kan köras på bara två sätt:
Prova denna enkla funktion. Ange det i en VBA-modul:
Funktion CubeRoot(nummer)
CubeRoot = nummer ^ (1 / 3)
Avsluta funktion
Den här funktionen är ganska knäpp; den beräknar bara kubikroten av talet som skickas till den som argument. Det ger dock en utgångspunkt för att förstå funktioner. Det illustrerar också ett viktigt koncept om funktioner: hur man returnerar värdet. (Du kommer väl ihåg att en funktion returnerar ett värde, eller hur?)
Observera att den enda kodraden som utgör denna funktionsprocedur utför en beräkning. Resultatet av matematiken (tal i potensen 1/3) tilldelas variabeln CubeRoot. Inte en slump är CubeRoot också namnet på funktionen. För att tala om för funktionen vilket värde som ska returneras, tilldelar du det värdet till namnet på funktionen.
Anropar funktionen från en underprocedur
Eftersom du inte kan köra en funktion direkt måste du anropa den från en annan procedur. Ange följande enkla procedur i samma VBA-modul som innehåller CubeRoot-funktionen:
Sub CallerSub()
Ans = CubeRoot(125)
MsgBox Ans
Avsluta Sub
När du kör CallerSub-proceduren visar Excel en meddelanderuta som innehåller värdet för variabeln Ans, vilket är 5.
Här är vad som händer: CubeRoot-funktionen exekveras och den får argumentet 125. Beräkningen utförs av funktionens kod (med värdet som skickas som argument), och funktionens returnerade värde tilldelas variabeln Ans. MsgBox-funktionen visar sedan värdet på Ans-variabeln.
Försök att ändra argumentet som skickas till CubeRoot-funktionen och kör CallerSub-makrot igen. Det fungerar precis som det ska — förutsatt att du ger funktionen ett giltigt argument (ett positivt tal).
Förresten, CallerSub-proceduren skulle kunna förenklas lite. Ans-variabeln krävs egentligen inte om inte din kod kommer att använda den variabeln senare. Du kan använda detta enstaka uttalande för att få samma resultat:
MsgBox CubeRoot(125)
Anropa en funktion från en kalkylbladsformel
Nu är det dags att anropa denna VBA-funktionsprocedur från en kalkylbladsformel. Aktivera ett kalkylblad i samma arbetsbok som innehåller CubeRoot-funktionsdefinitionen. Ange sedan följande formel i valfri cell:
=CubeRoot(1728)
Cellen visar 12, vilket verkligen är kubroten av 1 728.
Som du kanske förväntar dig kan du använda en cellreferens som argument för CubeRoot-funktionen. Till exempel, om cell A1 innehåller ett värde kan du ange =CubeRoot(A1) . I det här fallet returnerar funktionen talet som erhålls genom att beräkna kubroten av värdet i A1.
Du kan använda den här funktionen hur många gånger som helst i kalkylbladet. Precis som Excels inbyggda funktioner visas dina anpassade funktioner i dialogrutan Infoga funktion. Klicka på knappen Infoga funktion i verktygsfältet och välj kategorin Användardefinierad. Dialogrutan Infoga funktion listar din alldeles egna funktion.

CubeRoot-funktionen visas i kategorin Användardefinierad i dialogrutan Infoga funktion.
Om du vill att dialogrutan Infoga funktion ska visa en beskrivning av funktionen, följ dessa steg:
Välj Utvecklare → Kod → Makron.
Excel visar makrodialogrutan, men CubeRoot visas inte i listan. (CubeRoot är en funktionsprocedur, och den här listan visar bara underprocedurer.) Oroa dig inte.
Skriv ordet CubeRoot i rutan Makronamn.
Klicka på knappen Alternativ.
Ange en beskrivning av funktionen i rutan Beskrivning.
Klicka på OK för att stänga dialogrutan Makroalternativ.
Stäng makrodialogrutan genom att klicka på knappen Avbryt.
Denna beskrivande text visas nu i dialogrutan Infoga funktion.
Kolla in CubeRoot-funktionen som används i kalkylbladsformler.

Använda CubeRoot-funktionen i formler.