Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lernen Lesen und Schreiben von Zellwerten | Arbeiten mit Excel-Daten
Excel VBA für Geschäftsautomatisierung

Lesen und Schreiben von Zellwerten

Swipe um das Menü anzuzeigen

Das grundlegendste, was VBA tut, ist das Lesen und Schreiben des Zellwerts:

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) macht dasselbe, verwendet jedoch Zahlen anstelle von Buchstaben — besonders nützlich beim Durchlaufen von Schleifen, da eine Schleifenvariable eine Zahl und kein Buchstabe ist:

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

Diese sehen austauschbar aus, sind es aber nicht:

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

Verwendung von .Value, wenn nur die Zahl benötigt wird. Verwendung von .Formula, wenn eine Formel in eine Zelle geschrieben werden soll – zum Beispiel, um die Spalte Total programmatisch zu erstellen, anstatt sie einmal einzugeben und dann zu kopieren:

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

NumberFormat

Steuert die Anzeige eines Wertes, ohne die zugrunde liegende Zahl zu verändern:

ws.Range("F2:F6").NumberFormat = "$#,##0.00"     ' currency
ws.Range("G2:G6").NumberFormat = "0%"              ' percentage
ws.Range("B2:B6").NumberFormat = "dd/mm/yyyy"      ' date

Dies ist wichtiger, als es scheint – eine Zelle kann 0,1 enthalten und gleichzeitig "10%" anzeigen, und nur NumberFormat steuert den zweiten Teil.

Aufgabe

  1. Schreiben eines Sub, das den Kunden und den Gesamtbetrag der Bestellung ORD1003 in zwei Variablen einliest und diese in einer MsgBox anzeigt.
  2. Ändern des Status von ORD1002 auf "Shipped" unter Verwendung von Cells(row, column) anstelle von Range.
  3. Anwenden von NumberFormat = "$#,##0.00" auf die Spalten Unit Price und Total sowie "0%" auf die Spalte Discount %.
Hinweis
expand arrow

1. Einlesen von Kunde und Gesamtbetrag für ORD1003

  • Zuerst ermitteln, in welcher Zeile ORD1003 steht — zähle in der Tabelle aus den Anfangsdaten von Kapitel 3 nach unten: ORD1001 ist in Zeile 2, also ist ORD1003 zwei Zeilen weiter unten.
  • Kunde und Gesamtbetrag befinden sich in unterschiedlichen Spalten — zähle über die Kopfzeile (Order ID, Order Date, Customer, Product, Qty, Unit Price, Discount %, Total, Status), um den jeweiligen Buchstaben zu finden.
  • Eine Variable für den Kundennamen (String) und eine für den Gesamtbetrag (Double) deklarieren, das Arbeitsblatt explizit referenzieren wie in Kapitel 3 (ThisWorkbook.Worksheets("Orders")), und die .Value jeder Zelle in die entsprechende Variable einlesen.
  • Beide Variablen mit & zu einer Nachricht verketten, bevor sie an MsgBox übergeben werden — dieses Muster wurde bereits in Kapitel 2 verwendet.

2. Ändern des Status von ORD1002 mit Cells(row, column)

  • Cells(row, column) verwendet Zahlen, keine Buchstaben — die Zeile von ORD1002 ist bereits aus der Tabelle bekannt; für die Spalte einfach die Position zählen, anstatt einen Buchstaben zu verwenden (Status ist die letzte der neun Spalten).
  • Dies ist eine direkte Zuweisung: .Cells(row, column).Value = "Shipped", es muss vorher nichts eingelesen werden.

3. Anwenden von NumberFormat auf drei Spalten

  • NumberFormat wird für einen Bereich genauso gesetzt wie für eine einzelne Zelle — es wird auf F2:F6, H2:H6 und G2:G6 angewendet (vor dem Tippen prüfen, welcher Buchstabe zu Unit Price, Total und Discount % gehört).
  • Jede Spalte erhält eine eigene Zeile, da Unit Price/Total eine Währungsformatierung und Discount % eine Prozentformatierung benötigen — beide Formate nicht in einer Zeile anwenden.
  • Die Referenzierung des Bereichs über die bereits gesetzte Variable ws hält alle drei Zeilen kurz und einheitlich.
Lösung
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
War alles klar?

Wie können wir es verbessern?

Danke für Ihr Feedback!

Abschnitt 3. Kapitel 1

Fragen Sie AI

expand

Fragen Sie AI

ChatGPT

Fragen Sie alles oder probieren Sie eine der vorgeschlagenen Fragen, um unser Gespräch zu beginnen

Lesen und Schreiben von Zellwerten

Das grundlegendste, was VBA tut, ist das Lesen und Schreiben des Zellwerts:

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) macht dasselbe, verwendet jedoch Zahlen anstelle von Buchstaben — besonders nützlich beim Durchlaufen von Schleifen, da eine Schleifenvariable eine Zahl und kein Buchstabe ist:

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

Diese sehen austauschbar aus, sind es aber nicht:

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

Verwendung von .Value, wenn nur die Zahl benötigt wird. Verwendung von .Formula, wenn eine Formel in eine Zelle geschrieben werden soll – zum Beispiel, um die Spalte Total programmatisch zu erstellen, anstatt sie einmal einzugeben und dann zu kopieren:

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

NumberFormat

Steuert die Anzeige eines Wertes, ohne die zugrunde liegende Zahl zu verändern:

ws.Range("F2:F6").NumberFormat = "$#,##0.00"     ' currency
ws.Range("G2:G6").NumberFormat = "0%"              ' percentage
ws.Range("B2:B6").NumberFormat = "dd/mm/yyyy"      ' date

Dies ist wichtiger, als es scheint – eine Zelle kann 0,1 enthalten und gleichzeitig "10%" anzeigen, und nur NumberFormat steuert den zweiten Teil.

Aufgabe

  1. Schreiben eines Sub, das den Kunden und den Gesamtbetrag der Bestellung ORD1003 in zwei Variablen einliest und diese in einer MsgBox anzeigt.
  2. Ändern des Status von ORD1002 auf "Shipped" unter Verwendung von Cells(row, column) anstelle von Range.
  3. Anwenden von NumberFormat = "$#,##0.00" auf die Spalten Unit Price und Total sowie "0%" auf die Spalte Discount %.
Hinweis
expand arrow

1. Einlesen von Kunde und Gesamtbetrag für ORD1003

  • Zuerst ermitteln, in welcher Zeile ORD1003 steht — zähle in der Tabelle aus den Anfangsdaten von Kapitel 3 nach unten: ORD1001 ist in Zeile 2, also ist ORD1003 zwei Zeilen weiter unten.
  • Kunde und Gesamtbetrag befinden sich in unterschiedlichen Spalten — zähle über die Kopfzeile (Order ID, Order Date, Customer, Product, Qty, Unit Price, Discount %, Total, Status), um den jeweiligen Buchstaben zu finden.
  • Eine Variable für den Kundennamen (String) und eine für den Gesamtbetrag (Double) deklarieren, das Arbeitsblatt explizit referenzieren wie in Kapitel 3 (ThisWorkbook.Worksheets("Orders")), und die .Value jeder Zelle in die entsprechende Variable einlesen.
  • Beide Variablen mit & zu einer Nachricht verketten, bevor sie an MsgBox übergeben werden — dieses Muster wurde bereits in Kapitel 2 verwendet.

2. Ändern des Status von ORD1002 mit Cells(row, column)

  • Cells(row, column) verwendet Zahlen, keine Buchstaben — die Zeile von ORD1002 ist bereits aus der Tabelle bekannt; für die Spalte einfach die Position zählen, anstatt einen Buchstaben zu verwenden (Status ist die letzte der neun Spalten).
  • Dies ist eine direkte Zuweisung: .Cells(row, column).Value = "Shipped", es muss vorher nichts eingelesen werden.

3. Anwenden von NumberFormat auf drei Spalten

  • NumberFormat wird für einen Bereich genauso gesetzt wie für eine einzelne Zelle — es wird auf F2:F6, H2:H6 und G2:G6 angewendet (vor dem Tippen prüfen, welcher Buchstabe zu Unit Price, Total und Discount % gehört).
  • Jede Spalte erhält eine eigene Zeile, da Unit Price/Total eine Währungsformatierung und Discount % eine Prozentformatierung benötigen — beide Formate nicht in einer Zeile anwenden.
  • Die Referenzierung des Bereichs über die bereits gesetzte Variable ws hält alle drei Zeilen kurz und einheitlich.
Lösung
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
War alles klar?

Wie können wir es verbessern?

Danke für Ihr Feedback!

Abschnitt 3. Kapitel 1
some-alt