Tutorial: Excel-Makros bei Zelländerung automatisch ausführen

Melden

Hier ist ein ausführliches Tutorial, wie du Makros in Excel automatisch startest, wenn sich Zellwerte ändern.

In Excel gibt es Situationen, in denen ein Makro nicht erst durch das Klicken eines Buttons, sondern automatisch starten soll – zum Beispiel, wenn ein Wert in eine Zelle eingegeben oder ein Eintrag in einer Dropdown-Liste (Datenüberprüfung) ausgewählt wird.

Dies erreichen wir mit dem sogenannten Worksheet_Change Ereignis.


Schritt 1: Den VBA-Editor öffnen

Der Code für Zelländerungen gehört nicht in ein Standard-Modul, sondern direkt in das Codefenster des jeweiligen Tabellenblatts.

  1. Öffne deine Excel-Datei.
  2. Mache einen Rechtsklick unten auf den Reiter des Tabellenblatts (z. B. "Tabelle1").
  3. Wähle Code anzeigen.
  4. Ein Fenster (VBA-Editor) öffnet sich. Das große weiße Feld ist der Bereich für deinen Code.

Schritt 2: Grundstruktur des Codes

Kopiere diese Grundstruktur in das Fenster. Sie stellt sicher, dass das Makro nur reagiert, wenn eine bestimmte Zelle geändert wird:

Private Sub Worksheet_Change(ByVal Target As Range)
    ' "Target" ist die Zelle, die gerade geändert wurde

    ' Hier prüfen wir, ob die Änderung in unserer Ziel-Zelle passiert ist
    If Not Intersect(Target, Range("A1")) Is Nothing Then
        ' HIER DEIN CODE ODER MAKRONAME
        MsgBox "Die Zelle A1 wurde geändert!"
    End If
End Sub

Szenario 1: Änderung einer einzelnen Zelle (z. B. Drop-down)

Wenn du eine Drop-down-Liste in Zelle B5 hast und bei jeder Auswahl ein Makro starten möchtest, sieht der Code so aus:

Private Sub Worksheet_Change(ByVal Target As Range)
    ' Prüfen, ob Zelle B5 geändert wurde
    If Target.Address = "$B$5" Then
        Call MeinMakroName ' Ersetze dies durch den Namen deines Makros
    End If
End Sub

Szenario 2: Änderung innerhalb eines Bereichs (Range)

Möchtest du reagieren, wenn irgendeine Zelle im Bereich A1 bis C10 geändert wird?

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim Bereich As Range
    Set Bereich = Range("A1:C10")

    ' Prüfen, ob die geänderte Zelle (Target) im Bereich liegt
    If Not Intersect(Target, Bereich) Is Nothing Then
        MsgBox "Änderung im Bereich A1:C10 erkannt!"
    End If
End Sub

Szenario 3: Reagieren auf einen spezifischen Wert

Du möchtest, dass das Makro nur startet, wenn in der Zelle D1 das Wort "Start" ausgewählt oder eingegeben wurde:

Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Intersect(Target, Range("D1")) Is Nothing Then
        If Target.Value = "Start" Then
            MsgBox "Das Makro wird jetzt ausgeführt, weil 'Start' eingegeben wurde."
        End If
    End If
End Sub

Wichtiger Hinweis: Endlosschleifen vermeiden!

Wenn dein Makro selbst Werte in die Tabelle schreibt, würde das Worksheet_Change Ereignis erneut ausgelöst werden – es entsteht eine Endlosschleife. Um das zu verhindern, musst du die Ereignisse kurzzeitig ausschalten:

Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Intersect(Target, Range("A1")) Is Nothing Then

        ' Ereignisse deaktivieren
        Application.EnableEvents = False

        ' Dein Code (der z.B. Zellen verändert)
        Target.Offset(0, 1).Value = "Geändert am " & Now

        ' Ereignisse unbedingt wieder aktivieren!
        Application.EnableEvents = True

    End If
End Sub

Zusammenfassung: Worauf musst du achten?

  1. Speicherformat: Deine Excel-Datei muss als Excel Arbeitsmappe mit Makros (.xlsm) gespeichert werden.
  2. Target: Das Objekt Target repräsentiert die Zelle, die die Änderung ausgelöst hat. Du kannst mit Target.Value oder Target.Address arbeiten.
  3. Formeln: Das Worksheet_Change Ereignis reagiert nicht auf Änderungen durch Formeln. Wenn sich ein Wert in A1 ändert, weil dort =B1+C1 steht, wird das Ereignis nicht ausgelöst. (Dafür bräuchte man das Worksheet_Calculate Ereignis).
  4. Platzierung: Der Code muss zwingend im Modul des jeweiligen Tabellenblatts stehen (z.B. "Tabelle1"), nicht in "Modul1" oder "DieseArbeitsmappe".

Viel Erfolg beim Automatisieren deiner Excel-Tabellen!

0