ich habe eine Liste mit Messpunkten zu unterschiedlichen Artikeln. Da mal mehr und mal weniger Messpunkte zu den Artikeln vorhanden sind, möchte ich gerne zur Verbesserung der Übersichtlichkeit die Zeile irgendwie einfärben.
Also das sich die Farbe wieder ändert wenn B sich ändert.
Gibt es da eine Möglichkeit? Eine manuelle Färbung wäre nur Bedingt eine Lösung, da der Inhalt der Tabelle sich immer mal zwischendurch ändern kann.
14.07.2022, 11:57 (Dieser Beitrag wurde zuletzt bearbeitet: 14.07.2022, 11:57 von Statler.)
Es wäre hilfreich zu wissen ob es eine Begrenzte und festgelegte Menge an Bezeichnungen gibt
Wenn es nur eine begrenzte Anzahl von Bezeichnungen gibt, dann könntest Du z.Bsp. mit der bedingten Formatierung angeben, bei welcher Bezeichnung welche Farbe für die Zeile hinterlegt werden soll. Wenn das aber sehr viele Bezeichnungen sind, ist die Variante nicht sinnvoll.
Event könntest du eine Hilfsspalte eintragen die Prüft ob die Zeile vorher den gleichen Bezeichner hat. Dann würdest du die ersten Zeilen in der Hilfsspalte z.Bsp mit einer 1 versehen, sobald der Bezeichner ein anderer ist als in der Zelle darüber eine 2 usw. Danach wieder eine 1. Das lässt sich relativ einfach über eine Wenn Abfrage realisieren. Und dann wieder bedingte Formatierung. Wenn Hilfspalte / Zelle = 1 dann Farbe 1, wenn 2 dann Farbe 2. Zu guter letzt noch die Hilfsspalte ausblenden.
14.07.2022, 12:43 (Dieser Beitrag wurde zuletzt bearbeitet: 14.07.2022, 12:44 von Klaus-Dieter.)
Hallo Mario,
dazu braucht man keine Hilfsspalte und dergleichen. Die Anzahl der Begriffe spielt auch keine Rolle. Versuche es mal mit diesem Makro, (ist einer meiner Jugendsünden, geht bestimmt einfacher und kürzer).
Code:
Sub färben2() ' färbt Tabellenzeilen abhängig vom Inhalt einer Spalte ein ' Klaus-Dieter Oppermann z = 2 ' Startzeile für Schleife(hier 2) m = 0 ' Farbe für 1. Gruppe (0 = keine, 1 = grau) Do While Cells(z, 1) <> "" ' Bedingung für Schleife (laufe solange Zelle ' einen Inhalt hat) If Cells(z, 1) <> Cells(z - 1, 1) Then ' Wenn Zelle <> vorherige ... m = m + 1 ' ... Schleifenzähler um 1 erhöhen ' m gerade Zahl? mark = Int(m / 2) ' ... Variable durch 2 teilen ... mmark = mark * 2 ' ... und mit zwei multiplizieren End If ' Ende Bedingung ' Zellen färben, wenn m gerade Zahl If mmark = m Then ' wenn Variable = Schleifenzähler ... Range("A" & z, "F" & z).Select ' ... Zellen selektieren With Selection.Interior ' ... Hintergrund füllen .ColorIndex = 15 ' ... Füllfarbe grau .Pattern = xlSolid ' ... durchgehende Fläche End With ' Ende färben End If ' Ende färben z = z + 1 ' Schleifenzähler Loop ' Wendepunkt für Schleife End Sub ' Ende des Makros
Viele Grüße Klaus-Dieter Der Erfolg hat viele Väter, der Misserfolg ist ein Waisenkind Richard Cobden
durch die sofort im Code sichtbaren ausführlichen Step-by-step-Kommentare erst einmal etwas überrascht und abgelenkt, habe ich dann Deine Einleitung erst als zweites gelesen und das Stichwort Jugendsünde entdeckt. So sauber kommentierten Code findet man in den Foren nur selten. Klasse und Danke!
Schöne Grüße
d`r Bastler von den VBAsteleien.de Win 10 & 11, Office 2019 & 2021 & macOS X.15, XL 2019
funktioniert so wie ich wollte, nur musste ich doch die EDV Nummer in Spalte A verlegen, Oder kann man in dem Code einstellen das er Spalte B benutzen soll?
14.07.2022, 13:56 (Dieser Beitrag wurde zuletzt bearbeitet: 14.07.2022, 13:57 von Klaus-Dieter.)
Hallo Mario,
Zitat:funktioniert so wie ich wollte, nur musste ich doch die EDV Nummer in Spalte A verlegen, Oder kann man in dem Code einstellen das er Spalte B benutzen soll?
dazu brauchst du nur die Spaltenbezüge (rot gekennzeichnet) von 1 auf 2 ändern. Cells(Z, 1)
@ d'r Bastler: Danke für die Blumen, wenn es die Zeit erlaubt, mache ich das öfter. (Hilfe zur Selbsthilfe)
b
Viele Grüße Klaus-Dieter Der Erfolg hat viele Väter, der Misserfolg ist ein Waisenkind Richard Cobden
Sub färben3() ' färbt Tabellenzeilen abhängig vom Inhalt einer Spalte ein ' Klaus-Dieter Oppermann
' Variablen deklarieren Dim lngZeile As Long ' Zähler für Schleife Dim mark As Integer ' Zähler zum Umfärben Dim mark2 As Integer ' Kennung für Farbwechsel Dim farb As Variant ' Farbe definieren For lngZeile = 2 To Range("A1").End(xlDown).Row ' Laufe von Zeile 2 bis Listenende If Cells(lngZeile, 1) <> Cells(lngZeile - 1, 1) Then ' wenn neuer Wert, ... mark = mark + 1 ' ... Zähler plus 1 mark2 = mark Mod 2 ' ... Nullwert erzeugen End If ' Ende Auswahl If mark2 = 0 Then farb = 10213316 Else farb = xlNone ' Farbe für Zeile(n) festlegen Range("A" & lngZeile, "F" & lngZeile).Interior.Color = farb ' Zeile färben Next lngZeile ' nächste Zeile End Sub
Viele Grüße Klaus-Dieter Der Erfolg hat viele Väter, der Misserfolg ist ein Waisenkind Richard Cobden