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
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
- Skriv en
Sub, der læser kunde og total for ordre ORD1003 ind i to variabler og viser dem i enMsgBox. - Ændr ORD1002's Status til "Shipped" ved at bruge Cells(række, kolonne) i stedet for Range.
- Anvend
NumberFormat = "$#,##0.00"på kolonnerne Unit Price og Total, og "0%" på kolonnen Discount %.
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.Valueind i den tilsvarende variabel. - Sammenkæd begge variabler til én besked med
&før de sendes tilMsgBox— 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
NumberFormatsættes på samme måde for et område som for en enkelt celle — du skal bare anvende det påF2:F6,H2:H6ogG2: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.
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
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