[Excel VBA] Zeile färben, wenn Zelle x=?

Hallo Experten

Ich versuche zur Zeit ein Excel VBA Makro zu erstellen, mit dem ich in einer automatisch erstellten Tabelle (die oft aktualisiert wird, aber vom Grundaufbau immer identisch ist) bestimmte Zeilen (!) zu färben.

Ich will es mal an einem Beispiel genauer formulieren:

Wenn z. B. in Zelle H5 ein bestimmer Text steht, dann will ich die komplette Zeile (in diesem Beispiel 5) farblich markieren.

Und das Makro sollte auch die ganze Tabelle überprüfen, da die gleichen Texte sehr oft an verschiedenen Stellen auftauchen.

Mein bisher einziger Erolf ist es das ich die entsprechenden Zellen farblich markieren konnte, nicht aber die gesamte Zeile. Dazu habe ich dann folgendes Makro benutzt:

Sub Makro1()
Columns(„H:H“).Select
Selection.FormatConditions.Delete
Selection.FormatConditions.Add Type:=xlCellValue, Operator:=xlEqual, _
Formula1:="="„Gruen“""
Selection.FormatConditions(1).Font.ColorIndex = 10
Selection.FormatConditions.Add Type:=xlCellValue, Operator:=xlEqual, _
Formula1:="="„Gelb“""
Selection.FormatConditions(2).Font.ColorIndex = 44
Selection.FormatConditions.Add Type:=xlCellValue, Operator:=xlEqual, _
Formula1:="="„Rot“""
Selection.FormatConditions(3).Font.ColorIndex = 3
End Sub

Kann mir da vielleicht jemand sagen wo der Fehler liegt, bzw. wie ich dem Makro sagen kann das die kompletten Zeilen gefärbt werden sollen ?

Danke schonmal im vorraus

Hi Stefan,
komm jetzt noch nicht so ganz dahinter, da ich VBA immer so programmiere und keine Makros erstellen lasse.
Was mir aber auffällt: du markierst da eine SPALTE, keine ZEILE. Du solltest die Zeile

Columns(„H:H“).Select

durch

Rows(5).Select

ersetzen.

Was aber an dem generellen Problem nichts ändert… wo fragst du denn ab, ob die Zelle einen bestimmten Inhalt hat? Wo durchsuchst du die ganze Tabelle?

Schreib doch mal, wie viel Ahnung du von VBA hast, dann kann ich das besser einschätzen und dir gezielter helfen.

Viele Grüße,
Julia

Hallo Julia

Schreib doch mal, wie viel Ahnung du von VBA hast, dann kann
ich das besser einschätzen und dir gezielter helfen.

Eigentlich hab ich keine Ahnung davon, hab erst vor kurzem angefangen damit und dann auch nur über die Makros von Excel.

komm jetzt noch nicht so ganz dahinter, da ich VBA immer so
programmiere und keine Makros erstellen lasse.
Was mir aber auffällt: du markierst da eine SPALTE, keine
ZEILE. Du solltest die Zeile

Columns(„H:H“).Select

Was aber an dem generellen Problem nichts ändert… wo fragst
du denn ab, ob die Zelle einen bestimmten Inhalt hat? Wo
durchsuchst du die ganze Tabelle?

Bisher dachte ich das mit der besagten Zeile oben die Spalte H durchsucht wird (was für meinen Fall auch richtig wäre, da sich die Werte die gesucht werden immer in Spalte H befinden). Aber ich wie ich Excel beibringen kann, das er in Spalte H sucht aber dann die gesamte Zeile färbt hab ich ja noch nicht rausbekommen.

Wenn ich statt

Columns(„H:H“).Select
Rows(5).Select

einsetze, dann färbt Excel nur eine Zelle, und zwar die in Spalte H Zeile 5.

Es muss auch nicht mit den Befehlen funktionieren, die ich hier angegeben habe, das war nur mein Ansatz.

Eigentlich soll Excel nur in Spalte H nach einem bestimmten Wert suchen und wenn der Wert gefunden wurde, dann soll die gesamte Zeile in der der Wert steht gefärbt werden.

Wäre toll, wenn du mir da weiterhelfen könntest.

Lieben Gruß
Stefan

Wenn z. B. in Zelle H5 ein bestimmer Text steht, dann will ich
die komplette Zeile (in diesem Beispiel 5) farblich markieren.
Und das Makro sollte auch die ganze Tabelle überprüfen, da die
gleichen Texte sehr oft an verschiedenen Stellen auftauchen.

Hi Stefan,
Alt+F11, Doppelklick auf den Tabellenblattnamen, Code einfügen, ggfs anpassen, Editor schliessen.
Zelle A1 und Spalte H wird auf Änderungen überwacht. In A1 steht der Suchtext. Wird er in H gefunden wird die entsprechende zeile automatisch eingefärbt.

Option Explicit
Private Sub Worksheet\_Change(ByVal Target As Range)
If Target.Column 8 And Target.Address "$A$1" Then Exit Sub ' A=1, B=2,...H=8, usw
Dim zei As Long
For zei = 1 To Cells(65536, 8).End(xlUp).Row
 Cells(zei, 8).EntireRow.Interior.ColorIndex = xlNone
 If Cells(zei, 8) = Range("A1") Then Cells(zei, 8).EntireRow.Interior.ColorIndex = 34
Next zei
End Sub

Gruß
Reinhard

Hallo Rainer

Erstmal Danke für deine Mühe, aber der Code klappt bei mir nicht und ist auch so komplex das ich ihn nicht verstehe um was daran zu ändern.

Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column 8 And Target.Address „$A$1“
Then Exit Sub ’ A=1, B=2,…H=8, usw
Dim zei As Long
For zei = 1 To Cells(65536, 8).End(xlUp).Row
Cells(zei, 8).EntireRow.Interior.ColorIndex = xlNone
If Cells(zei, 8) = Range(„A1“) Then Cells(zei,
8).EntireRow.Interior.ColorIndex = 34
Next zei
End Sub

Wenn ich den Code allerdings ohne Änderungen einfach übernehme kommt folgende Fehlermeldung (zu dem Option Explicit)

Fehler beim Kompilieren. Innerhalb einer Prozedur ungültig.

Alt+F11, Doppelklick auf den Tabellenblattnamen, Code
einfügen, ggfs anpassen, Editor schliessen.
Zelle A1 und Spalte H wird auf Änderungen überwacht. In A1
steht der Suchtext. Wird er in H gefunden wird die
entsprechende zeile automatisch eingefärbt.

Aber wenn ich die Erklärung zu deinem Code richtig verstanden habe, dann habe ich mich glaube ich auch nicht genau genug ausgedrückt.

Also ich habe einen automatisch generierten Text der in Excel importiert wurde. In diesem Text gibt es drei verschiedene Zeichenfolgen („Sehr wichtig“, „Hat Zeit“, „Eher unwichtig“), die automatisch gesucht werden sollen (ohne vorherige Angabe in einer Zelle) und dann soll die komplette Zeile in der diese Zeichenfolge vorkommt (die Zeichenfolgen kommen grundsätzlich nur in Spalte H vor) gefärbt werden.

Lieben Gruß
Stefan

Hi Stefan,

Erstmal Danke für deine Mühe, aber der Code klappt bei mir
nicht

ich hatte ihn getestet, hat funktioniert.

Wenn ich den Code allerdings ohne Änderungen einfach übernehme
kommt folgende Fehlermeldung (zu dem Option Explicit)
Fehler beim Kompilieren. Innerhalb einer Prozedur ungültig.

kann ich nicht nachvollziehen.

Also ich habe einen automatisch generierten Text der in Excel
importiert wurde. In diesem Text gibt es drei verschiedene
Zeichenfolgen („Sehr wichtig“, „Hat Zeit“, „Eher unwichtig“),
die automatisch gesucht werden sollen (ohne vorherige Angabe
in einer Zelle) und dann soll die komplette Zeile in der diese
Zeichenfolge vorkommt (die Zeichenfolgen kommen grundsätzlich
nur in Spalte H vor) gefärbt werden.

probiers mal so, im Editor Einfügen —Modul, dorthinein den Code.

Option Explicit
Sub tt()
Dim zei As Long
For zei = 1 To Range("H65536").End(xlUp).Row
Select Case Cells(zei, 8)
 Case "Sehr wichtig", "Hat Zeit", "Eher unwichtig"
 Cells(zei, 8).EntireRow.Interior.ColorIndex = 34
 Case Else
 Cells(zei, 8).EntireRow.Interior.ColorIndex = xlNone
End Select
Next zei
End Sub

Gruß
Reinhard

Hallo Reinhard

probiers mal so, im Editor Einfügen —Modul, dorthinein den
Code.

Jetzt wo ich weiss, wohin ich den Code kopieren soll, klappts natürlich auch auf Anhieb :smile:

Bisher hatte ich einfach ein neues Makro erstellt und den Code kopiert, und dann kommt die von mir besagte Fehlermeldung :wink:

Vielen Dank nochmal für deine Mühe (und deine Geduld)

Gruß
Stefan

Jetzt wo ich weiss, wohin ich den Code kopieren soll, klappts
natürlich auch auf Anhieb :smile:
Bisher hatte ich einfach ein neues Makro erstellt und den Code
kopiert, und dann kommt die von mir besagte Fehlermeldung :wink:

Hi Stefan,
jetzt wo du es sagst fällt mit auf dass ich gepennt hatte bei deiner Fehlermeldung.
Option Explicit gehört als erste Zeile in ein Modul.
Gruß
Reinhard

Hi Stefan,
sorry, konnte die letzten Tagen nicht online. Wie ich sehe, wurde dir ja auch geholfen.
Wenn du mehr in VBA machst, solltest du dir die Grundlagen der Sprache, also Schleifen, Strukturen etc., aneignen. Makros sind eine schöne Sache, mach ich auch oft erstmal, wenn mir ein Befehl nicht einfällt, aber man stößt auch schnell an seine Grenzen.

Liebe Grüße,
Julia