Abwechselnde Farbgruppen von Zeilen in Excel
Frage
Ich habe eine solche Excel-Tabelle
id | data for id | more data for id id | data for id id | data for id | more data for id | even more data for id id | data for id | more data for id id | data for id id | data for id | more data for id
Jetzt möchte ich die Daten einer ID gruppieren, indem ich die Hintergrundfarbe der Zeilen abwechsele
var color = white for each row if the first cell is not empty and color is white set color to green if the first cell is not empty and color is green set color to white set background of row to color
Kann mir jemand mit einem Makro oder VBA-Code helfen?
Danke
Lösung
Ich denke, das erfüllt das, wonach Sie suchen.Ändert die Farbe, wenn die Zelle in Spalte A den Wert ändert.Wird ausgeführt, bis in Spalte B kein Wert mehr vorhanden ist.
Public Sub HighLightRows()
Dim i As Integer
i = 1
Dim c As Integer
c = 3 'red
Do While (Cells(i, 2) <> "")
If (Cells(i, 1) <> "") Then 'check for new ID
If c = 3 Then
c = 4 'green
Else
c = 3 'red
End If
End If
Rows(Trim(Str(i)) + ":" + Trim(Str(i))).Interior.ColorIndex = c
i = i + 1
Loop
End Sub
Andere Tipps
Ich verwende diese Formel, um die Eingabe für eine bedingte Formatierung zu erhalten:
=IF(B2=B1,E1,1-E1)) [content of cell E2]
Dabei enthält Spalte B das Element, das gruppiert werden muss, und E ist eine Hilfsspalte.Jedes Mal, wenn die obere Zelle (in diesem Fall B1) mit der aktuellen Zelle (B2) übereinstimmt, wird der Inhalt der oberen Zeile aus Spalte E zurückgegeben.Andernfalls wird 1 minus diesem Inhalt zurückgegeben (d. h. das Ergebnis ist 0 oder 1, abhängig vom Wert der oberen Zelle).
Basierend auf der Antwort von Jason Z, die meinen Tests zufolge falsch zu sein scheint (zumindest unter Excel 2010), ist hier ein Code, der zufällig für mich funktioniert:
Public Sub HighLightRows()
Dim i As Integer
i = 2 'start at 2, cause there's nothing to compare the first row with
Dim c As Integer
c = 2 'Color 1. Check http://dmcritchie.mvps.org/excel/colors.htm for color indexes
Do While (Cells(i, 1) <> "")
If (Cells(i, 1) <> Cells(i - 1, 1)) Then 'check for different value in cell A (index=1)
If c = 2 Then
c = 34 'color 2
Else
c = 2 'color 1
End If
End If
Rows(Trim(Str(i)) + ":" + Trim(Str(i))).Interior.ColorIndex = c
i = i + 1
Loop
End Sub
Muss man Code verwenden?Wenn die Tabelle statisch ist, warum nutzen Sie dann nicht die Funktion zur automatischen Formatierung?
Es kann auch hilfreich sein, wenn Sie Zellen derselben Daten „zusammenführen“.Wenn Sie also die Zellen von „Daten, mehr Daten, noch mehr Daten“ in einer Zelle zusammenführen, können Sie den klassischen Fall „Jede Zeile ist eine Zeile“ möglicherweise einfacher bewältigen.
Ich durchstöbere dies und habe versucht, es für meinen Gebrauch zu modifizieren.Ich habe Bestellnummern in Spalte a und einige Bestellungen nehmen mehrere Zeilen ein.Ich möchte nur Weiß und Grau je nach Bestellnummer abwechseln.Was ich hier habe, wechselt jede Zeile.
ChangeBackgroundColor()
' ChangeBackgroundColor Macro
'
' Keyboard Shortcut: Ctrl+Shift+B
Dim a As Integer
a = 1
Dim c As Integer
c = 15 'gray
Do While (Cells(a, 2) <> "")
If (Cells(a, 1) <> "") Then 'check for new ID
If c = 15 Then
c = 2 'white
Else
c = 15 'gray
End If
End If
Rows(Trim(Str(a)) + ":" + Trim(Str(a))).Interior.ColorIndex = c
a = a + 1
Loop
End Sub
Wenn Sie unter dem Menüpunkt „Format“ die Menüoption „Bedingte Formatierung“ auswählen, wird ein Dialogfeld angezeigt, in dem Sie eine Logik erstellen können, die auf diese Zelle angewendet werden soll.
Ihre Logik ist möglicherweise nicht dieselbe wie Ihr Code oben, sie sieht möglicherweise eher so aus:
Zellwert ist | gleich | | und | Weiß ....Wählen Sie dann die Farbe.
Sie können auf die Schaltfläche „Hinzufügen“ klicken und die Bedingung so groß machen, wie Sie benötigen.
Ich habe Bartdudes Antwort für Hellgrau/Weiß basierend auf einer konfigurierbaren Spalte unter Verwendung von RGB-Werten überarbeitet.Eine boolesche Variable wird umgedreht, wenn sich der Wert ändert, und diese wird verwendet, um das Farbarray über die ganzzahligen Werte von True und False zu indizieren.Funktioniert bei mir ab 2010.Rufen Sie den Sub mit der Blattnummer an.
Public Sub HighLightRows(intSheet As Integer)
Dim intRow As Integer: intRow = 2 ' start at 2, cause there's nothing to compare the first row with
Dim intCol As Integer: intCol = 1 ' define the column with changing values
Dim Colr1 As Boolean: Colr1 = True ' Will flip True/False; adding 2 gives 1 or 2
Dim lngColors(2 + True To 2 + False) As Long ' Indexes : 1 and 2
' True = -1, array index 1. False = 0, array index 2.
lngColors(2 + False) = RGB(235, 235, 235) ' lngColors(2) = light grey
lngColors(2 + True) = RGB(255, 255, 255) ' lngColors(1) = white
Do While (Sheets(intSheet).Cells(intRow, 1) <> "")
'check for different value in intCol, flip the boolean if it's different
If (Sheets(intSheet).Cells(intRow, intCol) <> Sheets(intSheet).Cells(intRow - 1, intCol)) Then Colr1 = Not Colr1
Sheets(intSheet).Rows(intRow).Interior.Color = lngColors(2 + Colr1) ' one colour or the other
' Optional : retain borders (these no longer show through when interior colour is changed) by specifically setting them
With Sheets(intSheet).Rows(intRow).Borders
.LineStyle = xlContinuous
.Weight = xlThin
.Color = RGB(220, 220, 220)
End With
intRow = intRow + 1
Loop
End Sub
Optionaler Bonus:Färben Sie für SQL-Daten alle NULL-Werte mit demselben Gelb wie in SSMS
Public Sub HighLightNULLs(intSheet As Integer)
Dim intRow As Integer: intRow = 2 ' start at 2 to avoid the headings
Dim intCol As Integer
Dim lngColor As Long: lngColor = RGB(255, 255, 225) ' pale yellow
For intRow = intRow To Sheets(intSheet).UsedRange.Rows.Count
For intCol = 1 To Sheets(intSheet).UsedRange.Columns.Count
If Sheets(intSheet).Cells(intRow, intCol) = "NULL" Then Sheets(intSheet).Cells(intRow, intCol).Interior.Color = lngColor
Next intCol
Next intRow
End Sub
Ich verwende diese Regel in Excel, um abwechselnde Zeilen zu formatieren:
- Markieren Sie die Zeilen, auf die Sie einen alternierenden Stil anwenden möchten.
- Klicken Sie auf „Bedingte Formatierung“ -> Neue Regel
- Wählen Sie „Eine Formel verwenden, um zu bestimmen, welche Zellen formatiert werden sollen“ (letzter Eintrag)
- Geben Sie die Regel im Formatwert ein:
=MOD(ROW(),2)=0
- Klicken Sie auf „Formatieren“ und nehmen Sie die erforderliche Formatierung für abwechselnde Zeilen vor, z.Füllen -> Farbe.
- Drücken Sie OK, drücken Sie OK.
Wenn Sie stattdessen abwechselnde Spalten formatieren möchten, verwenden Sie =MOD(COLUMN(),2)=0
Voila!