Arbeide med områder
Sveip for å vise menyen
Velge områder
Dette gjøres under utforskning; produksjonskode unngår .Select til fordel for å referere til områder direkte:
ws.Range("A1:I1").Select ' fine for exploring
ws.Range("A1:I1").Font.Bold = True ' better — skips Select entirely
Offset
Flytter en referanse relativt til seg selv — leses som (rader ned, kolonner til høyre), med negative tall som flytter opp eller til venstre:
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"
Endre størrelse
Endrer hvor mange rader eller kolonner et område dekker, mens øverste venstre hjørne forblir uendret:
Dim headerRow As Range
Set headerRow = ws.Range("A1")
Set headerRow = headerRow.Resize(1, 9) ' now covers A1:I1, the full header
Kombiner Offset og Resize for å hente "alt under overskriften" uten å vite antall rader på forhånd:
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
Navngitte områder
Gi et område et lettfattelig navn du kan referere til i stedet for en adresse:
ThisWorkbook.Names.Add Name:="OrdersTable", RefersTo:=ws.Range("A1:I6")
Debug.Print ws.Range("OrdersTable").Rows.Count
Oppgave
- Start fra Range("A2") (ORD1001), bruk
Offsetfor å skrive ut Produkt og Total for ordren to rader under (ORD1003) — uten å skrive "A4", "D4" eller "H4". - Bruk
CurrentRegion,OffsetogResizesammen for å velge kun dataradene (uten overskrift) og skriv ut hvor mange rader dette området inneholder. - Opprett et navngitt område kalt
OrdersDatasom dekker det samme dataområdet og bekreft at du kan referere til det ved navn i Immediate Window.
1. Bruke Offset fra A2 for å nå ORD1003
- Start med å sette en
Range-variabel tilA2— dette er anker-cellen, akkurat som i kapittelets gjennomgangseksempel. - "To rader ned" og "samme kolonne" betyr at det første
Offset-argumentet (rader) er 2 og det andre (kolonner) er 0 — for Produkt-kolonnen. - Total er en annen kolonne, men samme rad — så det er kun kolonne-offset-nummeret som endres mellom de to
Offset-kallene, ikke rad-nummeret. - Tell kolonner fra A2 sin posisjon: Produkt er 3 kolonner til høyre for Order ID; Total er 7 kolonner til høyre.
2. Kombinere CurrentRegion, Offset og Resize
CurrentRegionpåA1gir deg hele tabellen, inkludert overskriften.Offset(1, 0)flytter hele blokken én rad ned — nok til å fjerne overskriften fra toppen.Resizemå redusere antall rader med nøyaktig samme antall som du har flyttet, ellers vil den nederste kanten gå én rad forbi de faktiske dataene.
3. Lage og teste et navngitt område
- Navngitte områder legges til via
ThisWorkbook.Names.Add, hvor du gir etName:=og etRefersTo:=— du kan bruke det samme områdeuttrykket fra hint 2 i stedet for å bygge det opp på nytt. - For å referere til det senere, bruk
Range("OrdersData")— navnet blir en ren tekststreng, ikke en variabel.
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
Kjør Sub (F5), og skriv deretter i Umiddelbar-vinduet (Ctrl+G):
?Range("OrdersData").Rows.Count
Takk for tilbakemeldingene dine!
Spør AI
Spør AI
Spør om hva du vil, eller prøv ett av de foreslåtte spørsmålene for å starte chatten vår
Arbeide med områder
Velge områder
Dette gjøres under utforskning; produksjonskode unngår .Select til fordel for å referere til områder direkte:
ws.Range("A1:I1").Select ' fine for exploring
ws.Range("A1:I1").Font.Bold = True ' better — skips Select entirely
Offset
Flytter en referanse relativt til seg selv — leses som (rader ned, kolonner til høyre), med negative tall som flytter opp eller til venstre:
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"
Endre størrelse
Endrer hvor mange rader eller kolonner et område dekker, mens øverste venstre hjørne forblir uendret:
Dim headerRow As Range
Set headerRow = ws.Range("A1")
Set headerRow = headerRow.Resize(1, 9) ' now covers A1:I1, the full header
Kombiner Offset og Resize for å hente "alt under overskriften" uten å vite antall rader på forhånd:
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
Navngitte områder
Gi et område et lettfattelig navn du kan referere til i stedet for en adresse:
ThisWorkbook.Names.Add Name:="OrdersTable", RefersTo:=ws.Range("A1:I6")
Debug.Print ws.Range("OrdersTable").Rows.Count
Oppgave
- Start fra Range("A2") (ORD1001), bruk
Offsetfor å skrive ut Produkt og Total for ordren to rader under (ORD1003) — uten å skrive "A4", "D4" eller "H4". - Bruk
CurrentRegion,OffsetogResizesammen for å velge kun dataradene (uten overskrift) og skriv ut hvor mange rader dette området inneholder. - Opprett et navngitt område kalt
OrdersDatasom dekker det samme dataområdet og bekreft at du kan referere til det ved navn i Immediate Window.
1. Bruke Offset fra A2 for å nå ORD1003
- Start med å sette en
Range-variabel tilA2— dette er anker-cellen, akkurat som i kapittelets gjennomgangseksempel. - "To rader ned" og "samme kolonne" betyr at det første
Offset-argumentet (rader) er 2 og det andre (kolonner) er 0 — for Produkt-kolonnen. - Total er en annen kolonne, men samme rad — så det er kun kolonne-offset-nummeret som endres mellom de to
Offset-kallene, ikke rad-nummeret. - Tell kolonner fra A2 sin posisjon: Produkt er 3 kolonner til høyre for Order ID; Total er 7 kolonner til høyre.
2. Kombinere CurrentRegion, Offset og Resize
CurrentRegionpåA1gir deg hele tabellen, inkludert overskriften.Offset(1, 0)flytter hele blokken én rad ned — nok til å fjerne overskriften fra toppen.Resizemå redusere antall rader med nøyaktig samme antall som du har flyttet, ellers vil den nederste kanten gå én rad forbi de faktiske dataene.
3. Lage og teste et navngitt område
- Navngitte områder legges til via
ThisWorkbook.Names.Add, hvor du gir etName:=og etRefersTo:=— du kan bruke det samme områdeuttrykket fra hint 2 i stedet for å bygge det opp på nytt. - For å referere til det senere, bruk
Range("OrdersData")— navnet blir en ren tekststreng, ikke en variabel.
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
Kjør Sub (F5), og skriv deretter i Umiddelbar-vinduet (Ctrl+G):
?Range("OrdersData").Rows.Count
Takk for tilbakemeldingene dine!