Lesing og skriving av celleverdier
Sveip for å vise menyen
Det mest grunnleggende VBA gjør er å lese og skrive en celles Value:
Dim ws As Worksheet
Set ws = ThisWorkbook.Worksheets("Orders")
Debug.Print ws.Range("C2").Value ' Acme Corp
ws.Range("I2").Value = "Shipped" ' overwrite the Status cell
Cells(row, column) gjør det samme med tall i stedet for bokstaver — svært nyttig når du begynner å bruke løkker, fordi en løkkevariabel er et tall, ikke en bokstav:
Debug.Print ws.Cells(2, 3).Value ' same as Range("C2") — row 2, column 3
ws.Cells(2, 9).Value = "Shipped" ' same as Range("I2")
Value vs. Formula vs. Formula2
Disse ser ut til å være utskiftbare, men er det ikke:
ws.Range("H2").Value ' returns the calculated result: 202.5
ws.Range("H2").Formula ' returns the formula as typed: =E2*F2*(1-G2)
ws.Range("H2").Formula2 ' like Formula, but supports newer dynamic-array functions
Bruk .Value når du kun ønsker tallet. Bruk .Formula når du skal skrive en formel inn i en celle – for eksempel for å bygge opp Total-kolonnen programmatisk i stedet for å skrive den én gang og kopiere den:
ws.Range("H2").Formula = "=E2*F2*(1-G2)"
NumberFormat
Styrer hvordan en verdi vises uten å endre det underliggende tallet:
ws.Range("F2:F6").NumberFormat = "$#,##0.00" ' currency
ws.Range("G2:G6").NumberFormat = "0%" ' percentage
ws.Range("B2:B6").NumberFormat = "dd/mm/yyyy" ' date
Dette er viktigere enn det høres ut – en celle kan inneholde 0.1 og vise "10%" samtidig, og kun NumberFormat styrer den siste delen.
Oppgave
- Skriv en
Subsom leser kunde og total for ordre ORD1003 inn i to variabler og viser dem i enMsgBox. - Endre status for ORD1002 til "Shipped" ved å bruke Cells(rad, kolonne) i stedet for Range.
- Bruk
NumberFormat = "$#,##0.00"på kolonnene Unit Price og Total, og "0%" på kolonnen Discount %.
1. Lese kunde og total for ORD1003
- Finn først ut hvilken rad ORD1003 står i — tell nedover tabellen fra åpningsdataene i kapittel 3: ORD1001 er rad 2, så ORD1003 er to rader lenger ned.
- Kunde og Total er to forskjellige kolonner — tell bortover overskriftsraden (Order ID, Order Date, Customer, Product, Qty, Unit Price, Discount %, Total, Status) for å finne bokstaven til hver.
- Deklarer én variabel for kundenavnet (
String) og én for totalen (Double), referer til arket eksplisitt slik det ble vist i kapittel 3 (ThisWorkbook.Worksheets("Orders")), og les hver celles.Valueinn i riktig variabel. - Slå sammen begge variablene til én melding med
&før du sender dem tilMsgBox— du brukte akkurat dette mønsteret i kapittel 2.
2. Endre status for ORD1002 med Cells(r, k)
Cells(row, column)bruker vanlige tall, ikke bokstaver — du vet allerede hvilken rad ORD1002 er i fra tabellen; for kolonnen teller du bare posisjonen i stedet for å skrive en bokstav (Status er den siste av de ni kolonnene).- Dette er en direkte tildeling:
.Cells(row, column).Value = "Shipped", du trenger ikke lese noe først.
3. Bruke NumberFormat på tre kolonner
NumberFormatsettes på samme måte for et område som for én celle — du bruker det bare påF2:F6,H2:H6ogG2:G6(dobbeltsjekk hvilken bokstav som tilhører Unit Price, Total og Discount % før du skriver dem).- Hver kolonne får sin egen linje, siden Unit Price/Total skal ha valutaformat og Discount % skal ha prosentformat — ikke prøv å bruke begge formater på én linje.
- Referer til området gjennom den samme
ws-variabelen du allerede har satt, så blir alle tre linjene korte og konsistente.
Sub ExploreOrdersData()
Dim ws As Worksheet
Set ws = ThisWorkbook.Worksheets("Orders")
' --- 1. Read ORD1003's Customer and Total ---
Dim customerName As String
Dim orderTotal As Double
customerName = ws.Range("C4").Value
orderTotal = ws.Range("H4").Value
MsgBox "Customer: " & customerName & " | Total: " & orderTotal
' --- 2. Change ORD1002's Status using Cells(row, column) ---
ws.Cells(3, 9).Value = "Shipped"
' --- 3. Apply NumberFormat to Unit Price, Total, and Discount % ---
ws.Range("F2:F6").NumberFormat = "$#,##0.00" ' Unit Price
ws.Range("H2:H6").NumberFormat = "$#,##0.00" ' Total
ws.Range("G2:G6").NumberFormat = "0%" ' Discount %
End Sub
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
Lesing og skriving av celleverdier
Det mest grunnleggende VBA gjør er å lese og skrive en celles Value:
Dim ws As Worksheet
Set ws = ThisWorkbook.Worksheets("Orders")
Debug.Print ws.Range("C2").Value ' Acme Corp
ws.Range("I2").Value = "Shipped" ' overwrite the Status cell
Cells(row, column) gjør det samme med tall i stedet for bokstaver — svært nyttig når du begynner å bruke løkker, fordi en løkkevariabel er et tall, ikke en bokstav:
Debug.Print ws.Cells(2, 3).Value ' same as Range("C2") — row 2, column 3
ws.Cells(2, 9).Value = "Shipped" ' same as Range("I2")
Value vs. Formula vs. Formula2
Disse ser ut til å være utskiftbare, men er det ikke:
ws.Range("H2").Value ' returns the calculated result: 202.5
ws.Range("H2").Formula ' returns the formula as typed: =E2*F2*(1-G2)
ws.Range("H2").Formula2 ' like Formula, but supports newer dynamic-array functions
Bruk .Value når du kun ønsker tallet. Bruk .Formula når du skal skrive en formel inn i en celle – for eksempel for å bygge opp Total-kolonnen programmatisk i stedet for å skrive den én gang og kopiere den:
ws.Range("H2").Formula = "=E2*F2*(1-G2)"
NumberFormat
Styrer hvordan en verdi vises uten å endre det underliggende tallet:
ws.Range("F2:F6").NumberFormat = "$#,##0.00" ' currency
ws.Range("G2:G6").NumberFormat = "0%" ' percentage
ws.Range("B2:B6").NumberFormat = "dd/mm/yyyy" ' date
Dette er viktigere enn det høres ut – en celle kan inneholde 0.1 og vise "10%" samtidig, og kun NumberFormat styrer den siste delen.
Oppgave
- Skriv en
Subsom leser kunde og total for ordre ORD1003 inn i to variabler og viser dem i enMsgBox. - Endre status for ORD1002 til "Shipped" ved å bruke Cells(rad, kolonne) i stedet for Range.
- Bruk
NumberFormat = "$#,##0.00"på kolonnene Unit Price og Total, og "0%" på kolonnen Discount %.
1. Lese kunde og total for ORD1003
- Finn først ut hvilken rad ORD1003 står i — tell nedover tabellen fra åpningsdataene i kapittel 3: ORD1001 er rad 2, så ORD1003 er to rader lenger ned.
- Kunde og Total er to forskjellige kolonner — tell bortover overskriftsraden (Order ID, Order Date, Customer, Product, Qty, Unit Price, Discount %, Total, Status) for å finne bokstaven til hver.
- Deklarer én variabel for kundenavnet (
String) og én for totalen (Double), referer til arket eksplisitt slik det ble vist i kapittel 3 (ThisWorkbook.Worksheets("Orders")), og les hver celles.Valueinn i riktig variabel. - Slå sammen begge variablene til én melding med
&før du sender dem tilMsgBox— du brukte akkurat dette mønsteret i kapittel 2.
2. Endre status for ORD1002 med Cells(r, k)
Cells(row, column)bruker vanlige tall, ikke bokstaver — du vet allerede hvilken rad ORD1002 er i fra tabellen; for kolonnen teller du bare posisjonen i stedet for å skrive en bokstav (Status er den siste av de ni kolonnene).- Dette er en direkte tildeling:
.Cells(row, column).Value = "Shipped", du trenger ikke lese noe først.
3. Bruke NumberFormat på tre kolonner
NumberFormatsettes på samme måte for et område som for én celle — du bruker det bare påF2:F6,H2:H6ogG2:G6(dobbeltsjekk hvilken bokstav som tilhører Unit Price, Total og Discount % før du skriver dem).- Hver kolonne får sin egen linje, siden Unit Price/Total skal ha valutaformat og Discount % skal ha prosentformat — ikke prøv å bruke begge formater på én linje.
- Referer til området gjennom den samme
ws-variabelen du allerede har satt, så blir alle tre linjene korte og konsistente.
Sub ExploreOrdersData()
Dim ws As Worksheet
Set ws = ThisWorkbook.Worksheets("Orders")
' --- 1. Read ORD1003's Customer and Total ---
Dim customerName As String
Dim orderTotal As Double
customerName = ws.Range("C4").Value
orderTotal = ws.Range("H4").Value
MsgBox "Customer: " & customerName & " | Total: " & orderTotal
' --- 2. Change ORD1002's Status using Cells(row, column) ---
ws.Cells(3, 9).Value = "Shipped"
' --- 3. Apply NumberFormat to Unit Price, Total, and Discount % ---
ws.Range("F2:F6").NumberFormat = "$#,##0.00" ' Unit Price
ws.Range("H2:H6").NumberFormat = "$#,##0.00" ' Total
ws.Range("G2:G6").NumberFormat = "0%" ' Discount %
End Sub
Takk for tilbakemeldingene dine!