Arbejde med Områder
Stryg for at vise menuen
Valg af områder
Dette bruges under udforskning; produktionskode undgår .Select til fordel for direkte reference til områder:
ws.Range("A1:I1").Select ' fine for exploring
ws.Range("A1:I1").Font.Bold = True ' better — skips Select entirely
Offset
Flytter en reference relativt til sig selv — læses som (rækker ned, kolonner til højre), hvor negative tal flytter op 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"
Ændr størrelse
Ændrer hvor mange rækker eller kolonner et område dækker, mens dets øverste venstre hjørne forbliver fast:
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 at hente "alt under overskriften" uden at kende rækkeantallet 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
Navngivne områder
Tildel et område et letforståeligt navn, som 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
Opgave
- Startende fra Range("A2") (ORD1001), brug
Offsettil at udskrive Produkt og Total for ordren to rækker nedenfor (ORD1003) — uden nogensinde at skrive "A4", "D4" eller "H4". - Brug
CurrentRegion,OffsetogResizesammen for kun at vælge datarækkerne (ingen overskrift) og udskriv hvor mange rækker dette område indeholder. - Opret et navngivet område kaldet
OrdersData, der dækker det samme dataområde uden overskrift, og bekræft at du kan referere til det ved navn i Immediate Window.
1. Brug af Offset fra A2 for at nå ORD1003
- Start med at sætte en
Range-variabel tilA2— det er din anker-celle, præcis som i kapitlets gennemgåede eksempel. - "To rækker nedenfor" og "samme kolonne" betyder, at det første
Offset-argument (rækker) er 2 og det andet (kolonner) er 0 — for Produkt-kolonnen. - Total er en anden kolonne, men samme række — så kun kolonne-offset-nummeret ændres mellem dine to
Offset-kald, ikke række-nummeret. - Tæl kolonner fra A2's position: Produkt er 3 kolonner til højre for Order ID; Total er 7 kolonner til højre.
2. Kombinering af CurrentRegion, Offset og Resize
CurrentRegionpåA1giver dig hele tabellen, inklusive overskriften.Offset(1, 0)flytter hele blokken én række ned — nok til at fjerne overskriften fra toppen.Resizeskal reducere rækkeantallet med præcis det samme antal, som du har flyttet, ellers vil den nederste kant gå én række forbi de reelle data.
3. Oprettelse og test af et navngivet område
- Navngivne områder tilføjes via
ThisWorkbook.Names.Add, hvor du angiver etName:=og etRefersTo:=— du kan genbruge det nøjagtige områdeudtryk fra hint 2 i stedet for at opbygge det igen fra bunden. - For at referere til det bagefter, brug
Range("OrdersData")— navnet bliver en almindelig streng, 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
Kør Sub (F5), og skriv derefter i det øjeblikkelige vindue (Ctrl+G):
?Range("OrdersData").Rows.Count
Tak for dine kommentarer!
Spørg AI
Spørg AI
Spørg om hvad som helst eller prøv et af de foreslåede spørgsmål for at starte vores chat