Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lære Reading and Writing Cell Values | Arbejde med Excel-data
Excel VBA til Forretningsautomatisering

Reading and Writing Cell Values

Stryg for at vise menuen

Det mest grundlæggende, VBA gør, er at læse 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) gør det samme med tal i stedet for bogstaver — særligt nyttigt, når du begynder at loope, fordi en løbevariabel er et tal, ikke et bogstav:

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 ud til at kunne bruges om hinanden, men det kan de 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

Brug .Value, når du kun ønsker tallet. Brug .Formula, når du indsætter en formel i en celle — for eksempel ved programmatisk opbygning af Total-kolonnen i stedet for at skrive den én gang og kopiere den:

ws.Range("H2").Formula = "=E2*F2*(1-G2)"

NumberFormat

Styrer, hvordan en værdi vises uden at ændre det underliggende tal:

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 vigtigere, end det lyder — en celle kan indeholde 0,1 og samtidig vise "10%", og kun NumberFormat styrer den visuelle del.

Opgave

  1. Skriv en Sub, der læser kunde og total for ordre ORD1003 ind i to variabler og viser dem i en MsgBox.
  2. Ændr ORD1002's Status til "Shipped" ved at bruge Cells(række, kolonne) i stedet for Range.
  3. Anvend NumberFormat = "$#,##0.00" på kolonnerne Unit Price og Total, og "0%" på kolonnen Discount %.
Tip
expand arrow

1. Læsning af kunde og total for ORD1003

  • Find først ud af, hvilken række ORD1003 er placeret i — tæl ned i tabellen fra dataene i kapitel 3: ORD1001 er række 2, så ORD1003 er to rækker længere nede.
  • Kunde og Total er to forskellige kolonner — tæl hen over header-rækken (Order ID, Order Date, Customer, Product, Qty, Unit Price, Discount %, Total, Status) for at finde bogstavet for hver.
  • Deklarér én variabel til kundenavnet (String) og én til total (Double), referér eksplicit til arket som vist i kapitel 3 (ThisWorkbook.Worksheets("Orders")), og læs cellens .Value ind i den tilsvarende variabel.
  • Sammenkæd begge variabler til én besked med & før de sendes til MsgBox — dette mønster blev brugt i kapitel 2.

2. Ændring af ORD1002's Status med Cells(row, column)

  • Cells(row, column) tager tal, ikke bogstaver — du ved allerede, hvilken række ORD1002 er i fra tabellen; for kolonnen tæller du bare positionen i stedet for at skrive et bogstav (Status er den sidste af de ni kolonner).
  • Dette er en direkte tildeling: .Cells(row, column).Value = "Shipped", der er ikke behov for at læse noget først.

3. Anvendelse af NumberFormat på tre kolonner

  • NumberFormat sættes på samme måde for et område som for en enkelt celle — du skal bare anvende det på F2:F6, H2:H6 og G2:G6 (dobbelttjek hvilket bogstav der tilhører Unit Price, Total og Discount % før du skriver dem).
  • Hver kolonne får sin egen linje, da Unit Price/Total skal have valutaformat og Discount % skal have procentformat — prøv ikke at anvende begge formater på én linje.
  • Referér til området gennem den samme ws-variabel, du allerede har oprettet, så alle tre linjer bliver korte og ensartede.
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
Var alt klart?

Hvordan kan vi forbedre det?

Tak for dine kommentarer!

Sektion 3. Kapitel 1

Spørg AI

expand

Spørg AI

ChatGPT

Spørg om hvad som helst eller prøv et af de foreslåede spørgsmål for at starte vores chat

Sektion 3. Kapitel 1
some-alt