Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lernen Writing Your First VBA Procedure | Einführung in VBA und das Excel-Objektmodell
Excel VBA für Geschäftsautomatisierung

Writing Your First VBA Procedure

Swipe um das Menü anzuzeigen

Das Aufzeichnen von Makros vermittelt den Wortschatz; das Schreiben eines Makros von Grund auf ist der Einstieg ins Programmierdenken.

Der Aufbau einer Sub-Prozedur

Jeder wiederverwendbare VBA-Codeblock, der eine Aktion ausführt (im Gegensatz zu einer Funktion, die einen Wert zurückgibt), wird als Sub geschrieben:

Sub ProcedureName()
    ' instructions go here
End Sub

Mit dem Cursor irgendwo innerhalb einer Sub drücken Sie F5 (oder klicken Sie auf den grünen Ausführen-Pfeil), um sie auszuführen. Kommentare — jede Zeile, die mit einem Apostroph (') beginnt — werden von VBA vollständig ignoriert; verwenden Sie sie großzügig, um zu erklären, warum der Code etwas tut, nicht nur was er tut, da das Was meist schon aus dem Code ersichtlich ist.

Formatierungsgewohnheiten, die sich sofort auszahlen

  • Geben Sie Option Explicit ganz oben in jedem Modul ein — dies zwingt Sie, jede Variable zu deklarieren, wodurch Tippfehler erkannt werden, bevor sie zu Fehlern werden;
  • Code innerhalb von Schleifen und If-Blöcken um eine Tab-Stufe einrücken — der VBE erzwingt dies nicht, aber nicht eingerückter Code wird schnell unleserlich;
  • Verwenden Sie beschreibende Namen (HighEarnerCount statt x) — Sie werden es sich in drei Wochen danken.

Durchgearbeitetes Beispiel: Hervorheben von Vielverdienern

Wir schreiben von Hand eine Prozedur, die jede Mitarbeiterzeile in der Tabelle durchgeht und alle markiert, die mehr als $55,000 verdienen — etwas, das der Makrorekorder nie könnte, da hierfür eine Entscheidung (eine If-Anweisung) für jede Zeile (eine Schleife) erforderlich ist.

Option Explicit
 
Sub HighlightTopEarners()
    Dim ws As Worksheet
    Dim i As Long
    Dim lastRow As Long
 
    Set ws = ThisWorkbook.Worksheets("Employees")
    lastRow = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row
 
    For i = 2 To lastRow
        If ws.Cells(i, 6).Value > 55000 Then
            ws.Cells(i, 6).Interior.Color = RGB(198, 239, 206)
        End If
    Next i
 
    MsgBox "Done — high earners are highlighted."
End Sub
Zeile für Zeile durchgehen
expand arrow
  • Dim ws As Worksheet / Dim i As Long — diese deklarieren zwei Variablen: ws hält einen Verweis auf das Employees sheet, und i zählt die Zeilen durch;
  • Set ws = ThisWorkbook.Worksheets("Employees") — dies ist die Objektmodell-Gewohnheit: das Blatt explizit benennen, anstatt sich auf das gerade aktive zu verlassen;
  • ws.Cells(ws.Rows.Count, 1).End(xlUp).Row — eine Standardformulierung, die die letzte verwendete Zeile in Spalte A findet, unabhängig davon, wie viele Mitarbeiter in der Tabelle stehen;
  • For i = 2 To lastRow ... Next i — eine Schleife, die den Code für jede Datenzeile einmal wiederholt, beginnend bei Zeile 2, um die Kopfzeile zu überspringen;
  • If ws.Cells(i, 6).Value > 55000 Then — eine Entscheidung: Nur Zeilen, bei denen die Gehaltsspalte (Spalte 6) 55000 übersteigt, werden formatiert;
  • MsgBox — ein einfaches Pop-up zur Bestätigung, dass das Makro abgeschlossen ist.

Geben Sie dieses Verfahren in modIntro ein, platzieren Sie den Cursor darin und drücken Sie F5. Überprüfen Sie die Zahlen selbst — Emma Davis und Olivia Brown sind die beiden Mitarbeitenden, die im Beispieltabelle mehr als $55.000 verdienen.

Aufgabe

  1. Geben Sie HighlightTopEarners exakt wie gezeigt in modIntro ein und führen Sie es aus. Bestätigen Sie, dass zwei Zeilen grün werden.
  2. Duplizieren Sie das Verfahren als HighlightITDepartment und ändern Sie die Bedingung so, dass jede Zeile hervorgehoben wird, in der die Abteilung (Spalte 3) "IT" entspricht, anstatt das Gehalt zu prüfen.
  3. Fügen Sie über jedem Verfahren einen Kommentar hinzu, der in einem Satz erklärt, was es macht — üben Sie, Kommentare für die Lesenden zu schreiben, nicht für sich selbst.
  4. Speichern Sie die Arbeitsmappe erneut (sie ist weiterhin .xlsm, daher reicht ein normales Ctrl+S).
Hinweis
expand arrow
  1. Markieren Sie das gesamte HighlightTopEarners-Verfahren (von Sub bis End Sub), kopieren Sie es und fügen Sie es direkt darunter in modIntro ein.
  2. Benennen Sie die zweite Kopie in der Sub-Zeile zu Sub HighlightITDepartment() um — jedes Verfahren in einem Modul benötigt einen eindeutigen Namen, sonst weiß VBA nicht, welches Sie ausführen möchten.
  3. Die zu ändernde Bedingung ist die If-Zeile. Momentan prüft sie eine Zahl:
If ws.Cells(i, 6).Value > 55000 Then

Sie müssen stattdessen Text prüfen — Spalte 3 (Abteilung) entspricht "IT". Denken Sie daran, dass bei Textvergleichen Anführungszeichen um den Vergleichswert stehen müssen und = statt > verwendet wird. 4. Alles andere innerhalb der Schleife (die Interior.Color-Zeile, die Schleifenstruktur selbst) kann gleich bleiben — nur die geprüfte Bedingung ändert sich.

Kommentare hinzufügen

  1. Eine Kommentarzeile beginnt mit einem Apostroph (') und steht direkt über der Sub-Zeile — nicht innerhalb des Verfahrens.
  2. Schreiben Sie den Kommentar so, als würden Sie das Makro einer Kollegin oder einem Kollegen erklären, die/der es noch nie gesehen hat, nicht als Erinnerung für sich selbst. Vergleichen Sie:
    • Weniger hilfreich: ' durchläuft Zeilen (beschreibt das Wie, was der Code bereits zeigt)
    • Hilfreicher: ' Hebt Mitarbeitende hervor, die mehr als $55.000 verdienen (beschreibt das Ergebnis, was nicht auf den ersten Blick ersichtlich ist)
  3. Machen Sie das Gleiche für das zweite Verfahren — ein Satz, der beschreibt, was es hervorhebt und warum, bezogen auf den geschäftlichen Zweck (IT-Abteilung), nicht auf die Mechanik der Schleife.
Lösung
expand arrow
' Highlights employees earning over $55,000, to flag top earners at a glance.
Sub HighlightTopEarners()
    Dim ws As Worksheet
    Dim i As Long
    Dim lastRow As Long

    Set ws = ThisWorkbook.Worksheets("Employees")
    lastRow = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row

    For i = 2 To lastRow
        If ws.Cells(i, 6).Value > 55000 Then
            ws.Cells(i, 6).Interior.Color = RGB(198, 239, 206)
        End If
    Next i

    MsgBox "Done — high earners are highlighted."
End Sub

' Highlights every employee who works in the IT department.
Sub HighlightITDepartment()
    Dim ws As Worksheet
    Dim i As Long
    Dim lastRow As Long

    Set ws = ThisWorkbook.Worksheets("Employees")
    lastRow = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row

    For i = 2 To lastRow
        If ws.Cells(i, 3).Value = "IT" Then
            ws.Cells(i, 3).Interior.Color = RGB(198, 239, 206)
        End If
    Next i

    MsgBox "Done — IT department is highlighted."
End Sub

Geben Sie beide Verfahren in modIntro ein, führen Sie zuerst HighlightTopEarners aus und bestätigen Sie, dass genau zwei Zeilen grün werden (Emma Davis mit $62.000 und Sophia Miller mit $59.000 — die anderen drei liegen bei oder unter $55.000), führen Sie dann HighlightITDepartment aus und bestätigen Sie, dass stattdessen die Zeile von Sophia Miller hervorgehoben wird. Speichern Sie mit Strg+S, sobald beide funktionieren.

War alles klar?

Wie können wir es verbessern?

Danke für Ihr Feedback!

Abschnitt 1. Kapitel 6

Fragen Sie AI

expand

Fragen Sie AI

ChatGPT

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

Writing Your First VBA Procedure

Das Aufzeichnen von Makros vermittelt den Wortschatz; das Schreiben eines Makros von Grund auf ist der Einstieg ins Programmierdenken.

Der Aufbau einer Sub-Prozedur

Jeder wiederverwendbare VBA-Codeblock, der eine Aktion ausführt (im Gegensatz zu einer Funktion, die einen Wert zurückgibt), wird als Sub geschrieben:

Sub ProcedureName()
    ' instructions go here
End Sub

Mit dem Cursor irgendwo innerhalb einer Sub drücken Sie F5 (oder klicken Sie auf den grünen Ausführen-Pfeil), um sie auszuführen. Kommentare — jede Zeile, die mit einem Apostroph (') beginnt — werden von VBA vollständig ignoriert; verwenden Sie sie großzügig, um zu erklären, warum der Code etwas tut, nicht nur was er tut, da das Was meist schon aus dem Code ersichtlich ist.

Formatierungsgewohnheiten, die sich sofort auszahlen

  • Geben Sie Option Explicit ganz oben in jedem Modul ein — dies zwingt Sie, jede Variable zu deklarieren, wodurch Tippfehler erkannt werden, bevor sie zu Fehlern werden;
  • Code innerhalb von Schleifen und If-Blöcken um eine Tab-Stufe einrücken — der VBE erzwingt dies nicht, aber nicht eingerückter Code wird schnell unleserlich;
  • Verwenden Sie beschreibende Namen (HighEarnerCount statt x) — Sie werden es sich in drei Wochen danken.

Durchgearbeitetes Beispiel: Hervorheben von Vielverdienern

Wir schreiben von Hand eine Prozedur, die jede Mitarbeiterzeile in der Tabelle durchgeht und alle markiert, die mehr als $55,000 verdienen — etwas, das der Makrorekorder nie könnte, da hierfür eine Entscheidung (eine If-Anweisung) für jede Zeile (eine Schleife) erforderlich ist.

Option Explicit
 
Sub HighlightTopEarners()
    Dim ws As Worksheet
    Dim i As Long
    Dim lastRow As Long
 
    Set ws = ThisWorkbook.Worksheets("Employees")
    lastRow = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row
 
    For i = 2 To lastRow
        If ws.Cells(i, 6).Value > 55000 Then
            ws.Cells(i, 6).Interior.Color = RGB(198, 239, 206)
        End If
    Next i
 
    MsgBox "Done — high earners are highlighted."
End Sub
Zeile für Zeile durchgehen
expand arrow
  • Dim ws As Worksheet / Dim i As Long — diese deklarieren zwei Variablen: ws hält einen Verweis auf das Employees sheet, und i zählt die Zeilen durch;
  • Set ws = ThisWorkbook.Worksheets("Employees") — dies ist die Objektmodell-Gewohnheit: das Blatt explizit benennen, anstatt sich auf das gerade aktive zu verlassen;
  • ws.Cells(ws.Rows.Count, 1).End(xlUp).Row — eine Standardformulierung, die die letzte verwendete Zeile in Spalte A findet, unabhängig davon, wie viele Mitarbeiter in der Tabelle stehen;
  • For i = 2 To lastRow ... Next i — eine Schleife, die den Code für jede Datenzeile einmal wiederholt, beginnend bei Zeile 2, um die Kopfzeile zu überspringen;
  • If ws.Cells(i, 6).Value > 55000 Then — eine Entscheidung: Nur Zeilen, bei denen die Gehaltsspalte (Spalte 6) 55000 übersteigt, werden formatiert;
  • MsgBox — ein einfaches Pop-up zur Bestätigung, dass das Makro abgeschlossen ist.

Geben Sie dieses Verfahren in modIntro ein, platzieren Sie den Cursor darin und drücken Sie F5. Überprüfen Sie die Zahlen selbst — Emma Davis und Olivia Brown sind die beiden Mitarbeitenden, die im Beispieltabelle mehr als $55.000 verdienen.

Aufgabe

  1. Geben Sie HighlightTopEarners exakt wie gezeigt in modIntro ein und führen Sie es aus. Bestätigen Sie, dass zwei Zeilen grün werden.
  2. Duplizieren Sie das Verfahren als HighlightITDepartment und ändern Sie die Bedingung so, dass jede Zeile hervorgehoben wird, in der die Abteilung (Spalte 3) "IT" entspricht, anstatt das Gehalt zu prüfen.
  3. Fügen Sie über jedem Verfahren einen Kommentar hinzu, der in einem Satz erklärt, was es macht — üben Sie, Kommentare für die Lesenden zu schreiben, nicht für sich selbst.
  4. Speichern Sie die Arbeitsmappe erneut (sie ist weiterhin .xlsm, daher reicht ein normales Ctrl+S).
Hinweis
expand arrow
  1. Markieren Sie das gesamte HighlightTopEarners-Verfahren (von Sub bis End Sub), kopieren Sie es und fügen Sie es direkt darunter in modIntro ein.
  2. Benennen Sie die zweite Kopie in der Sub-Zeile zu Sub HighlightITDepartment() um — jedes Verfahren in einem Modul benötigt einen eindeutigen Namen, sonst weiß VBA nicht, welches Sie ausführen möchten.
  3. Die zu ändernde Bedingung ist die If-Zeile. Momentan prüft sie eine Zahl:
If ws.Cells(i, 6).Value > 55000 Then

Sie müssen stattdessen Text prüfen — Spalte 3 (Abteilung) entspricht "IT". Denken Sie daran, dass bei Textvergleichen Anführungszeichen um den Vergleichswert stehen müssen und = statt > verwendet wird. 4. Alles andere innerhalb der Schleife (die Interior.Color-Zeile, die Schleifenstruktur selbst) kann gleich bleiben — nur die geprüfte Bedingung ändert sich.

Kommentare hinzufügen

  1. Eine Kommentarzeile beginnt mit einem Apostroph (') und steht direkt über der Sub-Zeile — nicht innerhalb des Verfahrens.
  2. Schreiben Sie den Kommentar so, als würden Sie das Makro einer Kollegin oder einem Kollegen erklären, die/der es noch nie gesehen hat, nicht als Erinnerung für sich selbst. Vergleichen Sie:
    • Weniger hilfreich: ' durchläuft Zeilen (beschreibt das Wie, was der Code bereits zeigt)
    • Hilfreicher: ' Hebt Mitarbeitende hervor, die mehr als $55.000 verdienen (beschreibt das Ergebnis, was nicht auf den ersten Blick ersichtlich ist)
  3. Machen Sie das Gleiche für das zweite Verfahren — ein Satz, der beschreibt, was es hervorhebt und warum, bezogen auf den geschäftlichen Zweck (IT-Abteilung), nicht auf die Mechanik der Schleife.
Lösung
expand arrow
' Highlights employees earning over $55,000, to flag top earners at a glance.
Sub HighlightTopEarners()
    Dim ws As Worksheet
    Dim i As Long
    Dim lastRow As Long

    Set ws = ThisWorkbook.Worksheets("Employees")
    lastRow = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row

    For i = 2 To lastRow
        If ws.Cells(i, 6).Value > 55000 Then
            ws.Cells(i, 6).Interior.Color = RGB(198, 239, 206)
        End If
    Next i

    MsgBox "Done — high earners are highlighted."
End Sub

' Highlights every employee who works in the IT department.
Sub HighlightITDepartment()
    Dim ws As Worksheet
    Dim i As Long
    Dim lastRow As Long

    Set ws = ThisWorkbook.Worksheets("Employees")
    lastRow = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row

    For i = 2 To lastRow
        If ws.Cells(i, 3).Value = "IT" Then
            ws.Cells(i, 3).Interior.Color = RGB(198, 239, 206)
        End If
    Next i

    MsgBox "Done — IT department is highlighted."
End Sub

Geben Sie beide Verfahren in modIntro ein, führen Sie zuerst HighlightTopEarners aus und bestätigen Sie, dass genau zwei Zeilen grün werden (Emma Davis mit $62.000 und Sophia Miller mit $59.000 — die anderen drei liegen bei oder unter $55.000), führen Sie dann HighlightITDepartment aus und bestätigen Sie, dass stattdessen die Zeile von Sophia Miller hervorgehoben wird. Speichern Sie mit Strg+S, sobald beide funktionieren.

War alles klar?

Wie können wir es verbessern?

Danke für Ihr Feedback!

Abschnitt 1. Kapitel 6
some-alt