Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lære Lesing og skriving av celleverdier | Arbeide med Excel-data
Excel VBA for Forretningsautomatisering

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
Figur.3.1

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

  1. Skriv en Sub som leser kunde og total for ordre ORD1003 inn i to variabler og viser dem i en MsgBox.
  2. Endre status for ORD1002 til "Shipped" ved å bruke Cells(rad, kolonne) i stedet for Range.
  3. Bruk NumberFormat = "$#,##0.00" på kolonnene Unit Price og Total, og "0%" på kolonnen Discount %.
Tips
expand arrow

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 .Value inn i riktig variabel.
  • Slå sammen begge variablene til én melding med & før du sender dem til MsgBox — 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

  • NumberFormat settes på samme måte for et område som for én celle — du bruker det bare på F2:F6, H2:H6 og G2: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.
Løsning
expand arrow
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
Alt var klart?

Hvordan kan vi forbedre det?

Takk for tilbakemeldingene dine!

Seksjon 3. Kapittel 1

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

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
Figur.3.1

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

  1. Skriv en Sub som leser kunde og total for ordre ORD1003 inn i to variabler og viser dem i en MsgBox.
  2. Endre status for ORD1002 til "Shipped" ved å bruke Cells(rad, kolonne) i stedet for Range.
  3. Bruk NumberFormat = "$#,##0.00" på kolonnene Unit Price og Total, og "0%" på kolonnen Discount %.
Tips
expand arrow

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 .Value inn i riktig variabel.
  • Slå sammen begge variablene til én melding med & før du sender dem til MsgBox — 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

  • NumberFormat settes på samme måte for et område som for én celle — du bruker det bare på F2:F6, H2:H6 og G2: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.
Løsning
expand arrow
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
Alt var klart?

Hvordan kan vi forbedre det?

Takk for tilbakemeldingene dine!

Seksjon 3. Kapittel 1
some-alt