Live-Forum - Die aktuellen Beiträge
Datum
Titel
16.10.2025 17:40:39
16.10.2025 17:25:38
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Makro automatisch bei Zellenänderung ausführen

Makro automatisch bei Zellenänderung ausführen
Michael
Hallo,
für eine Tabelle nutze ich folgendes Makro:

Sub einfärben()
For Each Cell In Range("H5:AH16")
If Cell = "SE" Then
Cell.Interior.ColorIndex = 3
Cell.Font.ColorIndex = 3
End If
If Cell = "TW" Then
Cell.Interior.ColorIndex = 4
Cell.Font.ColorIndex = 4
End If
If Cell = "BS" Then
Cell.Interior.ColorIndex = 5
Cell.Font.ColorIndex = 5
End If
If Cell = "SK" Then
Cell.Interior.ColorIndex = 6
Cell.Font.ColorIndex = 6
End If
If Cell = "CN" Then
Cell.Interior.ColorIndex = 7
Cell.Font.ColorIndex = 7
End If
If Cell = "MST" Then
Cell.Interior.ColorIndex = 8
Cell.Font.ColorIndex = 8
End If
If Cell = "SAM" Then
Cell.Interior.ColorIndex = 9
Cell.Font.ColorIndex = 9
End If
If Cell = "Assi" Then
Cell.Interior.ColorIndex = 10
Cell.Font.ColorIndex = 10
End If
Next Cell
End Sub

Bisher muss ich das Makro allerdings jedes Mal per Hand ausführen, wenn sich ein Zellergebnis geändert hat. Gibt es die Möglichkeit, dass das Makro sofort ausgeführt wird, sobald sich ein Zellergebnis in der angegebenen Range ergibt?
Danke für Eure Hilfe und viele Grüße
Michael
Anzeige
AW: Makro automatisch bei Zellenänderung ausführen
16.03.2010 10:59:21
Matthias
Hallo
in einem Modul
Sub einfaerben()
Dim cell As Range
For Each cell In Range("H5:AH16")
If cell = "SE" Then
cell.Interior.ColorIndex = 3
cell.Font.ColorIndex = 3
End If
If cell = "TW" Then
cell.Interior.ColorIndex = 4
cell.Font.ColorIndex = 4
End If
If cell = "BS" Then
cell.Interior.ColorIndex = 5
cell.Font.ColorIndex = 5
End If
If cell = "SK" Then
cell.Interior.ColorIndex = 6
cell.Font.ColorIndex = 6
End If
If cell = "CN" Then
cell.Interior.ColorIndex = 7
cell.Font.ColorIndex = 7
End If
If cell = "MST" Then
cell.Interior.ColorIndex = 8
cell.Font.ColorIndex = 8
End If
If cell = "SAM" Then
cell.Interior.ColorIndex = 9
cell.Font.ColorIndex = 9
End If
If cell = "Assi" Then
cell.Interior.ColorIndex = 10
cell.Font.ColorIndex = 10
End If
Next cell
End Sub
In der Tabelle
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("H5:AH16")) Is Nothing And Target.Count = 1 Then einfaerben
End Sub

Gruß Matthias
Anzeige
@Matthias : inhaltlicher/logischer Fehler
16.03.2010 11:08:54
NoNet
Hallo Matthias,
Dein Makro überprüft nur, ob innerhalb des Bereiches H5:AH16 eine Änderung stattgefunden hat, das muss jedoch nicht unbedingt sein : Wenn in H5 z.B. die Funktion =WENN(A5=1;"";"TW") steht, sollte wohl auch eine Änderung der Zelle A5 die Farbänderung auslösen, da sich der Wert in H5 in Abhängigkeit der Zelle A5 ja auch ändert !
Weiterhin prüfst Du auf Target.Count=1 : Was aber, wenn mehrere Zellen gleichzeitig geändert wurden (z.B. eine komplette Spalte per ENTF gelöscht oder per Strg+V Werte eingefügt wurden) ? Auch dann sollte m.E. das Makro ausgeführt werden ;-)
Bitte siehe das nicht als böse Kritik :-( meinerseits an, sondern als konstruktive Kritik :-)
Gruß, NoNet
Anzeige
AW: @Matthias : inhaltlicher/logischer Fehler
16.03.2010 11:41:40
Matthias
Hallo
Is nicht mein Makro ;o)
Ich hätte da auch eher mit Case gearbeitet, wie Du vorgeschlagen hast.
Mit Target.Count, das hatte ich falsch interpretiert (habe das mit dem "wenn sich ein Zellergebnis ändert ... falsch verstanden)
Aber evtl. könnte man da eh mit .Calculate arbeiten?
Gruß Matthias
Anzeige
AW: Makro automatisch bei Zellenänderung ausführen
16.03.2010 10:59:51
robert
hi,
meinst du so ?
gruß
robert
'Code in deine Tabelle
Private Sub Worksheet_Change(ByVal Target As Range)
Call "hier dein Makroname"
End Sub

AW: Makro automatisch bei Zellenänderung ausführen
16.03.2010 11:00:19
Reinhard
Hallo Michael,
in Modul Tabelle1:
Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Target, Range("H5:AH16")) Is Nothing Then Exit Sub
Call Einfaerben
End Sub
in Modul1:

Sub Einfaerben()
Dim Werte, W As Integer
Werte = Array("SE", "TW", "BS")
For Each Cell In Range("H5:AH16")
For W = 0 To UBound(Werte)
If Cell.Value = Werte(W) Then
Cell.Interior.ColorIndex = W + 3
Cell.Font.ColorIndex = W + 3
Exit For
End If
Next W
Next Cell
End Sub

Gruß
Reinhard
Anzeige
Korrektur
16.03.2010 11:15:22
Reinhard
Hallo Michael,
in Modul1:
Sub Einfaerben()
Dim Werte, W As Integer, Cell As Range
Werte = Array("SE", "TW", "BS")
Range("H5:AH16").Interior.ColorIndex = xlNone
Range("H5:AH16").Font.ColorIndex = 0
For Each Cell In Range("H5:AH16")
For W = 0 To UBound(Werte)
If Cell.Value = Werte(W) Then
Cell.Interior.ColorIndex = W + 3
Cell.Font.ColorIndex = W + 3
Exit For
End If
Next W
Next Cell
End Sub

Gruß
Reinhard
Anzeige
AW: Korrektur
16.03.2010 11:23:48
Michael
Vielen Dank!
Was ist denn der Unterschied zur nicht korrigierten Version? Denn die hat bei mir bereits funktioniert!
Gruß
Michael
AW: Korrektur
16.03.2010 11:38:23
Reinhard
Hallo Micheal,
wenn in einer Zelle im Bereich "SW" ist wird sie bunt. Wird dieser Wert gelöscht, so bleibt sie bunt, deshalb dieses eingebaut:
Range("H5:AH16").Interior.ColorIndex = xlNone
Range("H5:AH16").Font.ColorIndex = 0
Gruß
Reinhard
Anzeige
Vorsicht : Fehlerquelle ARRAY
16.03.2010 11:17:50
NoNet
Hallo Reinhard,
an ein ARRAY dachte ich auch zuerst, allerdings erschien es mir zu unflexibel (z.B. wenn irgendwann bei Wert "BS" der ColorIndex 15 verwendet werden soll).
Eine weitere potentielle Fehlerquelle enthält Dein Code :
Deine Schleife läuft fix von 0 bis zur Obergrenze des ARRAYs und Du addierst immer den Wert 3.
Da wir aber den evtl. bereits vorhandenen Code nicht kennen ist das ein Verlass auf die Standardeinstellungen. Wenn das Modul jedoch zu Beginn die Anweisung Option Base 1 enthält, beginnen die ARRAYs nicht mehr mit dem Index 0 sondern bei 1, dann produziert Dein Code falsche Farben.
Korrekturvorschlag :
For W = LBound(Werte) To UBound(Werte)
Cell.Interior.ColorIndex = W + 3 - LBound(Werte)
Cell.Font.ColorIndex = W + 3 - LBound(Werte)
Gruß, NoNet
Anzeige
Option Base 1
16.03.2010 11:47:17
Rudi
Hallo,
das kann man ja ausschließen:

Sub Einfaerben()
Dim Werte, W As Integer
Werte = Array("SE", "TW", "BS")
For Each Cell In Range("H5:AH16")
For W = LBound(Werte) To UBound(Werte)
If Cell.Value = Werte(W) Then
Cell.Interior.ColorIndex = W + 3 + (LBound(Werte) = 1)
Cell.Font.ColorIndex = W + 3
Exit For
End If
Next W
Next Cell
End Sub

Gruß
Rudi
Anzeige
Farbänderung bei Zellenänderung ausführen
16.03.2010 11:03:12
NoNet
Hallo Michael,
kopiere das folgende Makro in das Klassenmodul des Tabellenblattes (also: Name des Blattes im Blattregister unten per Rechts anklicken - "Code anzeigen..." auswählen und den Code in das nun geöffnete VBA-Fenster kopieren) :
Private Sub Worksheet_Change(ByVal Target As Range)
Dim rngZelle As Range, intFarbe As Integer
For Each rngZelle In Range("H5:AH16")
Select Case rngZelle.Value
Case "SE": intFarbe = 3
Case "TW": intFarbe = 4
Case "BS": intFarbe = 5
Case "SK": intFarbe = 6
Case "CN": intFarbe = 7
Case "MST": intFarbe = 8
Case "SAM": intFarbe = 9
Case "Assi": intFarbe = 10
Case Else: intFarbe = 0
End Select
If intFarbe > 0 Then
rngZelle.Interior.ColorIndex = intFarbe
rngZelle.Font.ColorIndex = intFarbe
End If
Next
End Sub
Gruß, NoNet
Anzeige
@NoNet: inhaltlicher/logischer Fehler
16.03.2010 11:19:35
Renee
Hallo NoNet,
Dein Makro überprüft nur, ob innerhalb der Tabelle (in der der Code zu stehen kommt) eine Änderung stattgefunden hat, das muss jedoch nicht unbedingt sein : Wenn in H5 z.B. die Funktion =WENN(Andere Tabelle!A5=1;"";"TW") steht, sollte wohl auch eine Änderung der Zelle AndereTabelle!A5 die Farbänderung auslösen, da sich der Wert in H5 in Abhängigkeit der Zelle AndereTabelle!A5 ja auch ändert !
Bitte siehe das nicht als böse Kritik :-( meinerseits an, sondern als konstruktive Kritik :-)
(copyRight) by you ;-)))
GreetZ Renée
Anzeige
*fg* : Kann man so sehen...
16.03.2010 11:37:36
NoNet
...muss man aber nicht ;-)
Hey Renée,
Dein Einwand ist so betrachtet natürlich korrekt - aber wo zieht man da die Grenze !?!?
Dann müsste man auch überprüfen : =WENN(['\\Server\Ordner\Externe Mappe.xls]Andere Tabelle'!A5=1;"";"TW") bzw. es böte sich ein allgemeingültiges Klassenmodul z.B. in einem AddIn an....
Ich habe einfach die Angabe eine Tabelle  im Ausgangspost sehr wörtlich genommen ;-)
Greetz zurück, NoNet
Anzeige
Die Grenze kannst du nirgends ziehen...
16.03.2010 12:56:46
Renee
NoNet,
Denn vielleicht sind auch noch irgendwo =INDIREKT-Formeln, Queries (mit Intervall-Abfragen), andere Makros ...etc. verbaut.
Also bleibt:
a) eine Rückfrage beim Anfragesteller, ob im Bereich nur manuelle Werte oder Formeln, die sich innerhalb des Bereichs bewegen, vorkommen
oder
b) wie vorgeschlagen mit der >_Calculate Keule zuschlagen. ;-)
GreetZ Renée
Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige
Anzeige

Infobox / Tutorial

Makro automatisch bei Zellenänderung ausführen


Schritt-für-Schritt-Anleitung

Um ein Excel-Makro automatisch auszuführen, sobald sich eine Zelle in einem bestimmten Bereich ändert, kannst du die folgenden Schritte befolgen:

  1. Öffne das VBA-Editor:

    • Drücke ALT + F11, um das Visual Basic for Applications (VBA) Fenster zu öffnen.
  2. Wähle das richtige Tabellenblatt:

    • Doppelklicke im Projekt-Explorer auf das Blatt, in dem du das Makro aktivieren möchtest (z.B. "Tabelle1").
  3. Füge den Code für das Makro ein:

    • Kopiere und füge den folgenden Code in das Codefenster ein:
    Private Sub Worksheet_Change(ByVal Target As Range)
       If Not Intersect(Target, Range("H5:AH16")) Is Nothing Then
           Call Einfaerben
       End If
    End Sub
  4. Erstelle das dazugehörige Makro:

    • Gehe zu "Module" im Projekt-Explorer, füge ein neues Modul hinzu und füge diesen Code ein:
    Sub Einfaerben()
       Dim Cell As Range
       For Each Cell In Range("H5:AH16")
           Select Case Cell.Value
               Case "SE": Cell.Interior.ColorIndex = 3
               Case "TW": Cell.Interior.ColorIndex = 4
               Case "BS": Cell.Interior.ColorIndex = 5
               Case Else: Cell.Interior.ColorIndex = xlNone
           End Select
       Next Cell
    End Sub
  5. Speichere deine Arbeit:

    • Schließe den VBA-Editor und speichere die Excel-Datei als Makro-fähige Datei (z.B. .xlsm).

Jetzt wird das Makro automatisch ausgeführt, wenn sich eine Zelle im Bereich H5:AH16 ändert!


Häufige Fehler und Lösungen

  • Makro wird nicht ausgelöst:

    • Stelle sicher, dass du den Code im richtigen Tabellenblatt und nicht in einem Modul eingefügt hast.
  • Farbe bleibt bestehen, wenn Wert gelöscht wird:

    • Füge im Einfaerben Makro den Code hinzu, um die Formatierungen zurückzusetzen:
    Range("H5:AH16").Interior.ColorIndex = xlNone
  • Fehler bei der Verwendung von Arrays:

    • Achte darauf, dass die Array-Indizes korrekt sind. Verwende LBound und UBound, um Fehler zu vermeiden.

Alternative Methoden

  1. Ereignis Worksheet_Calculate:

    • Wenn Werte durch Formeln geändert werden, kann das Ereignis Worksheet_Calculate hilfreich sein:
    Private Sub Worksheet_Calculate()
       Call Einfaerben
    End Sub
  2. Verwendung von Application.OnTime:

    • Du kannst auch eine Zeitsteuerung verwenden, um das Makro regelmäßig zu überprüfen.

Praktische Beispiele

  • Färbung nach Status:

    • Verwende den folgenden Code, um Zellen basierend auf spezifischen Statuswerten zu färben:
    Select Case Cell.Value
      Case "SE": Cell.Interior.ColorIndex = 3
      Case "TW": Cell.Interior.ColorIndex = 4
      Case "BS": Cell.Interior.ColorIndex = 5
    End Select
  • Anpassung für mehrere Bereiche:

    • Du kannst das Makro erweitern, um auch andere Bereiche zu überprüfen:
    If Not Intersect(Target, Range("A1:B10")) Is Nothing Then
      Call Einfaerben
    End If

Tipps für Profis

  • Optimierung der Leistung:

    • Deaktiviere Bildschirmaktualisierungen während der Ausführung des Makros:
    Application.ScreenUpdating = False
    ' Dein Code hier
    Application.ScreenUpdating = True
  • Fehlerbehandlung:

    • Implementiere On Error Resume Next, um sicherzustellen, dass das Makro nicht bei einem Fehler stoppt.

FAQ: Häufige Fragen

1. Frage
Wie aktiviere ich Makros in Excel?
Um Makros zu aktivieren, gehe zu "Datei" > "Optionen" > "Trust Center" > "Einstellungen für das Trust Center" und aktiviere die Makrosicherheit.

2. Frage
Kann ich mehrere Makros gleichzeitig ausführen?
Ja, du kannst mehrere Makros miteinander verknüpfen, indem du sie in einem einzigen Makro aufrufst.

3. Frage
Wie kann ich sicherstellen, dass mein Makro bei jeder Änderung ausgeführt wird?
Verwende das Worksheet_Change Ereignis, um das Makro bei jeder Änderung in einem bestimmten Bereich auszuführen.

4. Frage
Was ist der Unterschied zwischen Worksheet_Change und Worksheet_Calculate?
Worksheet_Change wird ausgelöst, wenn eine Zelle manuell geändert wird, während Worksheet_Calculate ausgelöst wird, wenn sich das Ergebnis einer Formel ändert.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige