I VBA-programmering returnerer en funktion en værdi. Du kan udføre funktionsprocedurer og kalde funktionen i Excel 2016. Funktioner kan i modsætning til underprocedurer kun udføres på to måder:
Prøv denne simple funktion. Indtast det i et VBA-modul:
Funktion CubeRoot (nummer)
CubeRoot = tal ^ (1/3)
Afslut funktion
Denne funktion er ret skør; den beregner blot terningroden af det tal, der sendes til den som argument. Det giver dog et udgangspunkt for at forstå funktioner. Det illustrerer også et vigtigt koncept om funktioner: hvordan man returnerer værdien. (Du kan huske, at en funktion returnerer en værdi, ikke?)
Bemærk, at den enkelte kodelinje, der udgør denne funktionsprocedure, udfører en beregning. Resultatet af matematikken (tal i potensen 1/3) tildeles variablen CubeRoot. Ikke tilfældigt er CubeRoot også navnet på funktionen. For at fortælle funktionen, hvilken værdi der skal returneres, tildeler du denne værdi til navnet på funktionen.
Kaldning af funktionen fra en underprocedure
Fordi du ikke kan udføre en funktion direkte, skal du kalde den fra en anden procedure. Indtast følgende simple procedure i det samme VBA-modul, som indeholder CubeRoot-funktionen:
Sub CallerSub()
Ans = CubeRoot(125)
MsgBox Ans
Slut Sub
Når du udfører CallerSub-proceduren, viser Excel en meddelelsesboks, der indeholder værdien af Ans-variablen, som er 5.
Her er, hvad der sker: CubeRoot-funktionen udføres, og den modtager et argument på 125. Beregningen udføres af funktionens kode (ved hjælp af den værdi, der sendes som et argument), og funktionens returnerede værdi tildeles Ans-variablen. MsgBox-funktionen viser derefter værdien af Ans-variablen.
Prøv at ændre argumentet, der er sendt til CubeRoot-funktionen, og kør CallerSub-makroen igen. Det fungerer lige som det skal - forudsat at du giver funktionen et gyldigt argument (et positivt tal).
CallerSub-proceduren kunne i øvrigt forenkles en smule. Ans-variablen er egentlig ikke påkrævet, medmindre din kode vil bruge den variabel senere. Du kan bruge denne enkelte sætning til at opnå det samme resultat:
MsgBox CubeRoot(125)
Kaldning af en funktion fra en regnearksformel
Nu er det tid til at kalde denne VBA-funktionsprocedure fra en regnearksformel. Aktiver et regneark i den samme projektmappe, der indeholder CubeRoot-funktionsdefinitionen. Indtast derefter følgende formel i en hvilken som helst celle:
=CubeRoot(1728)
Cellen viser 12, som faktisk er terningroden af 1.728.
Som du måske forventer, kan du bruge en cellereference som argument for CubeRoot-funktionen. For eksempel, hvis celle A1 indeholder en værdi, kan du indtaste =CubeRoot(A1) . I dette tilfælde returnerer funktionen tallet opnået ved at beregne terningroden af værdien i A1.
Du kan bruge denne funktion et vilkårligt antal gange i arbejdsarket. Ligesom Excels indbyggede funktioner vises dine brugerdefinerede funktioner i dialogboksen Indsæt funktion. Klik på knappen Indsæt funktion på værktøjslinjen, og vælg kategorien Brugerdefineret. Dialogboksen Indsæt funktion viser din helt egen funktion.
CubeRoot-funktionen vises i kategorien Brugerdefineret i dialogboksen Indsæt funktion.
Hvis du ønsker, at dialogboksen Indsæt funktion skal vise en beskrivelse af funktionen, skal du følge disse trin:
Vælg Udvikler → Kode → Makroer.
Excel viser Macro-dialogboksen, men CubeRoot vises ikke på listen. (CubeRoot er en funktionsprocedure, og denne liste viser kun underprocedurer.) Bliv ikke bekymret.
Skriv ordet CubeRoot i feltet Makronavn.
Klik på knappen Indstillinger.
Indtast en beskrivelse af funktionen i boksen Beskrivelse.
Klik på OK for at lukke dialogboksen Makroindstillinger.
Luk Macro-dialogboksen ved at klikke på knappen Annuller.
Denne beskrivende tekst vises nu i dialogboksen Indsæt funktion.
Tjek CubeRoot-funktionen, der bruges i regnearksformler.
Brug af CubeRoot-funktionen i formler.