Alternata da colorare per i gruppi di righe in Excel
Domanda
Ho un Foglio di calcolo di Excel come questo
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
Ora voglio raggruppare i dati di una carta di identità alternando il colore di sfondo delle righe
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
Qualcuno mi può aiutare con una macro o codice VBA
Grazie
Soluzione
Penso che questo non quello che stai cercando.Flip colore quando la cella nella colonna a cambiamenti di valore.Funziona fino a quando non vi è alcun valore nella colonna 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
Altri suggerimenti
Io uso questa formula per ottenere l'ingresso per una formattazione condizionale:
=IF(B2=B1,E1,1-E1)) [content of cell E2]
Dove la colonna B contiene l'elemento che deve essere raggruppati e E è un ausiliario colonna.Ogni volta che la cella superiore (B1 in questo caso) è uguale a quello attuale (B2), la riga superiore del contenuto da colonna E viene restituito.In caso contrario, verrà restituito 1 meno che il contenuto (che è, il outupt sarà 0 o 1, a seconda del valore della cella superiore).
Basato su Jason Z risposta, che dai test sembra essere sbagliato (almeno su Excel 2010), ecco un po ' di codice che succede a lavorare per me :
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
È necessario utilizzare il codice?se la tabella è statico, quindi perché non utilizzare l'auto capacità di formattazione?
Si può anche aiutare se si "unisci celle" dei dati stessi.quindi, forse, se si uniscono le cellule di "dati ulteriori dati, anche altri dati" in una cella, è possibile gestire più facilmente con il classico "ogni riga è una riga" del caso.
Sto barrowing questo e ho cercato di modificarlo per il mio uso.Ho ordine di numeri in colonna a e alcuni ordini prendere più righe.Voglio solo alternano il bianco e il grigio per il numero di ordine.Quello che ho qui alterna ogni riga.
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
Se si seleziona la Formattazione Condizionale opzione di menu sotto la voce di menu Formato, vi sarà data una finestra di dialogo che consente di creare un po ' di logica si applica al cellulare.
La tua logica non potrebbe essere lo stesso codice di cui sopra, si potrebbe guardare più come:
Valore della cella è uguale a | | e | Nero ....Quindi scegliere il colore.
È possibile selezionare il pulsante aggiungi e rendere la condizione di grandi dimensioni di cui hai bisogno.
Ho rielaborato Bartdude la risposta, per il Grigio chiaro / Bianco, basato su un configurabili colonna, utilizzando i valori RGB.Un valore booleano var è capovolto quando cambia il valore e questo viene utilizzato per indicizzare i colori array tramite il numero intero valori True e False.Per me funziona al 2010.Chiamare il sub con il numero del foglio.
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
Bonus opzionale :per dati SQL, con qualsiasi colore di valori NULL con la stessa giallo utilizzato in sql server management studio
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
Io uso questa regola in Excel per formattare a righe alternate:
- Evidenziare le righe che si desidera applicare un'alternanza di stile.
- Premere Il Tasto "Formattazione Condizionale" -> Nuova Regola
- Selezionare "Utilizza una formula per determinare le celle da formattare" (ultima voce)
- Inserire la regola in formato valore:
=MOD(ROW(),2)=0
- Premere il tasto "Formato", rendono necessaria la formattazione di righe alternate, ad esempio.Compila -> Colore.
- Premere OK, quindi Premere OK.
Se si desidera formattare alternati a colonne, invece, utilizzare =MOD(COLUMN(),2)=0
Voilà!