2008-08-25 18 views
10

Ich habe eine Excel-Tabelle wie dieseWechselnde Gruppen von Zeilen in Excel Färbung

 
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 habe ich zu einer Gruppe durch die Daten einer ID will

die Hintergrundfarbe der Zeilen abwechselnd
 
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 

Can jemand mir helfen, mit einem Makro oder einem VBA-Code

Dank

Antwort

4

Ich denke, das macht das, wonach Sie suchen. Spiegelt die Farbe, wenn die Zelle in Spalte A den Wert ändert. Läuft bis kein Wert in Spalte B

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 
+0

Ich habe missverstanden, aber von wo ich es sehe und von meinen Tests, schaltet die Farbe von Zeile zu Zeile, solange Spalte A und B sind nicht leer ... also die Frage nicht beantworten. Aber ich habe vielleicht etwas verpasst ... –

0

Wenn Sie die Bedingung auswählen Unter der Menüoption Formatierung unter dem Menübefehl Format erhalten Sie ein Dialogfeld, in dem Sie eine Logik erstellen können, die auf diese Zelle angewendet wird.

Ihre Logik ist vielleicht nicht das gleiche wie Ihr Code oben, es könnte mehr wie folgt aussehen:

Zellwert ist | gleich | | und | Weiß .... Wählen Sie dann die Farbe.

Sie können die Hinzufügen-Schaltfläche auswählen und die Bedingung so groß wie Sie benötigen.

1

Müssen Sie Code verwenden? Wenn die Tabelle statisch ist, warum nicht die automatische Formatierung verwenden?

enter image description here

Es kann auch helfen, wenn Sie „Zellen verbinden“ der gleichen Daten. Wenn Sie also die Zellen der "Daten, mehr Daten, noch mehr Daten" in eine Zelle zusammenführen, können Sie leichter mit dem klassischen Fall "Jede Zeile ist eine Zeile" umgehen.

+0

Das was ich brauche, aber nicht weiß, wie dies zu tun ist :) Basis auf der Erklärung zur Verfügung gestellt –

33

Ich benutze diese Formel, um den Eingang für eine bedingte Formatierung zu erhalten:

=IF(B2=B1,E1,1-E1)) [content of cell E2] 

Wo Spalte B das Element enthält, die gruppiert werden muss und E ist eine Hilfssäule. Jedes Mal, wenn die obere Zelle (B1 in diesem Fall) die gleiche wie die aktuelle Zelle (B2) ist, wird der Inhalt der oberen Zeile aus Spalte E zurückgegeben. Andernfalls wird 1 minus dem Inhalt zurückgegeben (dh der Ausgang ist 0 oder 1, abhängig vom Wert der oberen Zelle).

enter image description here

enter image description here

enter image description here

+6

Große Antwort. Als Alternative zur MOD-Funktion können Sie '1 - E1' verwenden. Also volle Formel ist '= IF (B2 = B1, E1,1-E1)' – Kasaku

+3

In meinem Fall kann ich Semikolon (;) nicht in Formel verwenden, nur Komma (,) ist akzeptabel, um Excel. Ich verwende MS Excel v 14.0.7106.5003 32-Bit. – rockXrock

+1

Kann die Verwendung einer zusätzlichen Säule vermieden werden? –

1

Basierend auf Jason Z Antwort, die von meinen Tests scheint falsch zu sein (zumindest auf Excel 2010), hier ist ein Stück Code, der zur Arbeit geschieht für mich:

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 
+0

Ich antwortete ursprünglich auf die Frage in '08, so dass es mich überhaupt nicht überraschen würde, wenn Office 2010 etwas kaputt gemacht hätte Office 2007. –

1

bin barrowing ich dies und versucht, es für meine Verwendung zu ändern. Ich habe Bestellnummern in Spalte a und einige Bestellungen nehmen mehrere Zeilen. Ich möchte nur die weiße und graue pro Bestellnummer wechseln. Was ich hier habe, wechselt jede Zeile ab.

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

0

Ich habe Bartdude Antwort, für Hellgrau/Weiß auf der Basis einer konfigurierbaren Spalte überarbeitet, RGB-Werte verwenden. Eine boolesche Variable wird umgedreht, wenn sich der Wert ändert, und dies wird verwendet, um das Farben-Array über die Ganzzahlwerte von Wahr und Falsch zu indizieren. Arbeiten für mich am 2010. Rufen Sie das Sub mit der Blattnummer auf.

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 

Optional Bonus: für SQL-Daten Farbe, jede NULL-Werte mit der gleichen gelb in SSMS verwendete

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 
0

ich diese Regel in Excel verwenden abwechselnden Reihen zu formatieren:

  1. Markieren Sie die Zeilen, auf die Sie einen alternierenden Stil anwenden möchten.
  2. Press "Bedingte Formatierung" -> Neue Regel
  3. Select "eine Formel verwenden, um die Zellen zu formatieren, zu bestimmen" (letzter Eintrag)
  4. eingeben Regel im Format Wert: =MOD(ROW(),2)=0
  5. Press "Format" , machen Sie die erforderliche Formatierung für alternierende Zeilen, z. Füllen -> Farbe.
  6. Drücken Sie OK, und drücken Sie OK.

Wenn Sie stattdessen abwechselnd Spalten formatieren möchten, verwenden Sie =MOD(COLUMN(),2)=0

Voila!

+0

Hallo du antwortest alternative Zeile Farbe, die Fragen wollen Gruppe von Daten nicht now .. – ozmike