Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lære Arbeide med områder | Arbeide med Excel-data
Excel VBA for Forretningsautomatisering

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"
Figur 3.3

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

  1. Start fra Range("A2") (ORD1001), bruk Offset for å skrive ut Produkt og Total for ordren to rader under (ORD1003) — uten å skrive "A4", "D4" eller "H4".
  2. Bruk CurrentRegion, Offset og Resize sammen for å velge kun dataradene (uten overskrift) og skriv ut hvor mange rader dette området inneholder.
  3. Opprett et navngitt område kalt OrdersData som dekker det samme dataområdet og bekreft at du kan referere til det ved navn i Immediate Window.
Tips
expand arrow

1. Bruke Offset fra A2 for å nå ORD1003

  • Start med å sette en Range-variabel til A2 — 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

  • CurrentRegionA1 gir deg hele tabellen, inkludert overskriften.
  • Offset(1, 0) flytter hele blokken én rad ned — nok til å fjerne overskriften fra toppen.
  • Resize må 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 et Name:= og et RefersTo:= — 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.
Løsning
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

Kjør Sub (F5), og skriv deretter i Umiddelbar-vinduet (Ctrl+G):

?Range("OrdersData").Rows.Count
Alt var klart?

Hvordan kan vi forbedre det?

Takk for tilbakemeldingene dine!

Seksjon 3. Kapittel 3

Spør AI

expand

Spør AI

ChatGPT

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"
Figur 3.3

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

  1. Start fra Range("A2") (ORD1001), bruk Offset for å skrive ut Produkt og Total for ordren to rader under (ORD1003) — uten å skrive "A4", "D4" eller "H4".
  2. Bruk CurrentRegion, Offset og Resize sammen for å velge kun dataradene (uten overskrift) og skriv ut hvor mange rader dette området inneholder.
  3. Opprett et navngitt område kalt OrdersData som dekker det samme dataområdet og bekreft at du kan referere til det ved navn i Immediate Window.
Tips
expand arrow

1. Bruke Offset fra A2 for å nå ORD1003

  • Start med å sette en Range-variabel til A2 — 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

  • CurrentRegionA1 gir deg hele tabellen, inkludert overskriften.
  • Offset(1, 0) flytter hele blokken én rad ned — nok til å fjerne overskriften fra toppen.
  • Resize må 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 et Name:= og et RefersTo:= — 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.
Løsning
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

Kjør Sub (F5), og skriv deretter i Umiddelbar-vinduet (Ctrl+G):

?Range("OrdersData").Rows.Count
Alt var klart?

Hvordan kan vi forbedre det?

Takk for tilbakemeldingene dine!

Seksjon 3. Kapittel 3
some-alt