Excel - Eigen functies maken met VBA
- Datum:
- Auteur: Stefan Cruysberghs
Wanneer de functies van Excel niet meer voldoende functionaliteit geven kan je met macro’s eigen functies gaan definiëren. In versie 5 of 95 moet je hiervoor een nieuw moduleblad aanmaken. In Excel 97, 2000, XP of 2003 ga je naar Extra >> Macro’s >> Visual Basic Editor. Nu moet je nog een nieuwe module aanmaken met Invoegen >> Module. Je kan nu beginnen met het schrijven van kleine Visual Basic for Applications-programmetjes.
Meestgebruikte datatypes
Datatype | Bereik |
Boolean | True of False |
Integer | -32.768 tot 32.767 |
Single | -3,402823E38 tot -1,401298E-45 |
String | 0 - 2 miljard karakters |
Variant | Zowel numerieke waardes als strings |
Retourwaarde
De retourwaarde van een functie kan slechts 1 keer in de functie toegekend worden. Dit gebeurt meestal als laatste actie. Achter de functienaam, tussen haakjes, staat de meegegeven parameter.
Voorbeeld 1
Function BTW(Bedrag As Variant) As Variant
BTW = Bedrag * 0.21
End Function
Declareren van variabelen (Dim)
Dim varnaam As type Declareert nieuwe variabelen en wijst geheugenruimte toe. Type is het gekozen datatype.
Voorbeeld 2
Function Fak(Getal As Integer) As Integer
Dim I, J As Integer
J = 1
For I = 2 To Getal
J = J * I
Next I
Fak = J
End Function
Voorbeeld 3
Function Winst(Bedrag As Variant) As Variant
Dim Marge As Variant
Dim Kosten As Variant
Marge = Bedrag * 0.3
Select Case Bedrag
Case Is <= 50
Kosten = Bedrag * 0.12
Case Is <= 100
Kosten = Bedrag * 0.09
Case Is <= 500
Kosten = Bedrag * 0.07
Case Else
Kosten = Bedrag * 0.05
End Select
Winst = Bedrag + Marge + Kosten
End Function
VarType
VarType geeft een waarde die het subtype van een variabele aangeeft. Hiermee kan bv. gecontroleerd worden of er numerieke gegevens meegegeven worden.
0 |
vbEmpty | Leeg (niet geïnitialiseerd) |
1 |
vbNull | Nul (geen geldige gegevens) |
2 |
vbInteger | Integer |
3 |
vbLong | Lange integer |
4 |
vbSingle | Een getal met enkele precisie en drijvende komma |
5 |
vbDouble | Een getal met dubbele precisie en drijvende komma |
6 |
vbCurrency | Valuta |
7 |
vbDate | Datum |
8 |
vbString | Tekenreeks |
9 |
vbObject | OLE-automatiseringsobject |
10 |
vbError | Fout |
11 |
vbBoolean | Boole-waarde |
12 |
vbVariant | Variant |
Voorbeeld 4
Function Winst2(Bedrag As Variant) As Variant
Dim Marge As Variant
Dim Kosten As Variant
If VarType(Bedrag) > 6 Then
Winst = "Deze functie accepteert alleen getallen"
Else
Marge = Bedrag * 0.3
Select Case Bedrag
Case Is <= 50
Kosten = Bedrag * 0.12
Case Is <= 100
Kosten = Bedrag * 0.09
Case Is <
= 500
Kosten = Bedrag * 0.07
Case Else
Kosten = Bedrag * 0.05
End Select
Winst = Bedrag + Marge + Kosten
End If
End Function
Nu kan je in de cellen van je werkbladen gewoon deze functies gebruiken in je formules. Bijvoorbeeld : =fak(6) =btw(1023)
Bereik meegeven als parameter
Je kan ook een reeks/range van cellen meegeven aan een functie. Bv. cel A10 = Optellen(A1:B5) Deze functie gaat alle cellen uit de opgegeven range optellen. Een range moet van het gegevenstype Object zijn.
Voorbeeld 5
Function Optellen(Bereik As Object) As Single
Dim Som As Single
Dim Waarde As Variant
Som = 0
For Each Waarde In Bereik
Som = Som + Waarde.Value
Next Waarde
Optellen = Som
End Function
Voorbeeld 6
Volgende functie gaat de tekst in de cellen vergelijken en naargelang de waarde bij de som een bepaalde getal bijtellen.
Function Optellen(Bereik As Object) As Single
Dim Som As Single
Dim Waarde As Variant
Som = 0
For Each Waarde In Bereik
Select Case Waarde.Value
Case Is = "A", "a"
Som = Som + 10
Case Is = "B", "b"
Som = Som + 15
Case Is = "C", "c"
Som = Som + 20
End Select
Next Waarde
Optellen = Som
End Function
Voorbeeld 7
Deze functie krijgt als parameters 2 ranges mee. Bij het tweede bereik moet in de eerste kolom de te zoeken waarden staan. In de tweede kolom staan de bijhorende getallen. Al naargelang de tekst in de cellen van de eerste range zal het bijhorende getal in de 2de range opgeteld worden bij de som. Dit werkt ongeveer zoals Vert.Zoeken.
Function Optellen(Bereik1 As Object, Bereik2 As Object) As Single
Dim Som As Single
Dim Waarde As Variant
Dim i As Integer
Som = 0
For Each Waarde In Bereik1
For i = 1 To Bereik2.Rows.Count
If Waarde.Value = Bereik2.Cells(i, 1).Value Then
Som = Som + Bereik2.Cells(i, 2).Value
End If
Next i
Next Waarde
Optellen = Som
End Function