Tipps & Tricks
19.09.2014, 06:05 Uhr
Excel: Zellen je nach Inhalt abwechselnd einfärben
Sobald in Spalte A eine neue Bezeichnung kommt, soll die Farbe ändern. Wie das geht? Hier die Antwort
Frage: Sie würden in Ihrer Tabelle gerne die Zeilen nach folgendem Muster automatisch abwechselnd einfärben: Sobald in Spalte A eine neue Bezeichnung kommt, soll die Farbe ändern. So hätten Sie eine bessere Lesbarkeit und könnten auf einen Blick erkennen, welche Einträge zur gleichen Bezeichnung gehören.
Lösung: Es gibt wohl Möglichkeiten, dies mit bedingten Formatierungen und Hilfsspalten zu lösen, siehe erste Ansätze in diesem Forums-Thread.
Etwas eleganter, weil es ohne Hilfsspalte und automatisch funktioniert, ist allerdings die Lösung per Makro. Das Makro müssen Sie übrigens zum Tabellenblatt hinzufügen, nicht zur Arbeitsmappe. Gleich nachfolgend Schritt für Schritt.
Öffnen Sie den VisualBasic Editor, indem Sie Alt+F11 drücken. Klappen Sie in der linken Fensterhälfte allenfalls «Microsoft Excel Objekte» auf und doppelklicken Sie den Namen der betroffenen Tabelle (z.B. «Tabelle1»). Damit wendet sich das Makro ausdrücklich in jener Tabelle an.
Kopieren Sie folgenden Makro-Code hinein:
Code:
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
If Target.Column <> 1 Then Exit Sub
Dim find1, find2 ' "Farbindex"
Dim urr, urc, z
urr = ActiveSheet.UsedRange.Rows.Count
urc = ActiveSheet.UsedRange.Columns.Count
For z = 2 To urr
If Cells(z, 1) <> Cells(z - 1, 1) Then
find1 = find1 + 1
find2 = find1 Mod 2
End If
With Range(Cells(z, 1), Cells(z, urc)).Interior
If find2 = 1 Then
.Pattern = xlSolid
.PatternColorIndex = xlAutomatic
.ThemeColor = xlThemeColorLight2
.TintAndShade = 0.7
.PatternTintAndShade = 0
End If
If find2 = 0 Then
.ColorIndex = xlNone
End If
End With
Next z
End Sub
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
If Target.Column <> 1 Then Exit Sub
Dim find1, find2 ' "Farbindex"
Dim urr, urc, z
urr = ActiveSheet.UsedRange.Rows.Count
urc = ActiveSheet.UsedRange.Columns.Count
For z = 2 To urr
If Cells(z, 1) <> Cells(z - 1, 1) Then
find1 = find1 + 1
find2 = find1 Mod 2
End If
With Range(Cells(z, 1), Cells(z, urc)).Interior
If find2 = 1 Then
.Pattern = xlSolid
.PatternColorIndex = xlAutomatic
.ThemeColor = xlThemeColorLight2
.TintAndShade = 0.7
.PatternTintAndShade = 0
End If
If find2 = 0 Then
.ColorIndex = xlNone
End If
End With
Next z
End Sub
Gehen Sie nun im VisualBasic-Editor via Datei zu «Schliessen und zurück zu Microsoft Excel». Auf den ersten Blick erscheint noch keine farbige Markierung. Sobald Sie aber in der Spalte A eine Eingabe vornehmen, färbt es die Zeilen wunschgemäss ein: Immer wenn ein neuer Name kommt, wird die Farbe gewechselt.
Die Auswahl der Farbe kommt so zustande: Excel verwendet bei «.ThemeColor» eine der Farben aus dem aktuell verwendeten Farbschema. Etwa in Excel 2007 unter Seitenlayout/Farben die erste Farbe aus dem standardmässigen Schema «Larissa». Es ist in unserem Beispiel ein helleres Blau, weil dieses bei «.TintAndShade» einen Wert von 0.7 trägt. Eine 1 (plus 1) ist hier die hellste Variante (also weiss) und eine -1 wäre die dunkelste (schwarz), eine 0 (Null) wäre neutral. Alles dazwischen sind verschiedene Schattierungen. Wenn Sie das Farbschema ändern, ändern sich auch die von Excel verwendete Farbe. (PCtipp-Forum)
19.09.2014