VBA variabelen in Excel: Dim, String, Integer (2026)
Kort antwoord: In VBA declareer je variabelen met het
Dimstatement gevolgd door de naam en het datatype (bijvoorbeeldDim naam As StringofDim aantal As Integer). Dit reserveert geheugen en bepaalt welke waarden de variabele kan bevatten.
In het kort
- Gebruik
Dimom variabelen te declareren voordat je ze gebruikt - Kies het juiste datatype: String voor tekst, Integer/Long voor gehele getallen, Double voor decimalen
- Zet
Option Explicitbovenaan je module om variabelen verplicht te maken - Variabelen hebben een bereik (scope): lokaal, module of publiek
- Gebruik duidelijke namen zoals
klantnaamin plaats vanxvoor leesbare code
Wat zijn variabelen in VBA?
Een variabele is een tijdelijke opslagplaats in het geheugen van je computer. Je geeft de variabele een naam en slaat er een waarde in op. Later kun je die waarde opvragen, wijzigen of gebruiken in berekeningen.
Denk aan een variabele als een gelabeld doosje. Het label is de naam (klantnaam), en in het doosje stop je de inhoud ("Jan de Vries"). Je kunt het doosje legen en iets anders erin stoppen, maar het label blijft hetzelfde.
Waarom variabelen gebruiken?
Variabelen maken je VBA-code:
- Flexibeler: dezelfde code werkt met verschillende waarden
- Leesbaarder:
totaalBedragis duidelijker dan een getal in je code - Efficienter: bereken een waarde een keer en hergebruik hem
- Onderhoudbaarder: wijzig een waarde op een plek in plaats van overal
Zonder variabelen zou je voor elke berekening de bronwaarden opnieuw moeten ophalen of hardcoded getallen in je code moeten zetten.
Variabelen declareren met Dim
Het statement Dim (kort voor Dimension) reserveert geheugenruimte voor een variabele. De basissyntaxis is:
Dim variabelenaam As Datatype
Voorbeelden van declaraties
Sub VariabelenVoorbeeld()
Dim klantnaam As String
Dim leeftijd As Integer
Dim prijs As Double
Dim isActief As Boolean
klantnaam = "Pieter Jansen"
leeftijd = 42
prijs = 149.95
isActief = True
MsgBox "Klant: " & klantnaam & vbCrLf & _
"Leeftijd: " & leeftijd & vbCrLf & _
"Prijs: " & prijs & vbCrLf & _
"Actief: " & isActief
End Sub
Meerdere variabelen in een regel
Je kunt meerdere variabelen op een regel declareren:
Dim voornaam As String, achternaam As String, volledigeNaam As String
Let op: Als je het datatype weglaat, wordt de variabele automatisch Variant:
' Fout: alleen 'c' is een Integer, 'a' en 'b' zijn Variant
Dim a, b, c As Integer
' Correct: alle drie zijn Integer
Dim a As Integer, b As Integer, c As Integer
Datatypes in VBA
VBA kent verschillende datatypes, elk geoptimaliseerd voor een specifiek soort gegevens.
String (tekst)
Gebruik String voor tekst, namen, adressen en alles dat letters of speciale tekens bevat.
Dim naam As String
Dim adres As String
Dim email As String
naam = "Maria van den Berg"
adres = "Hoofdstraat 123, Amsterdam"
email = "maria@voorbeeld.nl"
Strings kunnen ook getallen bevatten als tekst: Dim postcode As String met waarde "1234 AB".
String met vaste lengte:
Dim productCode As String * 10 ' Altijd exact 10 karakters
Integer (gehele getallen)
Gebruik Integer voor gehele getallen tussen -32.768 en 32.767.
Dim aantal As Integer
Dim rijNummer As Integer
Dim maand As Integer
aantal = 150
rijNummer = 5
maand = 12
Integer is efficient voor tellers en kleine getallen. Voor grotere getallen gebruik je Long.
Long (grote gehele getallen)
Gebruik Long voor gehele getallen tussen -2.147.483.648 en 2.147.483.647.
Dim rijen As Long
Dim klantnummer As Long
Dim populatie As Long
rijen = 1048576 ' Maximaal aantal rijen in Excel
klantnummer = 123456789
populatie = 17500000
Tip: Gebruik Long standaard in plaats van Integer. Op moderne systemen is Long even snel en je voorkomt overflow-fouten bij grote datasets.
Double (decimale getallen)
Gebruik Double voor getallen met decimalen of zeer grote/kleine getallen.
Dim prijs As Double
Dim percentage As Double
Dim btw As Double
prijs = 1249.99
percentage = 0.21
btw = prijs * percentage ' Resultaat: 262.4979
Double ondersteunt getallen van ongeveer -1,8 x 10^308 tot 1,8 x 10^308 met 15-16 significante cijfers.
Single (kleinere decimale getallen)
Gebruik Single voor decimale getallen waar minder precisie volstaat.
Dim temperatuur As Single
temperatuur = 21.5
Single gebruikt minder geheugen dan Double, maar heeft minder precisie (6-7 significante cijfers).
Boolean (waar/onwaar)
Gebruik Boolean voor ja/nee waarden.
Dim isVolwassen As Boolean
Dim heeftBetaald As Boolean
Dim isZichtbaar As Boolean
isVolwassen = True
heeftBetaald = False
isZichtbaar = Range("A1").Hidden = False
Boolean variabelen starten standaard als False.
Date (datums en tijden)
Gebruik Date voor datums, tijden of combinaties daarvan.
Dim geboortedatum As Date
Dim startTijd As Date
Dim deadline As Date
geboortedatum = #1/15/1990# ' 15 januari 1990 (Amerikaans formaat)
geboortedatum = DateSerial(1990, 1, 15) ' Alternatief
startTijd = #9:30:00 AM#
deadline = Now + 7 ' Huidige datum plus 7 dagen
Let op: VBA gebruikt het Amerikaanse datumformaat (#maand/dag/jaar#). Gebruik DateSerial voor duidelijkheid.
Variant (universeel type)
Variant kan elk type data bevatten en past zich automatisch aan.
Dim waarde As Variant
waarde = "Tekst" ' Nu is het een String
waarde = 123 ' Nu is het een Integer
waarde = 45.67 ' Nu is het een Double
waarde = #1/1/2026# ' Nu is het een Date
Nadelen van Variant:
– Gebruikt meer geheugen
– Trager dan specifieke types
– Verbergt programmeerfouten
Gebruik Variant alleen wanneer het type echt kan varieren, bijvoorbeeld bij data uit cellen.
Currency (valutabedragen)
Gebruik Currency voor financiele berekeningen waar precisie cruciaal is.
Dim factuurBedrag As Currency
Dim btw As Currency
factuurBedrag = 1234.56
btw = factuurBedrag * 0.21
Currency voorkomt afrondingsfouten die bij Double kunnen optreden.
Byte (kleine positieve getallen)
Gebruik Byte voor getallen van 0 tot 255.
Dim roodWaarde As Byte
Dim groenWaarde As Byte
Dim blauwWaarde As Byte
roodWaarde = 255
groenWaarde = 128
blauwWaarde = 0
Byte is ideaal voor RGB-kleuren en andere kleine waarden.
Overzichtstabel datatypes
| Datatype | Bereik | Geheugen | Gebruik |
|---|---|---|---|
| Byte | 0 tot 255 | 1 byte | Kleine positieve getallen |
| Integer | -32.768 tot 32.767 | 2 bytes | Kleine gehele getallen |
| Long | -2,1 miljard tot 2,1 miljard | 4 bytes | Grote gehele getallen |
| Single | +/- 3,4 x 10^38 | 4 bytes | Decimalen (beperkte precisie) |
| Double | +/- 1,8 x 10^308 | 8 bytes | Decimalen (hoge precisie) |
| Currency | +/- 922 biljoen | 8 bytes | Financiele waarden |
| String | Tot 2 miljard tekens | Variabel | Tekst |
| Boolean | True of False | 2 bytes | Ja/nee waarden |
| Date | 1/1/100 tot 31/12/9999 | 8 bytes | Datums en tijden |
| Variant | Alle bovenstaande | 16+ bytes | Flexibel (vermijd) |
Option Explicit: variabelen verplichten
Standaard maakt VBA automatisch een nieuwe Variant-variabele als je een onbekende naam gebruikt. Dit leidt tot moeilijk te vinden fouten:
Sub ZonderOptionExplicit()
klantNaam = "Jan"
MsgBox klantname ' Typfout! Toont lege waarde, geen foutmelding
End Sub
Met Option Explicit bovenaan je module moet je elke variabele eerst declareren:
Option Explicit
Sub MetOptionExplicit()
Dim klantNaam As String
klantNaam = "Jan"
MsgBox klantname ' Fout: variabele niet gedefinieerd
End Sub
Option Explicit standaard inschakelen
Windows:
1. Open de VBA-editor (Alt+F11)
2. Ga naar Extra > Opties
3. Vink Variabeledeclaratie vereist aan
4. Klik OK
Mac:
1. Open de VBA-editor (Fn+Option+F11)
2. Ga naar Tools > Options
3. Vink Require Variable Declaration aan
4. Klik OK
Nieuwe modules krijgen nu automatisch Option Explicit. Voeg het handmatig toe aan bestaande modules.
Scope: bereik van variabelen
De scope bepaalt waar in je code een variabele toegankelijk is.
Lokale variabelen (procedure-niveau)
Variabelen gedeclareerd binnen een Sub of Function zijn alleen daar beschikbaar:
Sub ProcedureA()
Dim lokaleVar As String
lokaleVar = "Alleen hier beschikbaar"
MsgBox lokaleVar ' Werkt
End Sub
Sub ProcedureB()
MsgBox lokaleVar ' Fout: variabele niet gevonden
End Sub
Lokale variabelen verdwijnen zodra de procedure eindigt.
Module-variabelen (module-niveau)
Variabelen gedeclareerd bovenaan een module (buiten procedures) zijn beschikbaar in alle procedures van die module:
Option Explicit
Dim moduleVar As String ' Beschikbaar in heel deze module
Sub ProcedureA()
moduleVar = "Gezet in A"
End Sub
Sub ProcedureB()
MsgBox moduleVar ' Werkt: toont "Gezet in A"
End Sub
Private variabelen
Private werkt hetzelfde als Dim op module-niveau, maar maakt de bedoeling duidelijker:
Private moduleVar As String ' Alleen binnen deze module
Public variabelen (globaal)
Variabelen gedeclareerd met Public zijn beschikbaar vanuit elke module in het project:
' In Module1:
Public globaleVar As String
' In Module2:
Sub GebruikGlobaal()
globaleVar = "Beschikbaar overal"
MsgBox globaleVar
End Sub
Waarschuwing: Gebruik Public spaarzaam. Globale variabelen maken code moeilijker te debuggen en onderhouden.
Static variabelen
Een Static variabele behoudt zijn waarde tussen procedure-aanroepen:
Sub TelAanroepen()
Static aantalKeer As Long
aantalKeer = aantalKeer + 1
MsgBox "Deze macro is " & aantalKeer & " keer uitgevoerd"
End Sub
Bij elke uitvoering wordt aantalKeer met 1 verhoogd, zonder te resetten.
Naamgevingsconventies
Goede namen maken je code leesbaar en onderhoudbaar.
Regels voor variabelenamen
VBA stelt deze eisen:
– Begin met een letter
– Maximaal 255 tekens
– Geen spaties of speciale tekens (behalve underscore)
– Niet hoofdlettergevoelig (naam = Naam = NAAM)
– Geen gereserveerde woorden (Dim, Sub, If, etc.)
Best practices
Gebruik beschrijvende namen:
' Slecht
Dim x As Integer
Dim s As String
' Goed
Dim rijTeller As Integer
Dim klantnaam As String
Gebruik camelCase of PascalCase:
Dim totaalBedrag As Double ' camelCase
Dim TotaalBedrag As Double ' PascalCase
Prefixen voor datatypes (Hongaarse notatie):
Dim strKlantnaam As String ' str = String
Dim intAantal As Integer ' int = Integer
Dim dblPrijs As Double ' dbl = Double
Dim blnActief As Boolean ' bln = Boolean
Deze conventie is optioneel maar helpt bij het herkennen van datatypes.
Constanten in hoofdletters:
Const BTW_PERCENTAGE As Double = 0.21
Const MAX_RIJEN As Long = 1000
Constanten declareren
Een constante is een variabele die nooit verandert. Gebruik Const in plaats van Dim:
Const PI As Double = 3.14159265359
Const BEDRIJFSNAAM As String = "Hulp bij Excel"
Const MAX_POGINGEN As Integer = 3
Sub BerekenOmtrek()
Dim straal As Double
straal = 5
MsgBox "Omtrek: " & 2 * PI * straal
End Sub
Probeer je een constante te wijzigen, dan geeft VBA een fout.
Praktische voorbeelden
Voorbeeld 1: Gegevens uit cellen lezen
Sub LeesKlantgegevens()
Dim klantnaam As String
Dim leeftijd As Integer
Dim saldo As Currency
klantnaam = Range("A2").Value
leeftijd = Range("B2").Value
saldo = Range("C2").Value
If saldo < 0 Then
MsgBox klantnaam & " heeft een negatief saldo: " & Format(saldo, "Currency")
End If
End Sub
Voorbeeld 2: Loop met teller
Sub VerwerkRijen()
Dim i As Long
Dim laatsteRij As Long
Dim som As Double
laatsteRij = Cells(Rows.Count, 1).End(xlUp).Row
For i = 2 To laatsteRij
som = som + Cells(i, 2).Value
Next i
MsgBox "Totaal: " & som
End Sub
Voorbeeld 3: Werken met datums
Sub BerekenLeeftijd()
Dim geboortedatum As Date
Dim vandaag As Date
Dim leeftijd As Integer
geboortedatum = Range("A1").Value
vandaag = Date
leeftijd = DateDiff("yyyy", geboortedatum, vandaag)
' Correctie als verjaardag nog komt dit jaar
If DateSerial(Year(vandaag), Month(geboortedatum), Day(geboortedatum)) > vandaag Then
leeftijd = leeftijd - 1
End If
MsgBox "Leeftijd: " & leeftijd & " jaar"
End Sub
Voorbeeld 4: Boolean voor voorwaarden
Sub ControleerVoorraad()
Dim voorraad As Integer
Dim minimumVoorraad As Integer
Dim moetBestellen As Boolean
voorraad = Range("B2").Value
minimumVoorraad = Range("C2").Value
moetBestellen = (voorraad < minimumVoorraad)
If moetBestellen Then
Range("D2").Value = "Bestellen!"
Range("D2").Interior.Color = RGB(255, 0, 0)
Else
Range("D2").Value = "OK"
Range("D2").Interior.Color = RGB(0, 255, 0)
End If
End Sub
Veelgemaakte fouten
1. Variabele niet gedeclareerd
Probleem: Je krijgt de fout “Variabele niet gedefinieerd” terwijl je zeker weet dat je de variabele hebt gemaakt.
Oorzaak: Je hebt Option Explicit aan staan en een typfout gemaakt in de variabelenaam.
Oplossing: Controleer de spelling. VBA is niet hoofdlettergevoelig, maar klantNaam en klantnaam moeten wel hetzelfde gespeld zijn.
2. Overflow error
Probleem: Je krijgt een “Overflow” foutmelding bij het toewijzen van een waarde.
Oorzaak: De waarde past niet in het datatype. Bijvoorbeeld een getal groter dan 32.767 in een Integer.
Oplossing: Gebruik een groter datatype zoals Long of Double:
' Fout: 50000 past niet in Integer
Dim aantal As Integer
aantal = 50000 ' Overflow!
' Correct: Long kan grotere getallen aan
Dim aantal As Long
aantal = 50000 ' Werkt
3. Type mismatch
Probleem: Je krijgt “Type komt niet overeen” bij het toewijzen van een waarde.
Oorzaak: Je probeert tekst in een numerieke variabele te stoppen of andersom.
Oplossing: Converteer de waarde of gebruik het juiste datatype:
Dim aantal As Integer
aantal = "vijf" ' Fout: tekst in Integer
' Oplossing 1: Gebruik numerieke waarde
aantal = 5
' Oplossing 2: Converteer met Val (geeft 0 als conversie mislukt)
aantal = Val("5")
4. Variant bevat onverwacht type
Probleem: Een berekening met een Variant geeft rare resultaten.
Oorzaak: Variant past zich aan het type van de eerste waarde aan.
Oplossing: Gebruik expliciete datatypes of converteer waarden:
Dim waarde As Variant
waarde = "10"
waarde = waarde + 5 ' Resultaat: "105" (string concatenatie)
' Beter:
Dim waarde As Integer
waarde = CInt("10")
waarde = waarde + 5 ' Resultaat: 15
5. Variabele verliest waarde
Probleem: Na het uitvoeren van een andere procedure is je variabele leeg.
Oorzaak: Lokale variabelen verdwijnen na het eindigen van een procedure.
Oplossing: Gebruik module-niveau variabelen of Static:
' Module-niveau (bovenaan de module)
Dim persistenteWaarde As String
' Of binnen de procedure:
Static persistenteWaarde As String
Gerelateerde onderwerpen
Variabelen vormen de basis voor alle VBA-programmering. Bekijk ook:
- VBA voor beginners: schrijf je eerste macro
- Macro opnemen in Excel: automatiseren zonder te coderen
- Excel formules: combineer VBA met krachtige functies
- Cel vastzetten in Excel: absolute verwijzingen begrijpen
FAQ
Moet ik altijd variabelen declareren?
Technisch gezien niet, maar het is sterk aan te raden. Met Option Explicit voorkom je typfouten die anders uren zoekwerk kosten. Een vergeten letter in een variabelenaam wordt dan meteen gesignaleerd in plaats van stilletjes een lege Variant te maken.
Wat is het verschil tussen Dim en Private?
Op procedure-niveau (binnen een Sub) is er geen verschil – je kunt alleen Dim gebruiken. Op module-niveau doen beide hetzelfde, maar Private maakt de bedoeling duidelijker: deze variabele is alleen binnen deze module beschikbaar, niet in andere modules.
Wanneer gebruik ik Long in plaats van Integer?
Gebruik Long als standaard voor gehele getallen. Op moderne computers is er geen snelheidsvoordeel voor Integer, maar je voorkomt wel overflow-fouten bij grotere getallen. Excel heeft meer dan 1 miljoen rijen – dat past niet in een Integer.
Kan ik een variabele hergebruiken voor een ander type?
Met Variant wel, maar dat is geen goed idee. Het maakt je code verwarrend en kan leiden tot type-fouten. Declareer een nieuwe variabele met een beschrijvende naam voor elk ander doel.
Hoe zet ik een variabele terug naar de beginwaarde?
Wijs expliciet een waarde toe. Numerieke types starten als 0, Strings als leeg (“”), Booleans als False. Je kunt ook de Empty waarde gebruiken voor Variants of objecten op Nothing zetten.
Dim aantal As Integer
aantal = 0 ' Reset naar beginwaarde
Dim tekst As String
tekst = "" ' Reset naar leeg
Wat betekent “Object variable not set”?
Deze fout treedt op als je een objectvariabele gebruikt zonder er een object aan toe te wijzen met Set:
Dim ws As Worksheet
ws.Name = "Test" ' Fout: Object variable not set
' Correct:
Set ws = ThisWorkbook.Worksheets("Blad1")
ws.Name = "Test" ' Werkt
Hoe declareer ik een array?
Gebruik haakjes achter de variabelenaam:
Dim namen(1 To 10) As String ' Array met 10 elementen
Dim getallen() As Integer ' Dynamische array
ReDim getallen(1 To 5) ' Grootte later bepalen
Wat is het verschil tussen ByVal en ByRef?
Dit bepaalt hoe parameters aan procedures worden doorgegeven. ByRef (standaard) geeft een verwijzing door – wijzigingen zijn zichtbaar buiten de procedure. ByVal geeft een kopie door – wijzigingen zijn lokaal.
Sub VerhoogByRef(ByRef getal As Integer)
getal = getal + 1 ' Wijzigt het origineel
End Sub
Sub VerhoogByVal(ByVal getal As Integer)
getal = getal + 1 ' Wijzigt alleen de kopie
End Sub
Loop je vast? Neem contact op voor VBA hulp. Ik kijk graag met je mee via WhatsApp of telefoon.
Hulp nodig?
Kom je er niet uit met VBA-variabelen? Of wil je een specifieke automatisering laten bouwen?
- WhatsApp: Stuur een bericht
- E-mail: w.bouwmeester@bouwmeesterconsultancy.nl
- Telefoon: +31 6 28963636
Stuur gerust je Excel-bestand mee met een korte beschrijving van wat je wilt automatiseren. We reageren meestal binnen 24 uur.
Bekijk ook: Snel Excel hulp nodig? | Macro laten maken? | Vraag een offerte aan | Excel op maat





