Celwaarden Lezen en Schrijven
Veeg om het menu te tonen
Het meest basale wat VBA doet, is het lezen en schrijven van de waarde van een cel:
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) doet hetzelfde, maar dan met getallen in plaats van letters — bijzonder handig wanneer je gaat loopen, omdat een lusvariabele een getal is en geen letter:
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
Deze lijken uitwisselbaar, maar dat zijn ze niet:
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
Gebruik .Value wanneer alleen het getal nodig is. Gebruik .Formula wanneer een formule in een cel wordt geschreven — bijvoorbeeld bij het programmatisch opbouwen van de kolom Total in plaats van deze één keer te typen en te kopiëren:
ws.Range("H2").Formula = "=E2*F2*(1-G2)"
NumberFormat
Bepaalt hoe een waarde wordt weergegeven zonder het onderliggende getal te wijzigen:
ws.Range("F2:F6").NumberFormat = "$#,##0.00" ' currency
ws.Range("G2:G6").NumberFormat = "0%" ' percentage
ws.Range("B2:B6").NumberFormat = "dd/mm/yyyy" ' date
Dit is belangrijker dan het lijkt — een cel kan 0,1 bevatten en tegelijkertijd "10%" weergeven, en alleen NumberFormat bepaalt het tweede deel.
Taak
- Schrijf een
Subdie de klant en het totaalbedrag van Order ORD1003 in twee variabelen leest en deze weergeeft in eenMsgBox. - Wijzig de status van ORD1002 naar "Shipped" met behulp van Cells(rij, kolom) in plaats van Range.
- Pas
NumberFormat = "$#,##0.00"toe op de kolommen Unit Price en Total, en "0%" op de kolom Discount %.
1. Lezen van klant en totaalbedrag van ORD1003
- Bepaal eerst in welke rij ORD1003 staat — tel omlaag in de tabel vanaf de gegevens aan het begin van hoofdstuk 3: ORD1001 staat in rij 2, dus ORD1003 staat twee rijen verder.
- Klant en Totaal zijn twee verschillende kolommen — tel over de koprij (Order ID, Order Date, Customer, Product, Qty, Unit Price, Discount %, Total, Status) om de juiste letter voor elk te vinden.
- Declareer één variabele voor de klantnaam (
String) en één voor het totaalbedrag (Double), verwijs expliciet naar het werkblad zoals uitgelegd in hoofdstuk 3 (ThisWorkbook.Worksheets("Orders")), en lees de.Valuevan elke cel in de bijbehorende variabele. - Voeg beide variabelen samen tot één bericht met
&voordat je ze doorgeeft aanMsgBox— dit patroon heb je precies zo toegepast in hoofdstuk 2.
2. Wijzigen van de status van ORD1002 met Cells(rij, kolom)
Cells(row, column)gebruikt gewone getallen, geen letters — je weet al in welke rij ORD1002 staat vanuit de tabel; voor de kolom tel je gewoon de positie in plaats van een letter te typen (Status is de laatste van de negen kolommen).- Dit is een directe toewijzing:
.Cells(row, column).Value = "Shipped", je hoeft niets eerst uit te lezen.
3. Toepassen van NumberFormat op drie kolommen
NumberFormatwordt op dezelfde manier ingesteld voor een bereik als voor een enkele cel — je past het toe opF2:F6,H2:H6enG2:G6(controleer goed welke letter hoort bij Unit Price, Total en Discount % voordat je ze typt).- Elke kolom krijgt een eigen regel, omdat Unit Price/Total valutaopmaak nodig hebben en Discount % procentopmaak — probeer niet beide opmaken in één regel toe te passen.
- Door het bereik via dezelfde
wsvariabele te benaderen die je al hebt ingesteld, blijven alle drie de regels kort en consistent.
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
Bedankt voor je feedback!
Vraag AI
Vraag AI
Vraag wat u wilt of probeer een van de voorgestelde vragen om onze chat te starten.
Celwaarden Lezen en Schrijven
Het meest basale wat VBA doet, is het lezen en schrijven van de waarde van een cel:
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) doet hetzelfde, maar dan met getallen in plaats van letters — bijzonder handig wanneer je gaat loopen, omdat een lusvariabele een getal is en geen letter:
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
Deze lijken uitwisselbaar, maar dat zijn ze niet:
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
Gebruik .Value wanneer alleen het getal nodig is. Gebruik .Formula wanneer een formule in een cel wordt geschreven — bijvoorbeeld bij het programmatisch opbouwen van de kolom Total in plaats van deze één keer te typen en te kopiëren:
ws.Range("H2").Formula = "=E2*F2*(1-G2)"
NumberFormat
Bepaalt hoe een waarde wordt weergegeven zonder het onderliggende getal te wijzigen:
ws.Range("F2:F6").NumberFormat = "$#,##0.00" ' currency
ws.Range("G2:G6").NumberFormat = "0%" ' percentage
ws.Range("B2:B6").NumberFormat = "dd/mm/yyyy" ' date
Dit is belangrijker dan het lijkt — een cel kan 0,1 bevatten en tegelijkertijd "10%" weergeven, en alleen NumberFormat bepaalt het tweede deel.
Taak
- Schrijf een
Subdie de klant en het totaalbedrag van Order ORD1003 in twee variabelen leest en deze weergeeft in eenMsgBox. - Wijzig de status van ORD1002 naar "Shipped" met behulp van Cells(rij, kolom) in plaats van Range.
- Pas
NumberFormat = "$#,##0.00"toe op de kolommen Unit Price en Total, en "0%" op de kolom Discount %.
1. Lezen van klant en totaalbedrag van ORD1003
- Bepaal eerst in welke rij ORD1003 staat — tel omlaag in de tabel vanaf de gegevens aan het begin van hoofdstuk 3: ORD1001 staat in rij 2, dus ORD1003 staat twee rijen verder.
- Klant en Totaal zijn twee verschillende kolommen — tel over de koprij (Order ID, Order Date, Customer, Product, Qty, Unit Price, Discount %, Total, Status) om de juiste letter voor elk te vinden.
- Declareer één variabele voor de klantnaam (
String) en één voor het totaalbedrag (Double), verwijs expliciet naar het werkblad zoals uitgelegd in hoofdstuk 3 (ThisWorkbook.Worksheets("Orders")), en lees de.Valuevan elke cel in de bijbehorende variabele. - Voeg beide variabelen samen tot één bericht met
&voordat je ze doorgeeft aanMsgBox— dit patroon heb je precies zo toegepast in hoofdstuk 2.
2. Wijzigen van de status van ORD1002 met Cells(rij, kolom)
Cells(row, column)gebruikt gewone getallen, geen letters — je weet al in welke rij ORD1002 staat vanuit de tabel; voor de kolom tel je gewoon de positie in plaats van een letter te typen (Status is de laatste van de negen kolommen).- Dit is een directe toewijzing:
.Cells(row, column).Value = "Shipped", je hoeft niets eerst uit te lezen.
3. Toepassen van NumberFormat op drie kolommen
NumberFormatwordt op dezelfde manier ingesteld voor een bereik als voor een enkele cel — je past het toe opF2:F6,H2:H6enG2:G6(controleer goed welke letter hoort bij Unit Price, Total en Discount % voordat je ze typt).- Elke kolom krijgt een eigen regel, omdat Unit Price/Total valutaopmaak nodig hebben en Discount % procentopmaak — probeer niet beide opmaken in één regel toe te passen.
- Door het bereik via dezelfde
wsvariabele te benaderen die je al hebt ingesteld, blijven alle drie de regels kort en consistent.
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
Bedankt voor je feedback!