Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Leer Celwaarden Lezen en Schrijven | Werken met Excel-gegevens
Excel VBA voor Bedrijfsautomatisering

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

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

  1. Schrijf een Sub die de klant en het totaalbedrag van Order ORD1003 in twee variabelen leest en deze weergeeft in een MsgBox.
  2. Wijzig de status van ORD1002 naar "Shipped" met behulp van Cells(rij, kolom) in plaats van Range.
  3. Pas NumberFormat = "$#,##0.00" toe op de kolommen Unit Price en Total, en "0%" op de kolom Discount %.
Hint
expand arrow

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 .Value van elke cel in de bijbehorende variabele.
  • Voeg beide variabelen samen tot één bericht met & voordat je ze doorgeeft aan MsgBox — 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

  • NumberFormat wordt op dezelfde manier ingesteld voor een bereik als voor een enkele cel — je past het toe op F2:F6, H2:H6 en G2: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 ws variabele te benaderen die je al hebt ingesteld, blijven alle drie de regels kort en consistent.
Oplossing
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
Was alles duidelijk?

Hoe kunnen we het verbeteren?

Bedankt voor je feedback!

Sectie 3. Hoofdstuk 1

Vraag AI

expand

Vraag AI

ChatGPT

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

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

  1. Schrijf een Sub die de klant en het totaalbedrag van Order ORD1003 in twee variabelen leest en deze weergeeft in een MsgBox.
  2. Wijzig de status van ORD1002 naar "Shipped" met behulp van Cells(rij, kolom) in plaats van Range.
  3. Pas NumberFormat = "$#,##0.00" toe op de kolommen Unit Price en Total, en "0%" op de kolom Discount %.
Hint
expand arrow

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 .Value van elke cel in de bijbehorende variabele.
  • Voeg beide variabelen samen tot één bericht met & voordat je ze doorgeeft aan MsgBox — 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

  • NumberFormat wordt op dezelfde manier ingesteld voor een bereik als voor een enkele cel — je past het toe op F2:F6, H2:H6 en G2: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 ws variabele te benaderen die je al hebt ingesteld, blijven alle drie de regels kort en consistent.
Oplossing
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
Was alles duidelijk?

Hoe kunnen we het verbeteren?

Bedankt voor je feedback!

Sectie 3. Hoofdstuk 1
some-alt