Beim Ändern einer Zelle automatisch eine Aktion ausführen (Worksheet_Change)
In vielen Excel Anwendungen soll automatisch eine Aktion ausgelöst werden, sobald ein Anwender einen Wert in einer Zelle verändert. Typische Beispiele sind automatische Prüfungen von Eingaben, das Aktualisieren von Berechnungen, das Einblenden von Hinweisen oder das Starten weiterer Prozesse.
Excel stellt dafür ein spezielles Ereignis zur Verfügung: Worksheet_Change. Dieses Ereignis wird immer dann ausgelöst, wenn sich der Inhalt einer Zelle auf einem Tabellenblatt verändert. Dabei spielt es keine Rolle, ob die Änderung durch eine manuelle Eingabe des Anwenders, durch das Einfügen von Daten oder durch eine andere Aktion erfolgt.
Mit Hilfe dieses Ereignisses lassen sich sehr komfortabel bestimmte Zellen oder ganze Zellbereiche überwachen.
Ein wichtiger Hinweis vorab:
Der Code für dieses Ereignis muss direkt im Code des betreffenden Tabellenblattes eingefügt werden und nicht in einem normalen Modul.
Der Grund ist einfach: Das Ereignis gehört zum Tabellenblatt selbst und reagiert nur auf Änderungen innerhalb dieses Blattes.
Funktionsweise des Worksheet_Change Ereignisses
Sobald eine Zelle geändert wird, übergibt Excel automatisch ein Objekt an das Makro. Dieses Objekt heißt Target.
Target enthält Informationen darüber, welche Zelle oder welcher Zellbereich verändert wurde.
Damit kann im Code geprüft werden, ob eine bestimmte Zelle betroffen ist oder ob die Änderung in einem bestimmten Bereich erfolgt ist.
Lösung 1: Überwachung einzelner Zellen
Wenn nur wenige einzelne Zellen überwacht werden sollen, kann einfach die Zelladresse abgefragt werden.
Im folgenden Beispiel wird geprüft, ob der Anwender die Zelle A1 oder C1 verändert hat. Falls dies der Fall ist, erscheint eine Meldung.
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
If Target.Address = "$A$1" Or Target.Address = "$C$1" Then
MsgBox "Sie haben gerade Zelle A1 oder C1 verändert!"
End If
End Sub
Erklärung des Codes
Worksheet_Change
Dieses Ereignis wird automatisch ausgelöst, sobald eine Änderung im Tabellenblatt erfolgt.
Target
Enthält die Adresse der Zelle, die verändert wurde.
Target.Address
Gibt die exakte Zelladresse zurück.
MsgBox
Zeigt eine Meldung an den Anwender an.
Diese Lösung ist sehr einfach umzusetzen und eignet sich besonders dann, wenn nur wenige einzelne Zellen überwacht werden sollen.
Sobald allerdings mehrere Zellen oder ganze Bereiche überwacht werden müssen, wird diese Methode schnell unübersichtlich. In solchen Fällen empfiehlt sich eine deutlich elegantere Lösung.
Lösung 2: Überwachung von Zellbereichen mit Intersect
Wenn mehrere Zellen oder ganze Bereiche überwacht werden sollen, ist die Verwendung der Intersect Funktion wesentlich komfortabler.
Intersect prüft, ob sich zwei Zellbereiche überschneiden. In diesem Fall wird festgestellt, ob die geänderte Zelle innerhalb eines bestimmten Bereichs liegt.
Das folgende Beispiel überwacht den Bereich A1 bis A3.
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Application.Intersect(Target, Range("A1:A3")) Is Nothing Then
MsgBox "Im Bereich A1:A3 wurde eine Zelle geändert!"
End If
End Sub
Erklärung des Codes
Application.Intersect(Target, Range("A1:A3"))
Hier wird geprüft, ob die geänderte Zelle (Target) innerhalb des Bereichs A1:A3 liegt.
Wenn eine Überschneidung vorliegt, liefert Intersect ein Objekt zurück.
Wenn keine Überschneidung vorliegt, wird Nothing zurückgegeben.
Die Bedingung
Not … Is Nothing
bedeutet daher:
"Die Änderung liegt innerhalb des definierten Bereichs."
Sobald also eine Änderung in den Zellen A1, A2 oder A3 erfolgt, wird die Meldung angezeigt.
Vorteile der Intersect Methode
Die Intersect Lösung ist besonders flexibel und wird in professionellen VBA Anwendungen sehr häufig eingesetzt. Sie bietet mehrere Vorteile:
- Überwachung ganzer Zellbereiche möglich
- übersichtlicher und besser wartbarer Code
- einfache Erweiterung auf mehrere Bereiche
- geringere Fehleranfälligkeit
Ein Beispiel für die Überwachung mehrerer Bereiche könnte so aussehen:
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Application.Intersect(Target, Range("A1:A3,C1:C3")) Is Nothing Then
MsgBox "Eine Zelle in den überwachten Bereichen wurde geändert!"
End If
End Sub
Hier werden gleichzeitig zwei Bereiche überwacht.
Typische Einsatzmöglichkeiten
Die Überwachung von Zelländerungen wird in vielen Excel Anwendungen genutzt, beispielsweise für:
- automatische Plausibilitätsprüfungen
- Starten von Berechnungsprozessen
- Validierung von Benutzereingaben
- automatisches Einfärben von Zellen
- Aktualisierung von Statusanzeigen
- Steuerung von Formularen oder Dashboards
Gerade bei komplexeren Excel Tools kann diese Technik dazu beitragen, Arbeitsabläufe stark zu automatisieren.
Wichtiger Hinweis zum Einfügen des Codes
Damit das Ereignis korrekt funktioniert, muss der Code im Codebereich des Tabellenblattes eingefügt werden.
Der Weg dorthin ist:
- VBA Editor öffnen (ALT + F11)
- Im Projektfenster das gewünschte Tabellenblatt auswählen
- Doppelklick auf das Blatt (z. B. Tabelle1)
- Den Code in das Codefenster einfügen
Der Code darf nicht in ein Standardmodul eingefügt werden, da er sonst nicht automatisch ausgeführt wird.
Fazit
Mit dem Ereignis Worksheet_Change lassen sich Änderungen in Excel Tabellen sehr einfach überwachen. Dadurch können automatisierte Abläufe, Prüfungen oder Reaktionen auf Benutzereingaben umgesetzt werden.
Während die direkte Adressprüfung für einzelne Zellen geeignet ist, stellt die Kombination mit der Intersect Funktion eine deutlich flexiblere und professionellere Lösung dar.
Damit lassen sich ganze Zellbereiche überwachen und VBA Anwendungen wesentlich komfortabler gestalten.

