Zellenschattierung automatisieren

Hallo Experten,
ich habe schon einige super Tips hier erhalten und hoffe auf einen weiteren:
Ich habe eine Tabelle, in der unterschiedlich viele Zeilen jeweils zusammengehören (d.h. der Wert in Spalte 1 ist jeweils gleich; mal gibt es den Wert nur 1x, kann aber auch bis 8x oder 10x gehen).
Ich möchte jetzt folgendes erreichen:
Die zusammengehörenden Zeilen sollen eine Zellschattierung erhalten, die immer bei Änderung des Wertes in Spalte 1 abwechselt, so dass das Ganze dann aussieht wie Tabellenpapier. Schwierigkeit: Das Kriterium in der Spalte 1 ist willkürlich, kann also m.E. nicht für eine bedingte Formatierung herangezogen werden. Es geht einfach nur um die abwechselnde Schattierung so bald der Wert in Spalte 1 sich ändert.

Für Fortgeschrittene:

Im Idealfall sollte sich diese abwechselnde Schattierung anpassen, wenn die Tabelle umsortiert wird oder neue Zeilen eingefügt werden

Ich hoffe, ich habe das Problem halbwegs verständlich geschildert und irgendeiner versteht mich.

Vielen Dank
Ralf

Hallo Ralf!

Du kannst für die bedingte Formatierung auch eine Formel als Kriterium angeben. Dazu musst du einfach statt Zellwert ist den Punkt Formel ist anwählen. Dann gibst du die Formel =$E7=F7 ein. Die erste Zelle steht dabei für das Kriterium. Sonst funktioniert alles wie gehabt. (also zuerst den zu formatierenden Bereich markieren!)

Gruß Alex

P.S.: Wenn du Fragen hast, schreibe einfach zurück!

Die zusammengehörenden Zeilen sollen eine Zellschattierung
erhalten, die immer bei Änderung des Wertes in Spalte 1
abwechselt, so dass das Ganze dann aussieht wie
Tabellenpapier. Schwierigkeit: Das Kriterium in der Spalte 1

Hi Ralf,
Rechtsklick auf den Tabellenreiter, Code anzeigen, Code reinkopieren, ggfs die 2 farbwerte ändern, Editor schliessen.

Private Sub Worksheet\_Change(ByVal Target As Range)
Dim Status as Boolean, n as Long
Farbe = Array(3, 34)
Status = True
n = 2
While Cells(n, 1)
 If Cells(n, 1) Cells(n - 1, 1) Then Status = Not Status
 Rows(n).Interior.ColorIndex = Farbe(Status \* -1)
 n = n + 1
Wend
End Sub

Gruß
Reinhard

Hi Reinhard,
vielen Dank für den Tip,
hilf aber doch bitte einem Unwissenden, wo genau dieser Code rein muss (Tabellenreiter?)
thx
Ralf

Hi Reinhard,
vielen Dank für den Tip,
hilf aber doch bitte einem Unwissenden, wo genau dieser Code
rein muss (Tabellenreiter?)
thx

Hi Ralf,
warum auch immer, Reiter bzw Register wird das Tabellenblatt (bzw der tabellenblattname) genannt. In Excel siehst du ja unten die Tabellenblattnamen stehen, das ist damit gemeint. Im Kontextmenu (=Rechtsklick) wo du Blätter löschen verschieben usw kannst, steht auch „Code anzeigen“
Gruß
Reinhard

Hallo Reinhard, Hallo Ralf,

die Lösung von Renhard reagiert (zumindest unter EXCEL97) „nur“ auf Wertänderungen innerhalb der Tabelle. Bei Sortierungen erfolgt nicht automatisch auch eine Anpassung der Farbformatierung der Zeilen. Deshalb meine Ergänzung, die zusätzlich auch eine manuelle Farbformatierung der Zeilen per Makrobutton ermöglicht. Außerdem sind Variablen eingebaut mit denen festgelegt wird:
die Zeile ab der die Formatierung beginnen soll
die Spalte deren Werte verglichen werden sollen
die erste und letzte Spalte die in die Formatierung einbezogen werden soll
Dadurch läßt sich das Ganze leicht an andere Tabellen anpassen.
Wie bei Reinhards Lösung wird der gesamte Code in VBA unter der Tabelle abgelegt.

Private Sub CommandButton1\_Click()
 Call Farbformatierung(Cells())
End Sub

Private Sub Worksheet\_Change(ByVal Target As Range)
 Call Farbformatierung(Target)
End Sub

Sub Farbformatierung(Zellen As Range)
 Dim Status As Boolean, n As Long
 Farbe = Array(3, 34) 'IndexNr. der Farben 3 = Rot, 34 = helles Türkis, Werte zwischen 1 und 56 möglich
 Status = True
 SpalteWert = 3 'Spalte, deren Werte verglichen werden sollen
 Startzeile = 2 'Zeile ab der formatiert werden soll
 SpalteErste = 1 ' 1. Spalte, die in Formatierung einbezogen werden soll
 SpalteLetzte = 6 ' Letzte Spalte, die in Formatierung einbezogen werden soll
 n = Startzeile
 While Cells(n, SpalteWert)
 If Cells(n, SpalteWert) Cells(n - 1, SpalteWert) Then Status = Not Status
 Range(Cells(n, SpalteErste), Cells(n, SpalteLetzte)).Interior.ColorIndex = Farbe(Status \* -1)
 n = n + 1
 Wend
End Sub

Gruß
Franz

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hallo Franz und Reinhard,

es läuft!

Vielen Dank