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.

  • 🎯 Definition: En funktion utför en specifik uppgift och returnerar ett enda resultat till den anropande koden.
  • 🧾 Syntax: Funktionsnamn(argument) Som Type öppnar blocket och End Function stänger det.
  • ↩️ Returnera ett värde: Tilldela resultatet till funktionsnamnet, som i addNumbers = förstatal + andratal.
  • 🔢 Returtyp: Deklarera så länge eller så Double undviker den långsammare standardvarianten.
  • 🖱️ Kallelse: En kommandoknapp skickar två tal och visar den returnerade summan i en meddelanderuta.
  • 📊 Användning av arbetsblad: En publik funktion i en standardmodul blir en användardefinierad formel i valfri cell.

Excel VBA-funktion

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
  • "Privat funktion myFunction(...)"
  • Här används nyckelordet "Function" för att deklarera en funktion som heter "myFunction" och starta funktionen.
  • Nyckelordet 'Privat' används för att specificera funktionens omfattning
  • "ByVal arg1 som heltal, ByVal arg2 som heltal"
  • Den deklarerar två parametrar av heltalsdatatyp med namnet 'arg1' och 'arg2'.
  • myFunction = arg1 + arg2
  • utvärderar uttrycket arg1 + arg2 och tilldelar resultatet till namnet på funktionen.
  • "Avsluta funktion"
  • "Avsluta funktion" används för att avsluta funktionens brödtext

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.

  1. Skapa användargränssnittet
  2. Lägg till funktionen
  3. Skriv kod för kommandoknappen
  4. Testa koden

Steg 1) Användargränssnitt

Lägg till en kommandoknapp till kalkylbladet som visas nedan

VBA-funktioner och subrutiner

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

VBA-funktioner och subrutiner

Steg 2) Funktionskod.

  1. Tryck på Alt + F11 för att öppna kodfönstret
  2. 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
  • “Privat funktion tilläggNumbers(…) ”
  • Den deklarerar en privat funktion "lägg tillNumbers” som accepterar två heltalsparametrar.
  • "ByVal firstNumber As Integer, ByVal secondNumber As Integer"
  • Den deklarerar två parametervariabler firstNumber och secondNumber
  • "Lägg tillNumbers = firstNumber + secondNumber"
  • Den lägger till firstNumber- och secondNumber-värdena och tilldelar summan som ska adderasNumbers.

Steg 3) Skriv Code som anropar funktionen

  1. Högerklicka på btnAddNumbers kommandoknapp
  2. Välj vy Code
  3. 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)"
  • Den kallar funktionen addNumbers och passerar in 2 och 3 som parametrar. Funktionen returnerar summan av de två talen fem (5)

Steg 4) Kör programmet, du får följande resultat

VBA-funktioner och subrutiner

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.

Vanliga frågor

Inte direkt. Returnera en array eller en anpassad typ för att bära flera värden i ett resultat, eller deklarera de extra parametrarna ByRef så att funktionen skriver tillbaka till anroparens variabler.

Lägg till nyckelordet Optional med en standardinställning, som i Optional ByVal Rate As Double = 0.05. Varje parameter efter en valfri parameter måste också vara valfri, och de måste komma sist i listan.

Ja, via Application.WorksheetFunction, till exempel Application.WorksheetFunction.Sum(Range("A1:A10")). Funktioner som VBA redan tillhandahåller, till exempel Left eller Trim, anropas direkt utan det prefixet.

Ja. Klistra in kalkylbladsformeln så returnerar en AI-assistent en motsvarande Public Function med namngivna argument och en deklarerad returtyp. Jämför båda resultaten på exempelrader innan du ersätter formeln.

Ja. Ange funktionen och formeln, så pekar en AI-assistent på orsaker som en argumenttypsmatchning, en saknad returtilldelning eller ett försök att ändra en cell inifrån en användardefinierad funktion.

Sammanfatta detta inlägg med: