Excel VBA-functiehandleiding: Return, Call, Voorbeelden

โšก Slimme samenvatting

Een Excel VBA-functie is een codeblok dat een taak uitvoert en een resultaat teruggeeft aan de aanroeper. Deze pagina behandelt de declaratiesyntaxis, het retourneren van een waarde, een uitgewerkt optelvoorbeeld en het gebruik van een functie in een werkbladcel.

  • ๐ŸŽฏ Definitie: Een functie voert een specifieke taak uit en retourneert รฉรฉn enkel resultaat aan de aanroepende code.
  • ๐Ÿงพ Syntax: Functienaam(argumenten) As Type opent het blok en End Function sluit het.
  • ๏ธ Een waarde retourneren: Wijs het resultaat toe aan de functienaam, zoals in 'add'.Numbers = eersteGetal + tweedeGetal.
  • ๐Ÿ”ข Retourtype: Verklaringen zolang of als Double vermijdt de tragere standaardvariant.
  • ๏ธ Roeping: Een opdrachtknop geeft twee getallen door en toont de som in een berichtvenster.
  • ๐Ÿ“Š Gebruik van het werkblad: Een openbare functie in een standaardmodule wordt een door de gebruiker gedefinieerde formule in elke cel.

Excel VBA-functie

Wat is een functie?

Een functie is een stukje code dat een specifieke taak uitvoert en een resultaat retourneert. Functies worden meestal gebruikt om repetitieve taken uit te voeren, zoals het opmaken van gegevens voor uitvoer, het uitvoeren van berekeningen, enz.

Stel dat u aan het ontwikkelen bentping Een programma dat de rente op een lening berekent. Je kunt een functie maken die het leenbedrag en de terugbetalingstermijn als invoer accepteert. De functie kan vervolgens het leenbedrag en de terugbetalingstermijn gebruiken om de rente te berekenen en het resultaat terug te geven.

Waarom functies gebruiken

De voordelen van het gebruik van functies zijn dezelfde als die voor subroutines: ze verdelen een lang programma in beheersbare delen, ze kunnen overal in het project hergebruikt worden en een beschrijvende naam documenteert wat de code doet. Handleiding voor Excel VBA-subroutines dekt die voordelen volledig.

Regels voor het benoemen van functies

De naamgevingsregels zijn identiek aan die voor subroutines. Een functienaam mag geen spatie bevatten, moet beginnen met een letter of een underscore en mag geen gereserveerde waarde zijn. VBA trefwoorden zoals Function, Private of End.

VBA-syntaxis voor het declareren van functie

Private Function myFunction (ByVal arg1 As Integer, ByVal arg2 As Integer)
    myFunction = arg1 + arg2
End Function

HIER in de syntaxis,

Code Actie
  • โ€œPrivรฉfunctie mijnFunctie(โ€ฆ)โ€
  • Hier wordt het trefwoord โ€œFunctieโ€ gebruikt om een โ€‹โ€‹functie met de naam โ€œmijnFunctieโ€ te declareren en de hoofdtekst van de functie te starten.
  • Het trefwoord 'Privรฉ' wordt gebruikt om de reikwijdte van de functie aan te geven
  • โ€œByVal arg1 als geheel getal, ByVal arg2 als geheel getalโ€
  • Het declareert twee parameters van het gegevenstype geheel getal, genaamd 'arg1' en 'arg2.'
  • mijnFunctie = arg1 + arg2
  • evalueert de uitdrukking arg1 + arg2 en wijst het resultaat toe aan de naam van de functie.
  • โ€œEindefunctieโ€
  • "End Function" wordt gebruikt om de body van de functie te beรซindigen.

Hoe retourneer je een waarde en stel je het gegevenstype van de functie in?

Een functie heeft รฉรฉn taak die een subroutine niet heeft: het geeft een waarde terug. Twee details bepalen die waarde, en beide zijn gemakkelijk over het hoofd te zien.

Het eerste punt betreft de toewijzing. VBA kent geen Return-instructie. In plaats daarvan wijs je het resultaat toe aan de functie zelf, vandaar dat de regel er zo uitziet: mijnFunctie = arg1 + arg2Als die toewijzing nooit wordt uitgevoerd, retourneert de functie stilzwijgend een lege waarde in plaats van een foutmelding te geven, dus elke tak van de code moet die waarde instellen.

Het tweede punt betreft het retourtype. De bovenstaande declaratie eindigt bij de sluitende haak, waardoor de functie een Variant retourneert. Door na de haakjes een As-clausule toe te voegen, wordt het type vastgelegd. Dit is sneller, gebruikt minder geheugen en zorgt ervoor dat de compiler een typefout kan detecteren.

Verklaring Retourneren Wanneer u het moet gebruiken
Functie f(x As Long) Variant Alleen wanneer het resultaattype daadwerkelijk varieert
Functie f(x As Long) As Long Lang Hele getallen zoals aantallen en rijnummers
Functie f(x zolang) als Double Double Elke berekening die decimalen oplevert
Functie f(x As Long) As String Draad Opgemaakte tekst wordt weergegeven.
Functie f(x As Long) As Boolean Boolean Een validatiecontrole die met waar of onwaar antwoordt.

๐Ÿ’กTip: Gebruik Exit Function om vroegtijdig te stoppen zodra de retourwaarde is ingesteld, op dezelfde manier als Exit Sub een subroutine verlaat.

Functie gedemonstreerd met voorbeeld:

Functies lijken erg op de subroutine. Het belangrijkste verschil tussen een subroutine en een functie is dat de functie een waarde retourneert wanneer deze wordt aangeroepen. Terwijl een subroutine geen waarde retourneert wanneer deze wordt aangeroepen. Stel dat u twee getallen wilt optellen. U kunt een functie maken die twee getallen accepteert en de som van de getallen retourneert.

  1. Maak de gebruikersinterface
  2. Voeg de functie toe
  3. Schrijf code voor de opdrachtknop
  4. Test de code

Stap 1) Gebruikersinterface

Voeg een opdrachtknop toe aan het werkblad, zoals hieronder weergegeven

VBA-functies en subroutine

Stel de volgende eigenschappen van CommandButton1 in op de volgende waarden.

S / N Controleer: Eigendom Waarde
1 CommandoKnop1 Naam btnToevoegenNumbers
2 Onderschrift Toevoegen Numbers Functie

Uw interface zou er nu als volgt uit moeten zien

VBA-functies en subroutine

Stap 2) Functiecode.

  1. Druk op Alt + F11 om het codevenster te openen
  2. Voeg de volgende code toe
Private Function addNumbers(ByVal firstNumber As Integer, ByVal secondNumber As Integer)
    addNumbers = firstNumber + secondNumber
End Function

HIER in de code,

Code Actie
  • โ€œPrivรฉfunctie toevoegenNumbers(...) "
  • Het verklaart een privรฉfunctie โ€œtoevoegenNumbersโ€ dat twee gehele parameters accepteert.
  • โ€œByVal firstNumber als geheel getal, ByVal secondNumber als geheel getalโ€
  • Het declareert twee parametervariabelen firstNumber en secondNumber
  • "toevoegenNumbers = eersteGetal + tweedeGetalโ€
  • Het voegt de waarden firstNumber en secondNumber toe en wijst de op te tellen som toeNumbers.

Stap 3) Schrijf Code die de functie aanroept

  1. Klik met de rechtermuisknop op de knop 'btnAdd'.Numbers opdrachtknop
  2. Selecteer Bekijken Code
  3. Voeg de volgende code toe
Private Sub btnAddNumbers_Click()
    MsgBox addNumbers(2, 3)
End Sub

HIER in de code,

Code Actie
โ€œBerichtBox toevoegenNumbers(een)"
  • Het roept de functie addNumbers en geeft 2 en 3 door als parameters. De functie retourneert de som van de twee getallen vijf (5)

Stap 4) Voer het programma uit en u krijgt de volgende resultaten

VBA-functies en subroutine

Download Excel met bovenstaande code

Download het bovenstaande Excel-bestand. Code

De bovenstaande knop roept de functie aan vanuit VBA-code. Een functie kan ook rechtstreeks vanuit het werkblad worden aangeroepen, zonder dat er een knop nodig is.

Hoe gebruik je een VBA-functie in een werkbladcel?

Een functie die in VBA is geschreven, kan net als SUM of VLOOKUP rechtstreeks in een cel worden getypt. Excel noemt dit een door de gebruiker gedefinieerde functie (UDF), en dit is de reden waarom veel mensen eerst functies leren voordat ze subroutines leren. Er moet aan drie voorwaarden worden voldaan.

  • Plaats het in een standaardmodule: Voeg een module in de editor in. Een functie die is opgeslagen achter een werkblad of in ThisWorkbook is niet zichtbaar in de formulebalk.
  • Maak het openbaar: Het bovenstaande voorbeeld gebruikt 'Privรฉ', waardoor het verborgen blijft voor Excel. 'Openbaar' is de standaardinstelling, dus het is voldoende om het trefwoord te verwijderen.
  • Geef een waarde terug, verander niets: Een UDF (User Defined Function) kan geen cellen formatteren, rijen verwijderen of naar een andere cel schrijven. Excel blokkeert deze acties en de cel toont #WAARDE!.

De onderstaande functie zet een temperatuur om en kan overal op het werkblad worden gebruikt.

Public Function CelsiusToF(ByVal Celsius As Double) As Double
    CelsiusToF = (Celsius * 9 / 5) + 32
End Function

Sla het werkblad op als een .xlsm-bestand met macro's en typ vervolgens het volgende: =CelsiusToF(A1) in elke cel. Het resultaat wordt bijgewerkt wanneer A1 verandert en de naam verschijnt in de lijst met formule-aanvullingen onder de categorie 'Gebruikersgedefinieerd'. Omdat het werkblad nu macro's bevat, moet iedereen die het opent de inhoud inschakelen voordat de formule een waarde retourneert in plaats van #NAAM?.

Veelvoorkomende fouten in VBA-functies en hoe u deze kunt oplossen

Vier problemen verklaren het merendeel van de functies die wel compileren, maar een verkeerd antwoord teruggeven.

  • De functie retourneert Leeg of 0: Het resultaat werd nooit toegewezen aan de functienaam, of een tak van een If-instructie slaat de toewijzing over. Stel de retourwaarde in op elk pad.
  • #NAAM? in een werkbladcel: De functie is privรฉ, bevindt zich in een werkbladmodule in plaats van een standaardmodule, of de werkmap is opgeslagen zonder dat macro's waren ingeschakeld.
  • Overloopfout bij argumenten van het type integer: Het voorbeeld gebruikt As Integer, wat stopt bij 32,767. Wijzig zowel de parameters als het retourtype naar Long voor echte gegevens.
  • Een gewijzigd argument verrast de beller: Als je ByVal weglaat, geeft VBA de variabele zelf door, waardoor de functie de waarde van de aanroeper kan wijzigen. Schrijf ByVal tenzij je dat effect wilt.

Veelgestelde vragen

Niet direct. Retourneer een array of een aangepast type om meerdere waarden in รฉรฉn resultaat op te slaan, of declareer de extra parameters als ByRef zodat de functie de waarden terugschrijft naar de variabelen van de aanroeper.

Voeg het trefwoord Optional toe met een standaardwaarde, zoals in Optional ByVal Rate As Double = 0.05. Elke parameter na een optionele parameter moet ook optioneel zijn en moet als laatste in de lijst komen.

Ja, via Application.WorksheetFunction, bijvoorbeeld Application.WorksheetFunction.Sum(Range(โ€œA1:A10โ€)). Functies die VBA al biedt, zoals Left of Trim, worden rechtstreeks aangeroepen zonder dat voorvoegsel.

Ja. Plak de formule uit het werkblad en een AI-assistent geeft een equivalente openbare functie terug met benoemde argumenten en een gedeclareerd retourtype. Vergelijk beide resultaten op voorbeeldrijen voordat u de formule vervangt.

Ja. Geef de functie en de formule op, en een AI-assistent wijst op mogelijke oorzaken, zoals een onjuist argumenttype, een ontbrekende retourwaarde of een poging om een โ€‹โ€‹cel te wijzigen vanuit een door de gebruiker gedefinieerde functie.

Vat dit bericht samen met: