2010-11-10 40 views
26

Desidero ombreggiare intere righe in Excel in base al valore di una cella. Per esempio dire che ho le righe sottostanti:Excel: ombreggia l'intera riga in base al cambiamento di valore

**File No** 
1122 
1122 
1144 
1155 
1155 
1155 
1166 

Vorrei le prime due righe (dove il valore del file # è 1122) deve essere ombreggiata in colore 1, la riga successiva (dove il valore della il file # è 1144) da ombreggiare a colori 2, le successive 3 righe (dove il valore del file # è 1155) da ombreggiare il colore 1, la riga successiva (dove il valore del file # è 1166) deve essere ombreggiata colore 2

risposta

4

Se si utilizza MS Excel 2007, è possibile utilizzare conditional formatting nella scheda Home come mostrato nella schermata seguente. Potresti utilizzare l'opzione predefinita color scales come ho fatto qui oppure puoi andare avanti e creare uno new rule basato sul tuo set di dati. Conditional Formatting

4

Utilizzare Conditional Formatting.

Nella sua forma più semplice, stai dicendo "per questa cella, se il valore è X, quindi applica il formato foo". Tuttavia, se si utilizza il metodo "formula", è possibile selezionare l'intera riga, immettere la formula e il formato associato, quindi utilizzare il copia e incolla (solo formati) per il resto della tabella.

Sei limitato a solo 3 regole in Excel 2003 o precedenti, quindi potresti voler definire un modello per i colori piuttosto che utilizzare valori non elaborati. Qualcosa del genere dovrebbe funzionare però:

alt text

+0

Anche se questo risponde correttamente alla domanda come formulato, ho il sospetto che il richiedente originale cercasse di ottenere strisce di colore alternate basate su un cambio di dati, a volte chiamati strisce zebrate. Per questo, penso che la risposta di Mike Bain sia migliore. –

+0

No, non lo stava chiedendo letteralmente. Letteralmente chiedeva che il colore delle righe fosse basato su un valore nella cella. Ti suggerisco di leggere di nuovo la domanda. –

45

Che cosa si può fare è creare una nuova colonna sopra sul lato destro del foglio di calcolo che verranno utilizzate per calcolare un valore che si può basare la vostra ombreggiatura.

Diciamo che la vostra nuova colonna è la colonna D, e il valore che si desidera guardare è nella colonna A partire dal fila 2.

Nella cella D2 messo: = MOD (IF (ROW() = 2, 0, IF (A2 = A1, D1, D1 + 1)), 2)

Riempi questo pulsante per quanto necessario (quindi nascondi la colonna se lo desideri).

Ora evidenzia l'intero set di dati: questa selezione di celle sarà quella che verrà visualizzata in grigio nel passaggio successivo.

Dalla scheda casa, clicca Formattazione condizionale, quindi Nuova regola.

Selezionare Utilizzare una formula per determinare quali celle devono essere formattate.

In "valori formato in cui questa formula è vera" messo = $ D2 = 1

fare clic sul formato tasto , fare clic sul Fill scheda, quindi scegliere il colore che si desidera ombra con.

Esempi qui:

+0

Penso che questa sia la risposta che dovrebbe essere contrassegnata come corretta poichè l'OP ha detto che volevano distinguere le righe anche se il loro esempio sembrava essere colonne – JsonStatham

+2

Questo è eccellente. In Excel per Mac versione 15.27, devo selezionare Stile = Classico dopo aver selezionato Nuova regola .... – battey

1

ho trovato una semplice soluzione al bandaggio dal contenuto in Pearson Software Consulting: Diciamo l'intestazione è da A1 a B1, dati tabella è da A2 a B5, la cella di controllo è nella colonna A

  1. Creare una nuova colonna, C
  2. Dapprima prima fila al colore rendere la formula = true nella cella C2
  3. Nella seconda riga rendere la formula = IF (A3 = A2, C2, NOT (C2))
  4. Riempire la colonna giù all'ultima riga
  5. Selezionare l'intervallo di dati
  6. Selezionare la formattazione condizionale, scegliete utilizzare una formula ... e mettere = $ C2 come la formula
0

ho dovuto fare qualcosa di simile per i miei utenti , con una piccola variante che vogliono avere un numero progressivo che raggruppa gli articoli simili. Ho pensato di condividerlo qui.

  • fare una nuova colonna A
  • Supponendo che la prima riga di dati è in riga 2 (riga 1 essendo di intestazione), messo 1 in A2
  • Assumendo che il file non si trova nella colonna B, nella seconda riga (in questo caso A3) rendere la formula =IF(B3=B2,A2,A2+1)
  • Fill/cell copia-incolla A3 lungo la colonna per l'ultima riga (attenzione a non copiare A2 per caso; che si popolano tutte le cellule con 1)
  • Select l'intervallo di dati
  • Nel casa nastro selezionare Formattazione condizionale ->Nuova regola
  • Scegli utilizzare una formula per determinare le celle da formattare
  • Nella cella della formula, ha messo =MOD($A1, 2)=1 come la formula
  • Clicca Formato, selezionare la scheda Fill
  • Selezionare il colore di sfondo desiderato, quindi fare clic su OK
  • Fare clic su OK

enter image description here

4

Questo mi ha lasciato perplessi per le età. Non mi piace l'idea di creare una riga/colonna extra (irrilevante) solo per calcolare la formattazione. Infine si avvicinò con la seguente regola:

=INDIRECT("A"&ROW())<>INDIRECT("A"&(ROW()-1)) 

Questo crea il riferimento A2<>A1 per la riga 2, A3<>A2 per riga 3 ecc Regolare la lettera "A" per essere la colonna che si desidera confrontare

+1

Questo sembra evidenziare solo una variazione di valore e non colori alternativi tra i gruppi. –

0

si potrebbe usare questo formulario per fare il lavoro -> ottenere il CellValue per la riga specifica digitando: = indiretta ("$ A & cellulare()) a seconda di quale colonna che si controlla, è necessario cambiare la $ a

per esempio -> È possibile utilizzare una funzione VBA personalizzata in Background:

Funzione pubblica IstDatum (Zelle) As Boolean IstDatum = False Se IsDate (Zelle) Poi IstDatum = True End Function

ho bisogno di verificare la presenza di una data-entry nella colonna A:

= IstDatum (indirekt ("$ A" & Zeile()))

have a look at the picture:

1

in MS Excel, salvare prima la cartella di lavoro come un file macro Enabled poi andare alla scheda Developper e cliccare su Visual Basic. Copia e incolla questo codice negli oggetti Excel "ThisWorkbook". Sostituisci i 2 valori di G = e C = per il numero della colonna contenente i valori a cui si fa riferimento.

Nel tuo caso, se il numero della colonna denominata "File No" è la prima colonna (vale a dire colonna 1), sostituire G=6 da G=1 e C=6 da C-1. Infine fai clic su Macro, seleziona ed esegui. Ecco! Funziona come un fascino.

Sub color() 
    Dim g As Long 
    Dim c As Integer 
    Dim colorIt As Boolean 

    g = 6 
    c = 6 
    colorIt = True 

    Do While Cells(g, c) <> "" 
     test_value = Cells(g, c) 
     Do While Cells(g, c) = test_value 
      If colorIt Then 
       Cells(g, c).EntireRow.Select 
       Selection.Interior.ColorIndex = 15 
      Else 
       Cells(g, c).EntireRow.Select 
       Selection.Interior.ColorIndex = x1None 
      End If 
      g = g + 1 
     Loop 
     colorIt = Not (colorIt) 
    Loop 
End Sub 
1

come almeno 1 altro collaboratore qui, ho anche è mai piaciuto dover aggiungere una colonna in più "aiuto", che può creare alcuni problemi in varie situazioni. Ho finalmente trovato una soluzione. Esistono un paio di formule diverse che è possibile utilizzare a seconda delle esigenze e di ciò che è nella colonna, se ci sono valori vuoti, ecc. Per la maggior parte delle mie esigenze, sono atterrato utilizzando la seguente formula semplice per la formula CF:

= MOD (fisso (MATR.SOMMA.PRODOTTO (1/COUNTIF (CurrentRange, CurrentRange))), 2) = 0

creo un intervallo denominato chiamato "CurrentRange" utilizzando la seguente formula in cui [foglio] è il foglio su cui i risultati dei dati, [DC] è la colonna con i valori su cui si desidera associare i dati e [FR] è la prima riga in cui si trovano i dati:

= [Foglio]! $ [DC] $ [ FR]: INDIRETTO ("$ [DC] $" & ROW())

Il riferimento del foglio e il riferimento della colonna si baseranno sulla colonna che contiene i valori che si stanno valutando. NOTA: è necessario utilizzare un intervallo denominato nella formula perché genera un errore se si tenta di utilizzare i riferimenti di intervallo direttamente nella formula della regola CF.

Fondamentalmente, la formula funziona valutando per ogni riga il conteggio di tutti i valori univoci per quella riga e sopra alla parte superiore dell'intervallo. Questo valore per ogni riga fornisce essenzialmente un ID univoco crescente per ogni nuovo valore univoco. Quindi utilizza tale valore al posto della funzione Row() all'interno della formula della funzione CF MOD standard per i colori di riga alternati semplici (ad esempio = Mod (Row(), 2) = 0).

Vedere l'esempio seguente che suddivide la formula per mostrare i componenti risultanti nelle colonne per mostrare cosa sta facendo dietro le quinte.

Example Data

In questo esempio, il CurrentRange l'intervallo denominato è definito come:

= Sheet1! $ A $ 2: INDIRETTO ("$ A $" & ROW())

L'ID univoco colonna contiene la seguente parte della formula di formula CF:

= fisso (SUMPRODUCT (1/COUNTIF (CurrentRange, CurrentRange)))

È possibile vedere che, a partire dalla riga 3, il conteggio dei valori univoci da quella riga e sopra nella colonna "Colore" è 2 e rimane 2 in ogni riga successiva fino alla riga 6 quando la formula incontra un terzo valore univoco .

La colonna Banda utilizza il resto della formula facendo riferimento al risultato nella colonna B = MOD (B2,2) per mostrare come ottenere gli 1 e gli 0 che possono quindi essere utilizzati per CF.

Alla fine, il punto è che non sono necessarie le colonne aggiuntive. L'intera formula può essere utilizzata nella regola CF + un intervallo denominato. Per me, questo significa che posso applicare la formula di base in un modello che uso per inserire i dati e non dovermi preoccupare di fare confusione con una colonna in più una volta che i dati sono caduti. Funziona solo per impostazione predefinita. Inoltre, se è necessario tenere conto di spazi vuoti o altre complessità o grandi serie di dati, è possibile utilizzare altre formule più complesse utilizzando le funzioni di frequenza e di corrispondenza.

Spero che questo aiuti qualcun altro a evitare la frustrazione che ho avuto per anni!

0

Odio usare queste formule in-cell e dover compilare una nuova colonna, e alla fine ho imparato abbastanza da fare con la propria macro VBA per ottenere questo effetto.

Questo potrebbe non essere tutto ciò che logicamente diversa da un'altra risposta, ma penso che il codice è un inferno di molto meglio:

Dim Switch As Boolean 
For Each Cell In Range("B2:B" & ActiveSheet.UsedRange.Rows.Count) 
    If Not Cell.Value = Cell.Offset(-1, 0).Value Then Switch = Not (Switch) 
    If Switch Then Range("A" & Cell.Row & ":" & Chr(ActiveSheet.UsedRange.Columns.Count + 64) & Cell.Row).Interior.Pattern = xlNone 
    If Not Switch Then Range("A" & Cell.Row & ":" & Chr(ActiveSheet.UsedRange.Columns.Count + 64) & Cell.Row).Interior.Color = 14869218 
Next 

Il mio codice qui sta per colonna B, assume una riga di intestazione quindi inizia alle 2 e utilizzo il metodo Chr (x + 64) per ottenere le lettere di colonna (che non funzioneranno oltre la colonna Z; non ho ancora trovato un metodo abbastanza semplice per superare questo).

In primo luogo, la variabile booleana si alternerà ogni volta che il valore cambia in uno nuovo (usa Offset per controllare la cella sopra), e per ogni passaggio la riga viene controllata per Vero o Falso e la colora di conseguenza.

Problemi correlati