Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Leer Werken met Bereiken | Werken met Excel-gegevens
Excel VBA voor Bedrijfsautomatisering

Werken met Bereiken

Veeg om het menu te tonen

Selecteren van bereiken

Dit doe je tijdens het verkennen; productcode vermijdt .Select en verwijst direct naar bereiken:

ws.Range("A1:I1").Select        ' fine for exploring
ws.Range("A1:I1").Font.Bold = True    ' better — skips Select entirely

Offset

Verplaatst een verwijzing relatief ten opzichte van zichzelf — lees als (rijen naar beneden, kolommen naar rechts), waarbij negatieve getallen omhoog of naar links gaan:

Dim orderCell As Range
Set orderCell = ws.Range("A2")             ' ORD1001
Debug.Print orderCell.Offset(1, 0).Value    ' one row down → ORD1002
Debug.Print orderCell.Offset(0, 2).Value    ' two columns right → Acme Corp
Debug.Print orderCell.Offset(-1, 0).Value   ' one row up → the header, "Order ID"
Figuur 3.3

Formaat wijzigen

Wijzigt het aantal rijen of kolommen dat een bereik beslaat, waarbij de linkerbovenhoek vast blijft:

Dim headerRow As Range
Set headerRow = ws.Range("A1")
Set headerRow = headerRow.Resize(1, 9)    ' now covers A1:I1, the full header

Combineer Offset en Resize om "alles onder de kop" te selecteren zonder vooraf het aantal rijen te weten:

Dim dataRange As Range
Set dataRange = ws.Range("A1").CurrentRegion
Set dataRange = dataRange.Offset(1, 0).Resize(dataRange.Rows.Count - 1)
' dataRange now covers A2:I6 — every order, no header

Benoemde bereiken

Geef een bereik een begrijpelijke naam die je kunt gebruiken in plaats van een adres:

ThisWorkbook.Names.Add Name:="OrdersTable", RefersTo:=ws.Range("A1:I6")
Debug.Print ws.Range("OrdersTable").Rows.Count

Opdracht

  1. Begin bij Range("A2") (ORD1001) en gebruik Offset om het Product en het Totaal af te drukken voor de bestelling twee rijen lager (ORD1003) — zonder ooit "A4", "D4" of "H4" te typen.
  2. Gebruik CurrentRegion, Offset en Resize samen om alleen de gegevensrijen (zonder kop) te selecteren en druk af hoeveel rijen dat bereik bevat.
  3. Maak een benoemd bereik genaamd OrdersData dat hetzelfde gegevensbereik zonder kop beslaat en controleer of je het bij naam kunt aanroepen in het Direct venster.
Hint
expand arrow

1. Gebruik van Offset vanaf A2 om ORD1003 te bereiken

  • Begin met het instellen van een Range-variabele op A2 — dit is de ankercel, precies zoals in het uitgewerkte voorbeeld van het hoofdstuk.
  • "Twee rijen lager" en "dezelfde kolom" betekent dat het eerste Offset-argument (rijen) 2 is en het tweede (kolommen) 0 — voor de kolom Product.
  • Totaal is een andere kolom maar dezelfde rij — dus alleen het kolom-offsetgetal verandert tussen je twee Offset-aanroepen, niet het rijgetal.
  • Tel kolommen vanaf de positie van A2: Product is 3 kolommen naar rechts van Order ID; Totaal is 7 kolommen naar rechts.

2. Combineren van CurrentRegion, Offset en Resize

  • CurrentRegion op A1 geeft de hele tabel, inclusief de kop.
  • Offset(1, 0) verschuift dat hele blok één rij naar beneden — genoeg om de kop van de bovenkant te verwijderen.
  • Resize moet het aantal rijen exact met hetzelfde aantal verkleinen als je hebt verschoven, anders loopt de onderkant één rij voorbij de echte gegevens.

3. Een benoemd bereik maken en testen

  • Benoemde bereiken worden toegevoegd via ThisWorkbook.Names.Add, waarbij je een Name:= en een RefersTo:= opgeeft — je kunt dezelfde range-expressie uit hint 2 hergebruiken in plaats van deze opnieuw op te bouwen.
  • Om er later naar te verwijzen, gebruik je Range("OrdersData") — de naam wordt een gewone string, geen variabele.
Oplossing
expand arrow
Sub NavigateWithoutHardcoding()
    Dim ws As Worksheet
    Set ws = ThisWorkbook.Worksheets("Orders")

    ' --- 1. Offset from A2 to reach ORD1003 ---
    Dim orderCell As Range
    Set orderCell = ws.Range("A2")

    Debug.Print orderCell.Offset(2, 3).Value   ' Product
    Debug.Print orderCell.Offset(2, 7).Value   ' Total

    ' --- 2. CurrentRegion + Offset + Resize ---
    Dim dataRange As Range
    Set dataRange = ws.Range("A1").CurrentRegion
    Set dataRange = dataRange.Offset(1, 0).Resize(dataRange.Rows.Count - 1)

    Debug.Print "Data rows: " & dataRange.Rows.Count

    ' --- 3. Named range ---
    ThisWorkbook.Names.Add Name:="OrdersData", RefersTo:=dataRange
End Sub

Voer de Sub uit (F5), typ daarna in het Direct-venster (Ctrl+G):

?Range("OrdersData").Rows.Count
Was alles duidelijk?

Hoe kunnen we het verbeteren?

Bedankt voor je feedback!

Sectie 3. Hoofdstuk 3

Vraag AI

expand

Vraag AI

ChatGPT

Vraag wat u wilt of probeer een van de voorgestelde vragen om onze chat te starten.

Werken met Bereiken

Selecteren van bereiken

Dit doe je tijdens het verkennen; productcode vermijdt .Select en verwijst direct naar bereiken:

ws.Range("A1:I1").Select        ' fine for exploring
ws.Range("A1:I1").Font.Bold = True    ' better — skips Select entirely

Offset

Verplaatst een verwijzing relatief ten opzichte van zichzelf — lees als (rijen naar beneden, kolommen naar rechts), waarbij negatieve getallen omhoog of naar links gaan:

Dim orderCell As Range
Set orderCell = ws.Range("A2")             ' ORD1001
Debug.Print orderCell.Offset(1, 0).Value    ' one row down → ORD1002
Debug.Print orderCell.Offset(0, 2).Value    ' two columns right → Acme Corp
Debug.Print orderCell.Offset(-1, 0).Value   ' one row up → the header, "Order ID"
Figuur 3.3

Formaat wijzigen

Wijzigt het aantal rijen of kolommen dat een bereik beslaat, waarbij de linkerbovenhoek vast blijft:

Dim headerRow As Range
Set headerRow = ws.Range("A1")
Set headerRow = headerRow.Resize(1, 9)    ' now covers A1:I1, the full header

Combineer Offset en Resize om "alles onder de kop" te selecteren zonder vooraf het aantal rijen te weten:

Dim dataRange As Range
Set dataRange = ws.Range("A1").CurrentRegion
Set dataRange = dataRange.Offset(1, 0).Resize(dataRange.Rows.Count - 1)
' dataRange now covers A2:I6 — every order, no header

Benoemde bereiken

Geef een bereik een begrijpelijke naam die je kunt gebruiken in plaats van een adres:

ThisWorkbook.Names.Add Name:="OrdersTable", RefersTo:=ws.Range("A1:I6")
Debug.Print ws.Range("OrdersTable").Rows.Count

Opdracht

  1. Begin bij Range("A2") (ORD1001) en gebruik Offset om het Product en het Totaal af te drukken voor de bestelling twee rijen lager (ORD1003) — zonder ooit "A4", "D4" of "H4" te typen.
  2. Gebruik CurrentRegion, Offset en Resize samen om alleen de gegevensrijen (zonder kop) te selecteren en druk af hoeveel rijen dat bereik bevat.
  3. Maak een benoemd bereik genaamd OrdersData dat hetzelfde gegevensbereik zonder kop beslaat en controleer of je het bij naam kunt aanroepen in het Direct venster.
Hint
expand arrow

1. Gebruik van Offset vanaf A2 om ORD1003 te bereiken

  • Begin met het instellen van een Range-variabele op A2 — dit is de ankercel, precies zoals in het uitgewerkte voorbeeld van het hoofdstuk.
  • "Twee rijen lager" en "dezelfde kolom" betekent dat het eerste Offset-argument (rijen) 2 is en het tweede (kolommen) 0 — voor de kolom Product.
  • Totaal is een andere kolom maar dezelfde rij — dus alleen het kolom-offsetgetal verandert tussen je twee Offset-aanroepen, niet het rijgetal.
  • Tel kolommen vanaf de positie van A2: Product is 3 kolommen naar rechts van Order ID; Totaal is 7 kolommen naar rechts.

2. Combineren van CurrentRegion, Offset en Resize

  • CurrentRegion op A1 geeft de hele tabel, inclusief de kop.
  • Offset(1, 0) verschuift dat hele blok één rij naar beneden — genoeg om de kop van de bovenkant te verwijderen.
  • Resize moet het aantal rijen exact met hetzelfde aantal verkleinen als je hebt verschoven, anders loopt de onderkant één rij voorbij de echte gegevens.

3. Een benoemd bereik maken en testen

  • Benoemde bereiken worden toegevoegd via ThisWorkbook.Names.Add, waarbij je een Name:= en een RefersTo:= opgeeft — je kunt dezelfde range-expressie uit hint 2 hergebruiken in plaats van deze opnieuw op te bouwen.
  • Om er later naar te verwijzen, gebruik je Range("OrdersData") — de naam wordt een gewone string, geen variabele.
Oplossing
expand arrow
Sub NavigateWithoutHardcoding()
    Dim ws As Worksheet
    Set ws = ThisWorkbook.Worksheets("Orders")

    ' --- 1. Offset from A2 to reach ORD1003 ---
    Dim orderCell As Range
    Set orderCell = ws.Range("A2")

    Debug.Print orderCell.Offset(2, 3).Value   ' Product
    Debug.Print orderCell.Offset(2, 7).Value   ' Total

    ' --- 2. CurrentRegion + Offset + Resize ---
    Dim dataRange As Range
    Set dataRange = ws.Range("A1").CurrentRegion
    Set dataRange = dataRange.Offset(1, 0).Resize(dataRange.Rows.Count - 1)

    Debug.Print "Data rows: " & dataRange.Rows.Count

    ' --- 3. Named range ---
    ThisWorkbook.Names.Add Name:="OrdersData", RefersTo:=dataRange
End Sub

Voer de Sub uit (F5), typ daarna in het Direct-venster (Ctrl+G):

?Range("OrdersData").Rows.Count
Was alles duidelijk?

Hoe kunnen we het verbeteren?

Bedankt voor je feedback!

Sectie 3. Hoofdstuk 3
some-alt