VBA Bereiken selecteren in Excel: Range en Cells (2026)
Kort antwoord: Met VBA selecteer je bereiken via
Range("A1")voor specifieke cellen ofCells(rij, kolom)voor dynamische verwijzingen. Range werkt met celadressen zoals “A1:B10”, terwijl Cells werkt met rij- en kolomnummers zoals Cells(1, 1) voor cel A1. Combineer beide voor maximale flexibiliteit.
In het kort
- Range(“A1”) selecteert een specifieke cel via het celadres
- Range(“A1:B10”) selecteert een rechthoekig bereik
- Range(“A1,B5,C10”) selecteert meerdere niet-aaneengesloten cellen
- Cells(rij, kolom) selecteert een cel via rij- en kolomnummers
- Cells(1, 1) is gelijk aan Range(“A1”)
- Combineer Range en Cells voor dynamische bereiken:
Range(Cells(1,1), Cells(10,5)) - Belangrijke properties: Value, Formula, Address
- Belangrijke methods: Select, Copy, Clear, Delete
Waarom Range en Cells in VBA?
Wanneer je met VBA in Excel werkt, wil je cellen lezen, schrijven of bewerken. Het Range-object en de Cells-eigenschap zijn daarvoor je belangrijkste gereedschappen. Zonder deze kun je geen data manipuleren.
Het verschil tussen beide is subtiel maar belangrijk:
- Range werkt met celadressen die je herkent uit Excel (“A1”, “B2:D10”)
- Cells werkt met getallen voor rij en kolom, ideaal voor loops
In de praktijk gebruik je vaak beide door elkaar, afhankelijk van de situatie. Na het lezen van deze handleiding weet je precies wanneer je welke methode kiest.
Als je nog geen VBA-ervaring hebt, lees dan eerst VBA voor beginners in Excel om de basis onder de knie te krijgen.
Range object: de basis
Het Range-object is de meest directe manier om cellen te benaderen. Je gebruikt het celadres dat je al kent uit Excel.
Enkele cel selecteren
Sub EnkeleCel()
' Waarde toekennen aan cel A1
Range("A1").Value = "Hallo"
' Waarde lezen uit cel B1
Dim tekst As String
tekst = Range("B1").Value
' Formule invoeren
Range("C1").Formula = "=A1&B1"
End Sub
Rechthoekig bereik selecteren
Met de dubbele punt (:) selecteer je een rechthoekig bereik:
Sub RechthoekigBereik()
' Bereik A1 tot en met B10
Range("A1:B10").Value = 100
' Opmaak toepassen op bereik
Range("A1:B10").Interior.Color = RGB(255, 255, 0) ' Geel
' Hele bereik wissen
Range("C1:D20").Clear
End Sub
Meerdere niet-aaneengesloten bereiken
Met een komma selecteer je meerdere losse cellen of bereiken:
Sub MeerdereBereiken()
' Drie losse cellen
Range("A1,B5,C10").Value = "X"
' Twee bereiken
Range("A1:A10,C1:C10").Font.Bold = True
' Mix van cellen en bereiken
Range("A1,B2:B5,D10").Interior.Color = RGB(0, 255, 0)
End Sub
Hele rijen en kolommen
Je kunt ook volledige rijen of kolommen selecteren:
Sub RijenEnKolommen()
' Hele rij 1
Range("1:1").Font.Bold = True
' Hele kolom A
Range("A:A").ColumnWidth = 20
' Meerdere rijen
Range("1:5").Interior.Color = RGB(200, 200, 200)
' Meerdere kolommen
Range("A:C").NumberFormat = "#,##0.00"
End Sub
Windows en Mac
De Range-syntaxis werkt identiek op Windows en Mac. Er zijn geen platformspecifieke verschillen bij het selecteren van bereiken.
Cells eigenschap: dynamisch werken
De Cells-eigenschap gebruikt rij- en kolomnummers in plaats van celadressen. Dit is ideaal wanneer je met variabelen werkt of door data loopt.
Basis syntaxis
Cells(rij, kolom)
- rij: het rijnummer (1 = eerste rij)
- kolom: het kolomnummer (1 = A, 2 = B, 3 = C, enzovoort)
Enkele cel met Cells
Sub CellsVoorbeeld()
' Cel A1 (rij 1, kolom 1)
Cells(1, 1).Value = "Eerste cel"
' Cel B2 (rij 2, kolom 2)
Cells(2, 2).Value = "Tweede rij, tweede kolom"
' Cel Z1 (rij 1, kolom 26)
Cells(1, 26).Value = "Kolom Z"
End Sub
Cells met variabelen
Het echte voordeel van Cells zie je bij het gebruik van variabelen:
Sub CellsMetVariabelen()
Dim rijNr As Long
Dim kolomNr As Long
rijNr = 5
kolomNr = 3
' Dit is cel C5
Cells(rijNr, kolomNr).Value = "Dynamisch"
' Verhoog de rij
rijNr = rijNr + 1
Cells(rijNr, kolomNr).Value = "Volgende rij"
End Sub
Cells in een loop
De kracht van Cells komt tot uiting in VBA-lussen:
Sub VulKolom()
Dim i As Long
For i = 1 To 10
Cells(i, 1).Value = "Rij " & i
Next i
End Sub
Sub VulTabel()
Dim rij As Long, kolom As Long
For rij = 1 To 5
For kolom = 1 To 3
Cells(rij, kolom).Value = rij * kolom
Next kolom
Next rij
End Sub
Kolomletter naar nummer converteren
Soms wil je een kolomletter omzetten naar een nummer:
Sub KolomNummer()
Dim kolomNr As Long
' Kolom "D" = 4
kolomNr = Range("D1").Column
MsgBox "Kolom D is nummer: " & kolomNr
' Andersom: nummer naar letter
Dim kolomLetter As String
kolomLetter = Split(Cells(1, 4).Address, "$")(1)
MsgBox "Kolom 4 is: " & kolomLetter
End Sub
Range en Cells combineren
De krachtigste techniek is het combineren van Range en Cells. Hiermee definieer je dynamische bereiken:
Dynamisch bereik maken
Sub DynamischBereik()
Dim startRij As Long, eindRij As Long
Dim startKolom As Long, eindKolom As Long
startRij = 2
eindRij = 100
startKolom = 1
eindKolom = 5
' Bereik van A2:E100
Range(Cells(startRij, startKolom), Cells(eindRij, eindKolom)).Select
End Sub
Laatste rij met data vinden
Een veelvoorkomend patroon is het vinden van de laatste rij met data:
Sub LaatsteRij()
Dim laatsteRij As Long
' Vind laatste rij met data in kolom A
laatsteRij = Cells(Rows.Count, 1).End(xlUp).Row
MsgBox "Laatste rij met data: " & laatsteRij
' Selecteer alle data van A1 tot laatste rij
Range(Cells(1, 1), Cells(laatsteRij, 1)).Select
End Sub
Laatste kolom met data vinden
Sub LaatsteKolom()
Dim laatsteKolom As Long
' Vind laatste kolom met data in rij 1
laatsteKolom = Cells(1, Columns.Count).End(xlToLeft).Column
MsgBox "Laatste kolom met data: " & laatsteKolom
End Sub
Volledig gebruikte bereik
Sub VolledigBereik()
Dim laatsteRij As Long
Dim laatsteKolom As Long
laatsteRij = Cells(Rows.Count, 1).End(xlUp).Row
laatsteKolom = Cells(1, Columns.Count).End(xlToLeft).Column
' Selecteer van A1 tot de laatste cel met data
Range(Cells(1, 1), Cells(laatsteRij, laatsteKolom)).Select
End Sub
Belangrijke properties
Value: celwaarde lezen en schrijven
De Value-property is wat je het meest gebruikt:
Sub ValueProperty()
' Waarde schrijven
Range("A1").Value = "Tekst"
Range("B1").Value = 123.45
Range("C1").Value = Date
' Waarde lezen
Dim inhoud As Variant
inhoud = Range("A1").Value
' Value is de standaard property, dus dit werkt ook:
Range("D1") = "Zonder .Value"
End Sub
Formula: formules invoeren
Met Formula voer je Excel-formules in:
Sub FormulaProperty()
' Formule in Engelse notatie
Range("A1").Formula = "=SUM(B1:B10)"
' Formule in lokale notatie (Nederlands)
Range("A2").FormulaLocal = "=SOM(B1:B10)"
' Formule met R1C1-notatie
Range("A3").FormulaR1C1 = "=SUM(R[-10]C:R[-1]C)"
' Formule lezen
Dim formule As String
formule = Range("A1").Formula
End Sub
Address: celadres opvragen
Sub AddressProperty()
Dim adres As String
' Standaard: absoluut adres
adres = Range("A1").Address ' "$A$1"
' Relatief adres
adres = Range("A1").Address(False, False) ' "A1"
' Alleen rij absoluut
adres = Range("A1").Address(True, False) ' "A$1"
' Adres van Cells
adres = Cells(5, 3).Address ' "$C$5"
End Sub
Row en Column: positie opvragen
Sub RowColumnProperty()
Dim rij As Long, kolom As Long
rij = Range("C5").Row ' 5
kolom = Range("C5").Column ' 3
' Ook voor Cells
rij = Cells(10, 4).Row ' 10
kolom = Cells(10, 4).Column ' 4
End Sub
Count: aantal cellen tellen
Sub CountProperty()
Dim aantal As Long
' Aantal cellen in bereik
aantal = Range("A1:C10").Count ' 30 cellen
' Aantal rijen
aantal = Range("A1:C10").Rows.Count ' 10 rijen
' Aantal kolommen
aantal = Range("A1:C10").Columns.Count ' 3 kolommen
End Sub
Belangrijke methods
Select: bereik selecteren
Sub SelectMethod()
' Enkele cel selecteren
Range("A1").Select
' Bereik selecteren
Range("A1:B10").Select
' Let op: vermijd Select waar mogelijk (zie tips)
End Sub
Copy: kopiëren
Sub CopyMethod()
' Kopieer naar specifieke bestemming
Range("A1:A10").Copy Destination:=Range("C1")
' Kopieer naar klembord (voor later plakken)
Range("A1:A10").Copy
' Plakken
Range("E1").PasteSpecial xlPasteValues
' Knippen
Range("A1:A10").Cut Destination:=Range("G1")
End Sub
Clear: wissen
Er zijn meerdere Clear-methodes:
Sub ClearMethods()
' Alles wissen (waarden, opmaak, opmerkingen)
Range("A1:A10").Clear
' Alleen waarden wissen
Range("A1:A10").ClearContents
' Alleen opmaak wissen
Range("A1:A10").ClearFormats
' Alleen opmerkingen wissen
Range("A1:A10").ClearComments
End Sub
Delete: verwijderen
Sub DeleteMethod()
' Rijen verwijderen (cellen schuiven omhoog)
Range("A5:A10").Delete Shift:=xlShiftUp
' Kolommen verwijderen (cellen schuiven links)
Range("B:B").Delete Shift:=xlShiftToLeft
' Hele rij verwijderen
Range("A5").EntireRow.Delete
' Hele kolom verwijderen
Range("B1").EntireColumn.Delete
End Sub
Insert: invoegen
Sub InsertMethod()
' Cellen invoegen (bestaande schuiven omlaag)
Range("A5:A10").Insert Shift:=xlShiftDown
' Hele rij invoegen
Range("A5").EntireRow.Insert
' Hele kolom invoegen
Range("C1").EntireColumn.Insert
End Sub
Speciale bereiken
CurrentRegion: huidige regio
CurrentRegion selecteert alle aaneengesloten cellen rondom een cel:
Sub CurrentRegionVoorbeeld()
' Selecteer tabel rondom A1
Range("A1").CurrentRegion.Select
' Handige manier om databereik te vinden
Dim dataRange As Range
Set dataRange = Range("A1").CurrentRegion
MsgBox "Data bevat " & dataRange.Rows.Count & " rijen"
End Sub
UsedRange: gebruikt bereik
UsedRange geeft het volledige gebruikte gebied van een werkblad:
Sub UsedRangeVoorbeeld()
' Selecteer alle gebruikte cellen
ActiveSheet.UsedRange.Select
' Adres van gebruikt bereik
MsgBox "Gebruikt bereik: " & ActiveSheet.UsedRange.Address
End Sub
SpecialCells: speciale cellen
Met SpecialCells filter je specifieke celtypes:
Sub SpecialCellsVoorbeeld()
' Alleen cellen met formules
Range("A1:D100").SpecialCells(xlCellTypeFormulas).Select
' Alleen cellen met constanten (geen formules)
Range("A1:D100").SpecialCells(xlCellTypeConstants).Select
' Alleen lege cellen
Range("A1:D100").SpecialCells(xlCellTypeBlanks).Select
' Laatste cel met data
ActiveSheet.Cells.SpecialCells(xlCellTypeLastCell).Select
' Alleen zichtbare cellen (na filteren)
Selection.SpecialCells(xlCellTypeVisible).Copy
End Sub
Offset: verschuiven
Met Offset verschuif je een bereik:
Sub OffsetVoorbeeld()
' 2 rijen omlaag, 1 kolom naar rechts
Range("A1").Offset(2, 1).Value = "Ik sta in B3"
' Negatief: omhoog of links
Range("C5").Offset(-2, -1).Value = "Ik sta in B3"
' Alleen rij verschuiven
Range("A1").Offset(5).Value = "A6"
End Sub
Resize: formaat wijzigen
Met Resize wijzig je de grootte van een bereik:
Sub ResizeVoorbeeld()
' Maak bereik 5 rijen en 3 kolommen
Range("A1").Resize(5, 3).Select ' A1:C5
' Combineer met Offset
Range("A1").Offset(1, 0).Resize(10, 1).Value = "Data"
End Sub
Werken met benoemde bereiken
Je kunt ook werken met benoemde bereiken in VBA:
Sub BenoemdeBereiken()
' Benoemd bereik aanspreken
Range("MijnBereik").Value = 100
' Of via Names collection
Names("MijnBereik").RefersToRange.Value = 100
' Nieuw benoemd bereik maken
Names.Add Name:="NieuwBereik", RefersTo:="=$A$1:$A$10"
' Benoemd bereik verwijderen
Names("NieuwBereik").Delete
End Sub
Praktijkvoorbeeld: data verwerken
Hier is een compleet voorbeeld dat veel technieken combineert:
Sub VerwerkVerkoopData()
Dim ws As Worksheet
Dim laatsteRij As Long
Dim rij As Long
Dim totaal As Double
Set ws = ThisWorkbook.Sheets("Verkoop")
' Schermverversing uitschakelen voor snelheid
Application.ScreenUpdating = False
' Vind laatste rij met data in kolom A
laatsteRij = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row
' Loop door alle rijen met data
totaal = 0
For rij = 2 To laatsteRij ' Start bij 2 (skip koptekst)
' Lees verkoopbedrag uit kolom C
If IsNumeric(ws.Cells(rij, 3).Value) Then
totaal = totaal + ws.Cells(rij, 3).Value
End If
' Voeg formule toe in kolom D (BTW berekening)
ws.Cells(rij, 4).Formula = "=C" & rij & "*0.21"
' Markeer hoge bedragen
If ws.Cells(rij, 3).Value > 1000 Then
ws.Range(ws.Cells(rij, 1), ws.Cells(rij, 4)).Interior.Color = RGB(255, 255, 0)
End If
Next rij
' Schrijf totaal onder de data
ws.Cells(laatsteRij + 2, 2).Value = "Totaal:"
ws.Cells(laatsteRij + 2, 3).Value = totaal
ws.Cells(laatsteRij + 2, 3).Font.Bold = True
' Schermverversing weer aanzetten
Application.ScreenUpdating = True
MsgBox "Verwerking voltooid. Totaal: " & Format(totaal, "#,##0.00")
End Sub
Veelgemaakte fouten
1. Verkeerde werkblad geselecteerd
Oorzaak: Range(“A1”) verwijst naar de actieve sheet, niet per se naar de sheet die je bedoelt.
' FOUT: als Sheet2 actief is, schrijf je daar
Range("A1").Value = "Test"
' GOED: specificeer het werkblad
Sheets("Sheet1").Range("A1").Value = "Test"
' OF gebruik With
With Sheets("Sheet1")
.Range("A1").Value = "Test"
.Range("B1").Value = "Ook hier"
End With
2. Select overmatig gebruiken
Oorzaak: Veel beginners selecteren eerst en bewerken dan, maar dat is traag.
' TRAAG: onnodige selectie
Range("A1").Select
Selection.Value = "Test"
' SNEL: direct aanspreken
Range("A1").Value = "Test"
3. Integer voor rijen gebruiken
Oorzaak: Integer kan maar tot 32.767, maar Excel heeft 1.048.576 rijen.
' FOUT: overflow bij grote datasets
Dim rij As Integer
' GOED: gebruik Long
Dim rij As Long
4. Cells zonder werkblad
Oorzaak: Cells zonder qualifier verwijst naar de actieve sheet.
' RISICOVOL: verwijst naar actieve sheet
Cells(1, 1).Value = "Test"
' VEILIG: specificeer sheet
Sheets("Data").Cells(1, 1).Value = "Test"
5. Formule met verkeerde taal
Oorzaak: Formula verwacht Engelse functienamen, FormulaLocal verwacht Nederlandse.
' FOUT: Nederlandse naam in Formula
Range("A1").Formula = "=SOM(B1:B10)"
' GOED: Engelse naam in Formula
Range("A1").Formula = "=SUM(B1:B10)"
' OF Nederlandse naam in FormulaLocal
Range("A1").FormulaLocal = "=SOM(B1:B10)"
FAQ
Wat is het verschil tussen Range en Cells?
Range gebruikt celadressen (“A1”) die je kent uit Excel, terwijl Cells rij- en kolomnummers gebruikt (Cells(1,1)). Gebruik Range voor vaste bereiken en Cells wanneer je met variabelen werkt of door data loopt in een loop.
Hoe selecteer ik een heel werkblad?
Gebruik Cells.Select of Range("A1").CurrentRegion.Select voor data, of ActiveSheet.UsedRange.Select voor alle gebruikte cellen. Wees voorzichtig met Cells.Select op grote sheets – dit kan traag zijn.
Kan ik Range en Cells door elkaar gebruiken?
Ja, je kunt ze zelfs combineren: Range(Cells(1,1), Cells(10,5)) maakt een bereik van A1 tot E10. Dit is een krachtige techniek voor dynamische bereiken.
Hoe vind ik de laatste cel met data?
Gebruik Cells(Rows.Count, 1).End(xlUp).Row voor de laatste rij in kolom A, of Cells(1, Columns.Count).End(xlToLeft).Column voor de laatste kolom in rij 1.
Waarom krijg ik een “Run-time error 1004”?
Deze fout ontstaat vaak doordat je probeert te selecteren op een niet-actief werkblad, of omdat het bereik ongeldig is. Specificeer altijd het werkblad en controleer of het bereik bestaat.
Moet ik altijd Select gebruiken voordat ik een cel bewerk?
Nee, Select is meestal niet nodig en maakt je code trager. Bewerk cellen direct: Range("A1").Value = "Test" in plaats van Range("A1").Select gevolgd door Selection.Value = "Test".
Hoe kopieer ik alleen waarden, geen formules?
Gebruik Range("A1").Copy gevolgd door Range("B1").PasteSpecial xlPasteValues. Of nog sneller: Range("B1").Value = Range("A1").Value.
Werkt VBA-code met bereiken hetzelfde op Mac?
Ja, Range en Cells werken identiek op Windows en Mac. Alleen sommige geavanceerde functies kunnen verschillen, maar de basis bereikoperaties zijn platformonafhankelijk.
Gerelateerde onderwerpen
VBA-bereiken vormen de basis voor geavanceerde Excel-automatisering:
- VBA voor beginners: start met de basisconcepten van VBA
- VBA lussen: herhaal code voor meerdere cellen
- Bereiken benoemen: maak leesbare verwijzingen met Named Ranges
- Macro opnemen: automatiseer zonder te coderen
- Excel formules: combineer VBA met krachtige functies
Hulp nodig? Neem contact op voor VBA hulp. Via WhatsApp of telefoon ben ik snel bereikbaar.
Hulp nodig?
Kom je er niet uit met VBA Range en Cells? 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: Hulp nodig met Excel? | VBA hulp nodig? | Wat kost dit? | Spreadsheet laten maken?





