Läsa och skriva cellvärden
Svep för att visa menyn
Det mest grundläggande som VBA gör är att läsa och skriva ett cells 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 samma sak med siffror istället för bokstäver — mycket användbart när du börjar loopa, eftersom en loopvariabel är ett tal, inte 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
Dessa ser ut att vara utbytbara men är det inte:
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
Använd .Value när du bara vill ha talet. Använd .Formula när du skriver in en formel i en cell — till exempel för att bygga Total-kolumnen programmatiskt istället för att skriva den en gång och kopiera:
ws.Range("H2").Formula = "=E2*F2*(1-G2)"
NumberFormat
Styr hur ett värde visas utan att ändra det underliggande talet:
ws.Range("F2:F6").NumberFormat = "$#,##0.00" ' currency
ws.Range("G2:G6").NumberFormat = "0%" ' percentage
ws.Range("B2:B6").NumberFormat = "dd/mm/yyyy" ' date
Detta är viktigare än det låter — en cell kan innehålla 0.1 och visa "10%" samtidigt, och endast NumberFormat styr den andra delen.
Uppgift
- Skriv en
Subsom läser in Order ORD1003:s Customer och Total till två variabler och visar dem i enMsgBox. - Ändra ORD1002:s Status till "Shipped" med hjälp av Cells(row, column) istället för Range.
- Använd
NumberFormat = "$#,##0.00"på kolumnerna Unit Price och Total, samt "0%" på kolumnen Discount %.
1. Läsa ORD1003:s Customer och Total
- Börja med att ta reda på vilken rad ORD1003 finns på — räkna ner i tabellen från kapitel 3:s inledande data: ORD1001 är rad 2, så ORD1003 är två rader längre ner.
- Customer och Total är två olika kolumner — räkna över rubrikraden (Order ID, Order Date, Customer, Product, Qty, Unit Price, Discount %, Total, Status) för att hitta respektive kolumnbokstav.
- Deklarera en variabel för kundnamnet (
String) och en för totalen (Double), referera till bladet explicit på det sätt som kapitel 3 visade (ThisWorkbook.Worksheets("Orders")), och läs in varje cells.Valuetill motsvarande variabel. - Slå ihop båda variablerna till ett meddelande med
&innan du skickar dem tillMsgBox— du använde samma mönster i kapitel 2.
2. Ändra ORD1002:s Status med Cells(row, column)
Cells(row, column)använder siffror, inte bokstäver — du vet redan vilken rad ORD1002 finns på från tabellen; för kolumnen räknar du positionen istället för att skriva en bokstav (Status är den sista av de nio kolumnerna).- Detta är en direkt tilldelning:
.Cells(row, column).Value = "Shipped", du behöver inte läsa något först.
3. Använda NumberFormat på tre kolumner
NumberFormatställs in på samma sätt för ett område som för en enskild cell — du använder det påF2:F6,H2:H6ochG2:G6(dubbelkolla vilken bokstav som hör till Unit Price, Total och Discount % innan du skriver dem).- Varje kolumn får sin egen rad, eftersom Unit Price/Total ska ha valutaformat och Discount % procentformat — försök inte använda båda formaten på samma rad.
- Att referera till området via samma
ws-variabel som du redan har satt gör alla tre rader korta och konsekventa.
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
Tack för dina kommentarer!
Fråga AI
Fråga AI
Fråga vad du vill eller prova någon av de föreslagna frågorna för att starta vårt samtal
Läsa och skriva cellvärden
Det mest grundläggande som VBA gör är att läsa och skriva ett cells 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 samma sak med siffror istället för bokstäver — mycket användbart när du börjar loopa, eftersom en loopvariabel är ett tal, inte 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
Dessa ser ut att vara utbytbara men är det inte:
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
Använd .Value när du bara vill ha talet. Använd .Formula när du skriver in en formel i en cell — till exempel för att bygga Total-kolumnen programmatiskt istället för att skriva den en gång och kopiera:
ws.Range("H2").Formula = "=E2*F2*(1-G2)"
NumberFormat
Styr hur ett värde visas utan att ändra det underliggande talet:
ws.Range("F2:F6").NumberFormat = "$#,##0.00" ' currency
ws.Range("G2:G6").NumberFormat = "0%" ' percentage
ws.Range("B2:B6").NumberFormat = "dd/mm/yyyy" ' date
Detta är viktigare än det låter — en cell kan innehålla 0.1 och visa "10%" samtidigt, och endast NumberFormat styr den andra delen.
Uppgift
- Skriv en
Subsom läser in Order ORD1003:s Customer och Total till två variabler och visar dem i enMsgBox. - Ändra ORD1002:s Status till "Shipped" med hjälp av Cells(row, column) istället för Range.
- Använd
NumberFormat = "$#,##0.00"på kolumnerna Unit Price och Total, samt "0%" på kolumnen Discount %.
1. Läsa ORD1003:s Customer och Total
- Börja med att ta reda på vilken rad ORD1003 finns på — räkna ner i tabellen från kapitel 3:s inledande data: ORD1001 är rad 2, så ORD1003 är två rader längre ner.
- Customer och Total är två olika kolumner — räkna över rubrikraden (Order ID, Order Date, Customer, Product, Qty, Unit Price, Discount %, Total, Status) för att hitta respektive kolumnbokstav.
- Deklarera en variabel för kundnamnet (
String) och en för totalen (Double), referera till bladet explicit på det sätt som kapitel 3 visade (ThisWorkbook.Worksheets("Orders")), och läs in varje cells.Valuetill motsvarande variabel. - Slå ihop båda variablerna till ett meddelande med
&innan du skickar dem tillMsgBox— du använde samma mönster i kapitel 2.
2. Ändra ORD1002:s Status med Cells(row, column)
Cells(row, column)använder siffror, inte bokstäver — du vet redan vilken rad ORD1002 finns på från tabellen; för kolumnen räknar du positionen istället för att skriva en bokstav (Status är den sista av de nio kolumnerna).- Detta är en direkt tilldelning:
.Cells(row, column).Value = "Shipped", du behöver inte läsa något först.
3. Använda NumberFormat på tre kolumner
NumberFormatställs in på samma sätt för ett område som för en enskild cell — du använder det påF2:F6,H2:H6ochG2:G6(dubbelkolla vilken bokstav som hör till Unit Price, Total och Discount % innan du skriver dem).- Varje kolumn får sin egen rad, eftersom Unit Price/Total ska ha valutaformat och Discount % procentformat — försök inte använda båda formaten på samma rad.
- Att referera till området via samma
ws-variabel som du redan har satt gör alla tre rader korta och konsekventa.
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
Tack för dina kommentarer!