Handledning för Excel VBA-funktioner: Returnera, Ring, Exempel
⚡ Smart sammanfattning
En VBA-funktion i Excel är ett kodblock som utför en uppgift och returnerar ett resultat till det som anropar den. Den här sidan behandlar deklarationssyntax, retur av ett värde, ett exempel på en bearbetad addition och användning av en funktion inuti en kalkylbladscell.

Vad är en funktion?
En funktion är en kod som utför en specifik uppgift och returnerar ett resultat. Funktioner används mest för att utföra repetitiva uppgifter som att formatera data för utdata, utföra beräkningar, etc.
Anta att du är utveckladping ett program som beräknar ränta på ett lån. Du kan skapa en funktion som accepterar lånebeloppet och återbetalningsperioden. Funktionen kan sedan använda lånebeloppet och återbetalningsperioden för att beräkna räntan och returnera värdet.
Varför använda funktioner
Fördelarna med att använda funktioner är desamma som de som anges för subrutiner: de delar upp ett långt program i hanterbara delar, de kan återanvändas var som helst i projektet och ett beskrivande namn dokumenterar vad koden gör. Handledning för Excel VBA-subrutin täcker dessa förmåner fullt ut.
Regler för namngivning av funktioner
Namngivningsreglerna är också identiska med dem för subrutiner. Ett funktionsnamn får inte innehålla ett mellanslag, måste börja med en bokstav eller ett understreck och får inte vara ett reserverat namn. VBA nyckelord som Funktion, Privat eller Slut.
VBA-syntax för att deklarera funktion
Private Function myFunction (ByVal arg1 As Integer, ByVal arg2 As Integer) myFunction = arg1 + arg2 End Function
HÄR i syntaxen,
| Code | Handling |
|---|---|
|
|
|
|
|
|
|
|
Hur man returnerar ett värde och ställer in funktionens datatyp
En funktion har ett jobb som en subrutin inte har: den ger tillbaka ett värde. Två detaljer styr det värdet, och båda är lätta att missa.
Den första är tilldelningen. VBA har ingen Return-sats. Istället tilldelar man resultatet till funktionens eget namn, vilket är anledningen till att raden lyder myFunction = arg1 + arg2Om den tilldelningen aldrig körs returnerar funktionen tyst ett tomt värde istället för att generera ett fel, så varje gren i koden måste ställa in det.
Den andra är returtypen. Deklarationen ovan slutar vid den avslutande parentesen, så funktionen returnerar en Variant. Att lägga till en As-klausul efter parenteserna åtgärdar typen, som är snabbare, använder mindre minne och låter kompilatorn upptäcka en avvikelse.
| Förklaring | Returer | När ska du använda den |
|---|---|---|
| Funktion f(x som lång) | Variant | Endast när resultattypen verkligen varierar |
| Funktion f(x lika lång) lika lång | Lång | Heltal såsom antal och radnummer |
| Funktion f(x Så länge) Som Double | Double | Alla beräkningar som producerar decimaler |
| Funktion f(x lika lång) som sträng | Sträng | Formaterad text returnerad för visning |
| Funktion f(x lika lång) som boolesk | Boolean | En valideringskontroll som svarar sant eller falskt |
💡 Tips: Använd Exit-funktionen för att lämna tidigt när returvärdet är inställt, på samma sätt som Exit Sub lämnar en subrutin.
Funktion demonstrerad med exempel:
Funktioner är mycket lika subrutinen. Den stora skillnaden mellan en subrutin och en funktion är att funktionen returnerar ett värde när den anropas. Medan en subrutin inte returnerar ett värde, när den anropas. Låt oss säga att du vill lägga till två siffror. Du kan skapa en funktion som accepterar två tal och returnerar summan av talen.
- Skapa användargränssnittet
- Lägg till funktionen
- Skriv kod för kommandoknappen
- Testa koden
Steg 1) Användargränssnitt
Lägg till en kommandoknapp till kalkylbladet som visas nedan
Ställ in följande egenskaper för CommandButton1 till följande.
| S / N | kontroll | Fast egendom | Värderar |
|---|---|---|---|
| 1 | Kommandoknapp1 | Namn | btnLägg tillNumbers |
| 2 | Bildtext | Lägg till Numbers Funktion |
Ditt gränssnitt bör nu se ut enligt följande
Steg 2) Funktionskod.
- Tryck på Alt + F11 för att öppna kodfönstret
- Lägg till följande kod
Private Function addNumbers(ByVal firstNumber As Integer, ByVal secondNumber As Integer) addNumbers = firstNumber + secondNumber End Function
HÄR i koden,
| Code | Handling |
|---|---|
|
|
|
|
|
|
Steg 3) Skriv Code som anropar funktionen
- Högerklicka på btnAddNumbers kommandoknapp
- Välj vy Code
- Lägg till följande kod
Private Sub btnAddNumbers_Click() MsgBox addNumbers(2, 3) End Sub
HÄR i koden,
| Code | Handling |
|---|---|
| "MeddBox lägga tillNumbers(ett)" |
|
Steg 4) Kör programmet, du får följande resultat
Ladda ner Excel som innehåller ovanstående kod
Ladda ner ovanstående Excel-fil Code
Knappen ovan anropar funktionen från VBA-kod. En funktion kan också anropas från själva kalkylbladet, utan någon knapp alls.
Hur man använder en VBA-funktion i en cell i ett kalkylblad
En funktion skriven i VBA kan skrivas in i en cell precis som SUMMA eller LETARAD. Excel kallar detta en användardefinierad funktion, eller UDF, och det är anledningen till att många lär sig funktioner före subrutiner. Tre villkor måste vara uppfyllda.
- Placera den i en standardmodul: Infoga, Modul i redigeraren. En funktion som lagras bakom ett kalkylblad eller i ThisWorkbook syns inte i formelfältet.
- Förklara det offentligt: Exemplet ovan använder Privat, vilket döljer det från Excel. Offentlig är standardinställningen, så det räcker med att ta bort nyckelordet.
- Returnera ett värde, ändra ingenting: En UDF kan inte formatera celler, ta bort rader eller skriva till en annan cell. Excel blockerar dessa åtgärder och cellen visar #VÄRDE!.
Funktionen nedan konverterar en temperatur och kan användas var som helst på arket.
Public Function CelsiusToF(ByVal Celsius As Double) As Double CelsiusToF = (Celsius * 9 / 5) + 32 End Function
Spara arbetsboken som en makroaktiverad .xlsm-fil och skriv sedan =CelsiusTillF(A1) i valfri cell. Resultatet uppdateras när A1 ändras, och namnet visas i listan för automatisk komplettering av formeln under kategorin Användardefinierad. Eftersom arbetsboken nu innehåller makron måste alla som öppnar den aktivera innehåll innan formeln returnerar ett värde snarare än #NAMN?.
Vanliga VBA-funktionsfel och hur man åtgärdar dem
Fyra problem står för de flesta funktioner som kompilerar men returnerar fel svar.
- Funktionen returnerar Tomt eller 0: Resultatet tilldelades aldrig funktionsnamnet, eller så hoppar en gren av en If-sats över tilldelningen. Ange returvärdet för varje sökväg.
- #NAMN? i en cell i kalkylbladet: Funktionen är Privat, finns i en arkmodul istället för en standardmodul, eller så sparades arbetsboken utan att makron var aktiverade.
- Överfyllning med heltalsargument: Exemplet använder As Integer, vilket slutar vid 32 767. Ändra både parametrar och returtypen till Long för alla verkliga data.
- Ett ändrat argument överraskar uppringaren: Om ByVal utelämnas skickar VBA själva variabeln, så funktionen kan ändra anroparens värde. Skriv ByVal om inte den effekten önskas.



