Työskentely Alueiden Kanssa
Pyyhkäise näyttääksesi valikon
Alueiden valitseminen
Tätä tehdään tutkimisen yhteydessä, tuotantokoodissa vältetään .Select-käskyä ja viitataan alueisiin suoraan:
ws.Range("A1:I1").Select ' fine for exploring
ws.Range("A1:I1").Font.Bold = True ' better — skips Select entirely
Offset
Siirtää viitettä suhteessa itseensä — luetaan muodossa (rivit alas, sarakkeet oikealle), negatiiviset arvot siirtävät ylös tai vasemmalle:
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"
Resize
Muokkaa alueen kattamien rivien tai sarakkeiden määrää pitäen vasen yläkulma paikallaan:
Dim headerRow As Range
Set headerRow = ws.Range("A1")
Set headerRow = headerRow.Resize(1, 9) ' now covers A1:I1, the full header
Yhdistämällä Offset ja Resize voit hakea "kaikki otsikon alapuolella olevat rivit" tietämättä rivimäärää etukäteen:
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
Nimikoidut alueet
Anna alueelle selkokielinen nimi, jota voit käyttää osoitteen sijaan:
ThisWorkbook.Names.Add Name:="OrdersTable", RefersTo:=ws.Range("A1:I6")
Debug.Print ws.Range("OrdersTable").Rows.Count
Tehtävä
- Aloittaen Range("A2") (ORD1001), käytä
Offset-ominaisuutta tulostaaksesi tuotteen ja kokonaissumman tilaukselle kaksi riviä alempana (ORD1003) — ilman, että kirjoitat "A4", "D4" tai "H4". - Käytä yhdessä
CurrentRegion,OffsetjaResize-ominaisuuksia valitaksesi vain datarivit (ei otsikkoa) ja tulostaaksesi kuinka monta riviä alue sisältää. - Luo nimetty alue nimeltä
OrdersData, joka kattaa saman pelkän datan alueen, ja varmista, että voit viitata siihen nimellä Immediate Window -ikkunassa.
1. Offsetin käyttäminen A2:sta ORD1003:een
- Aloita asettamalla
Range-muuttuja soluunA2— tämä on ankkurisolu, aivan kuten luvun esimerkissä. - "Kaksi riviä alaspäin" ja "sama sarake" tarkoittaa, että ensimmäinen
Offset-argumentti (rivit) on 2 ja toinen (sarakkeet) on 0 — tuotesarakkeelle. - Total on eri sarakkeessa mutta samalla rivillä — joten vain sarake-offset muuttuu kahden
Offset-kutsun välillä, ei rivin. - Laske sarakkeet A2:n sijainnista: Product on 3 saraketta oikealle Order ID:stä; Total on 7 saraketta oikealle.
2. CurrentRegionin, Offsetin ja Resizen yhdistäminen
CurrentRegionsolussaA1antaa koko taulukon, otsikko mukaan lukien.Offset(1, 0)siirtää koko lohkon yhden rivin alaspäin — näin otsikkorivi jää pois.Resize-toiminnolla rivimäärää pienennetään täsmälleen saman verran kuin siirrettiin, muuten alareuna menee yhden rivin yli todellisen datan.
3. Nimetyn alueen luominen ja testaaminen
- Nimetyt alueet lisätään
ThisWorkbook.Names.Add-komennolla, jossa annetaanName:=jaRefersTo:=— voit käyttää samaa aluekaavaa kuin vihjeessä 2, eikä tarvitse rakentaa sitä uudelleen. - Viitataksesi siihen myöhemmin, käytä
Range("OrdersData")— nimi on tavallinen merkkijono, ei muuttuja.
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
Suorita Sub (F5), ja kirjoita sitten Välitön-ikkunaan (Ctrl+G):
?Range("OrdersData").Rows.Count
Kiitos palautteestasi!
Kysy tekoälyä
Kysy tekoälyä
Kysy mitä tahansa tai kokeile jotakin ehdotetuista kysymyksistä aloittaaksesi keskustelumme