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"
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
- Begin bij Range("A2") (ORD1001) en gebruik
Offsetom het Product en het Totaal af te drukken voor de bestelling twee rijen lager (ORD1003) — zonder ooit "A4", "D4" of "H4" te typen. - Gebruik
CurrentRegion,OffsetenResizesamen om alleen de gegevensrijen (zonder kop) te selecteren en druk af hoeveel rijen dat bereik bevat. - Maak een benoemd bereik genaamd
OrdersDatadat hetzelfde gegevensbereik zonder kop beslaat en controleer of je het bij naam kunt aanroepen in het Direct venster.
1. Gebruik van Offset vanaf A2 om ORD1003 te bereiken
- Begin met het instellen van een
Range-variabele opA2— 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
CurrentRegionopA1geeft 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.Resizemoet 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 eenName:=en eenRefersTo:=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.
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
Bedankt voor je feedback!
Vraag AI
Vraag AI
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"
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
- Begin bij Range("A2") (ORD1001) en gebruik
Offsetom het Product en het Totaal af te drukken voor de bestelling twee rijen lager (ORD1003) — zonder ooit "A4", "D4" of "H4" te typen. - Gebruik
CurrentRegion,OffsetenResizesamen om alleen de gegevensrijen (zonder kop) te selecteren en druk af hoeveel rijen dat bereik bevat. - Maak een benoemd bereik genaamd
OrdersDatadat hetzelfde gegevensbereik zonder kop beslaat en controleer of je het bij naam kunt aanroepen in het Direct venster.
1. Gebruik van Offset vanaf A2 om ORD1003 te bereiken
- Begin met het instellen van een
Range-variabele opA2— 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
CurrentRegionopA1geeft 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.Resizemoet 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 eenName:=en eenRefersTo:=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.
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
Bedankt voor je feedback!