Opret brugerdefinerede funktioner i Excel

Gælder for
Excel til Microsoft 365 Excel til Microsoft 365 til Mac Excel 2024 Excel 2024 til Mac Excel 2021 Excel 2021 til Mac Excel 2019 Excel 2016

Selvom Excel indeholder mange indbyggede regnearksfunktioner, har den højst sandsynligt ikke en funktion til enhver type beregning, du udfører. Udviklerne af Excel kan umuligt imødekomme alle brugeres behov for beregninger. I stedet giver Excel dig mulighed for at oprette brugerdefinerede funktioner, der er beskrevet i denne artikel.

Tip

Oplysningerne i denne artikel henvender sig til erfarne Excel-brugere. Du kan finde flere oplysninger om funktioner ved at gå til Excel-funktioner (efter kategori).

Opret en enkelt brugerdefineret funktion

Brugerdefinerede funktioner, f.eks. makroer, bruger programmeringssproget Visual Basic for Applications (VBA). De adskiller sig fra makroer på to væsentlige måder. For det første bruger de Function-procedurer i stedet for Sub-procedurer . Det vil sige, at de starter med en Function-sætning i stedet for en Sub-sætning og slutter med End Function i stedet for End Sub. For det andet udfører de beregninger i stedet for at foretage handlinger. Visse typer sætninger, f.eks. sætninger, der markerer og formaterer områder, er udelukket fra brugerdefinerede funktioner. I denne artikel kan du lære, hvordan du opretter og bruger brugerdefinerede funktioner. For at oprette funktioner og makroer skal du arbejde med Visual Basic Editor (VBE), som åbnes i et nyt vindue, der er adskilt fra Excel.

Antag, at dit firma tilbyder mængderabat på 10 procent af salget af et produkt, forudsat, at ordren er på mere end 100 enheder. I de følgende afsnit viser vi dig en funktion til at beregne denne rabat.

I eksemplet nedenfor vises en ordreformular, der viser hvert element, antal, pris, rabat (hvis relevant) og den resulterende udvidede pris.

Eksempel på en ordreformular uden en brugerdefineret funktion Hvis du vil oprette en brugerdefineret RABAT-funktion i projektmappen, skal du følge disse trin:

  1. Tryk på Alt+F11 for at åbne Visual Basic Editor (på Mac skal du trykke på FN+ALT+F11), og klik derefter på Indsæt>modul. Der vises et nyt modulvindue i højre side af Visual Basic Editor.

  2. Kopiér og indsæt følgende kode for det nye modul.

    Function DISCOUNT(quantity, price)
     If quantity >=100 Then
     DISCOUNT = quantity * price * 0.1
     Else
     DISCOUNT = 0
     End If
    
     DISCOUNT = Application.Round(Discount, 2)
    End Function
    
    

Bemærk

Hvis du vil gøre det nemmere at læse din kode, kan du bruge tabulatortasten til at indrykke linjer. Indrykningen er kun til din fordel og er valgfri, da koden kører med eller uden den. Når du har skrevet en indrykket linje, antager Visual Basic Editor, at den næste linje indrykkes på samme måde. Hvis du vil flytte et tabulatortegn ud (dvs. til venstre), skal du trykke på Skift+Tabulatortasten.

Brug brugerdefinerede funktioner

Nu er du klar til at bruge den nye RABAT-funktion. Luk Visual Basic Editor, markér celle G7, og indtast følgende:

=RABAT(D7,E7)

Excel beregner rabatten på 10 % på 200 enheder til 47,50 USD pr. enhed og returnerer 950,00 USD.

I den første linje i din VBA-kode, funktionen RABAT(antal, pris), angav du, at funktionen RABAT kræver to argumenter, Antal og Pris. Når du kalder funktionen i en celle i regnearket, skal du medtage disse to argumenter. I formlen = RABAT(D7,E7) er D7 argumentet Antal, og E7 er argumentet Pris. Du kan nu kopiere RABAT-formlen til G8:G13 for at få de resultater, der er vist nedenfor.

Lad os se nærmere på, hvordan Excel fortolker denne function-procedure. Når du trykker på Enter, søger Excel efter navnet RABAT i den aktuelle projektmappe og finder, at det er en brugerdefineret funktion i et VBA-modul. Argumentnavnene i parentes, Antal og Pris, er pladsholdere for de værdier, som beregningen af rabatten er baseret på.

Eksempel på en ordreformular med en brugerdefineret funktion Hvis-sætningen i følgende kodeblok undersøger antalsargumentet og bestemmer, om antallet af solgte varer er større end eller lig med 100:


If quantity >= 100 Then
 DISCOUNT = quantity * price * 0.1
Else
 DISCOUNT = 0
End If

Hvis antallet af solgte varer er større end eller lig med 100, udfører VBA følgende sætning, der multiplicerer værdien af antallet med værdien af pris, og multiplicerer derefter resultatet med 0,1:

Discount = quantity * price * 0.1

Resultatet er gemt som variablen Rabat. En VBA-sætning, der indeholder en værdi i en variabel, kaldes et tilknytningsudtryk, fordi det evaluerer udtrykket i højre side af lighedstegnet og tildeler resultatet til variabelnavnet til venstre. Da variablen Rabat har samme navn som function-proceduren, returneres værdien, der er gemt i variablen til regnearksformlen, der kaldes RABAT-funktionen.

Hvis Antal er mindre end 100, udfører VBA følgende sætning:

Discount = 0

Til sidst afrunder følgende sætning værdien, der er tildelt variablen Rabat til to decimalpladser:

Discount = Application.Round(Discount, 2)

VBA indeholder ikke funktionen AFRUND, men det gør Excel. For at bruge AFRUND i denne sætning skal du derfor bede VBA om at søge efter metoden Afrund (funktion) i programobjektet (Excel). Det gør du ved at tilføje ordet Program før ordet Afrund. Når du vil åbne en Excel-funktion i et VBA-modul, skal du bruge denne syntaks.

Forstå brugerdefinerede funktionsregler

En brugerdefineret funktion skal starte med en Function-sætning og slutte med en End Function-sætning. Ud over funktionsnavnet angiver Function-sætningen normalt et eller flere argumenter. Du kan dog oprette en funktion uden nogen argumenter. Excel indeholder flere indbyggede funktioner – f.eks. SLUMP og NU – der ikke bruger argumenter.

Efter Function-sætningen indeholder en function-procedure én eller flere VBA-sætninger, der træffer beslutninger og udfører beregninger ved hjælp af de argumenter, der videregives til funktionen. Til sidst skal du medtage en sætning et sted i function-proceduren, der tildeler en værdi til en variabel med samme navn som funktionen. Denne værdi returneres til formlen, der kalder funktionen.

Brug af VBA-nøgleord i brugerdefinerede funktioner

Antallet af VBA-nøgleord, du kan bruge i brugerdefinerede funktioner, er mindre end antallet, du kan bruge i makroer. Brugerdefinerede funktioner har ikke tilladelse til at gøre andet end at returnere en værdi til en formel i et regneark eller til et udtryk, der bruges i en anden VBA-makro eller -funktion. Brugerdefinerede funktioner kan f.eks. Hvis du medtager koden "handling" for denne type i en function-procedure, returnerer funktionen #VALUE! Hvis du medtager koden "handling" for denne type i en function-procedure, returnerer funktionen fejlen #VÆRDI!.

Den eneste handling, en function-procedure kan udrette (udover at udføre beregninger), er at vise en dialogboks. Du kan bruge en InputBox-sætning i en brugerdefineret funktion som en metode til at få input fra brugeren, der kører funktionen. Du kan bruge en MsgBox-sætning som en metode til at formidle oplysninger til brugeren. Du kan også bruge brugerdefinerede dialogbokse eller brugerformularer, men det er et emne, som denne introduktion ikke berører.

Dokumentation af makroer og brugerdefinerede funktioner

Selv simple makroer og brugerdefinerede funktioner kan være svære at læse. Du kan gøre dem nemmere at forstå ved at skrive forklarende tekst i form af kommentarer. Du kan tilføje kommentarer ved at sætte en apostrof foran den forklarende tekst. I følgende eksempel vises f.eks. funktionen RABAT med kommentarer. Ved at tilføje kommentarer som disse gør du det nemmere for dig eller andre at bevare din VBA-kode, som tiden går. Hvis du har brug for at ændre koden på et senere tidspunkt, har du nemmere ved at forstå, hvad du oprindeligt gjorde.

Eksempel på en VBA-funktion med kommentarer En apostrof beder Excel om at ignorere alt til højre på samme linje, så du kan oprette kommentarer enten på linjer alene eller i højre side af linjer, der indeholder VBA-kode. Du kan evt. starte en relativt lang kodeblok med en kommentar, der forklarer det overordnede formål og derefter bruge indbyggede kommentarer til at dokumentere individuelle sætninger.

Du kan også dokumentere dine makroer og brugerdefinerede funktioner ved at give dem beskrivende navne. I stedet for at navngive en makro Navne kan du navngive den Månedsnavne for mere præcist at beskrive det formål, makroen tjener. Brug af beskrivende navne for makroer og brugerdefinerede funktioner er især nyttigt, når du har oprettet mange procedurer, især hvis du opretter procedurer, som har lignende, men ikke helt identiske formål.

Hvordan du dokumenterer dine makroer og brugerdefinerede funktioner er et spørgsmål om personlige præferencer. Det, der er vigtigt, er at indføre en metode til dokumentation og at bruge den konsekvent.

Gør dine brugerdefinerede funktioner tilgængelige overalt

For at bruge en brugerdefineret funktion skal projektmappen med det modul, som du oprettede funktionen i, være åben. Hvis projektmappen ikke er åben, får du en #NAME? når du forsøger at bruge funktionen. Hvis du f.eks. opretter en funktion, der hedder RABAT i en projektmappe, der hedder Personlig.xlsb, og du kalder funktionen fra en anden projektmappe, skal du skrive =personlig.xlsb!rabat(), ikke blot =rabat().

Du kan spare anslag (og mulige slåfejl) ved at vælge brugerdefinerede funktioner fra dialogboksen Indsæt funktion. Dine brugerdefinerede funktioner vises i kategorien Brugerdefinerede:

dialogboksen Indsæt funktion

En nemmere måde til at gøre dine brugerdefinerede funktioner tilgængelige hele tiden er at gemme dem i en separat projektmappe og derefter gemme projektmappen som et tilføjelsesprogram. Du kan derefter gøre tilføjelsesprogrammet tilgængeligt, når du kører Excel. Sådan gør du:

  1. Når du har oprettet de funktioner, du skal bruge, skal du klikke på Gem fil>som.
  2. Åbn rullelisten Filtype i dialogboksen Gem som, og vælg Excel-tilføjelsesprogram. Gem projektmappen under et genkendeligt navn, såsom MineFunktioner, i mappen Tilføjelsesprogrammer . Dialogboksen Gem som foreslår den pågældende mappe, så det eneste, du skal gøre, er at acceptere standardplaceringen.
  3. Når du har gemt projektmappen, skal du klikke påExcel-indstillinger for filer>.
  4. Klik på kategorien Tilføjelsesprogrammer i dialogboksen Excel-indstillinger.
  5. Vælg Excel-tilføjelsesprogrammer på rullelisten Administrer. Klik derefter på knappen Gå til.
  6. I dialogboksen Tilføjelsesprogrammer skal du markere afkrydsningsfeltet ud for navnet, du brugte til at gemme projektmappen, som vist nedenfor.
    dialogboks for tilføjelsesprogrammer

Når du har fulgt disse trin, bliver dine brugerdefinerede funktioner tilgængelige, hver gang du kører Excel. Hvis du vil føje til funktionsbiblioteket, skal du vende tilbage til Visual Basic Editor. Hvis du ser i Visual Basic Editor Project Explorer under overskriften VBAProject, får du vist et modul, der er navngivet efter filen Tilføjelsesprogrammer. Tilføjelsesprogrammet har udvidelsen .xlam.

navngivet modul i vbe Når du dobbeltklikker på dette modul i Project Explorer, viser Visual Basic Editor funktionskoden. Hvis du vil tilføje en ny funktion, skal du placere indsætningspunktet efter End Function-sætningen, der afslutter den sidste funktion i kodevinduet, og begynde at skrive. Du kan oprette lige så mange funktioner, du skal bruge, på denne måde, og de vil altid være tilgængelige i kategorien Brugerdefinerede i dialogboksen Indsæt funktion.

Om forfatterne

Dette indhold blev oprindeligt oprettet af Mark Dodge og Craig Stinson som en del af bogen Microsoft Office Excel 2007 indefra og ud. Det er siden blevet opdateret til også at omfatte nyere versioner af Excel.

Har du brug for mere hjælp?

Du kan altid spørge en ekspert i Excel Tech Community eller få support i Communities.