Come posso impostare la formattazione condizionale su una particolare cella che dipende dal valore di un'altra cella?


69

Nel mio esempio vorrei formattare condizionalmente le celle della colonna B. Quelli contrassegnati con x devono essere formattati in base al valore nella colonna A (nell'esempio il valore è 1):

A | B
1 | x
2 | 
3 | 
1 | x
1 | x
4 | 
8 |

// x can be any value and is here merely to mark the cell that should be formatted

NOTA IMPORTANTE 2014 : la formattazione condizionale basata su una formula che può includere altre celle è ora possibile in Fogli Google e funziona in modo molto simile a come funzionano i fogli di calcolo Excel. Questa risposta spiega il suo utilizzo.


3
Da quando hai aggiunto quella nota del 2014, considera anche di spostare il segno di spunta su una risposta che descriva l'approccio moderno.

Risposte:


50

La formattazione condizionale complessa può essere ottenuta in Fogli di lavoro Google utilizzando Google Apps Script. Ad esempio, potresti scrivere una funzione che modifica il colore di sfondo di un'intera riga in base al valore in una delle sue celle, cosa che non credo sia possibile con il menu "Cambia colore con regole". Probabilmente vorrai impostare i trigger per questa funzione come "On Edit", "On Open" e "On Form Submit".

Documentazione per la funzione setBackgroundRGB ()

AGGIORNAMENTO: ecco un esempio di script di Google Apps per modificare il colore di sfondo di un'intera riga in base al valore nella colonna A. Se il valore è positivo, usa il verde. Se vuoto, bianco. Altrimenti, rosso. Vedi i risultati in questo foglio di calcolo pubblico di Google . (Devi eseguire l'accesso per eseguire lo script, ma senza accedere puoi comunque vedere i risultati).

function colorAll() {
  var sheet = SpreadsheetApp.getActiveSheet();
  var startRow = 2;
  var endRow = sheet.getLastRow();

  for (var r = startRow; r <= endRow; r++) {
    colorRow(r);
  }
}

function colorRow(r){
  var sheet = SpreadsheetApp.getActiveSheet();
  var dataRange = sheet.getRange(r, 1, 1, 3);

  var data = dataRange.getValues();
  var row = data[0];

  if(row[0] === ""){
    dataRange.setBackgroundRGB(255, 255, 255);
  }else if(row[0] > 0){
    dataRange.setBackgroundRGB(192, 255, 192);
  }else{
    dataRange.setBackgroundRGB(255, 192, 192);
  }

  SpreadsheetApp.flush(); 
}

function onEdit(event)
{
  var r = event.source.getActiveRange().getRowIndex();
  if (r >= 2) {
    colorRow(r);
  }
}

function onOpen(){
  colorAll();
}


Ho ricevuto un errore sulla riga 13: var dataRange = sheet.getRange (r, 1, 1, 3); Se volessi usare questo script per colorare una riga in base a un nome specifico (ad esempio David), come lo cambierei. E probabilmente cambierei il carattere anziché lo sfondo: setFontColor Inoltre, come posso eseguire lo script sul mio foglio di calcolo? Grazie

2
Il collegamento all'esempio non è più valido. Come USI questo script una volta creato? Ciò che manca a questa risposta.
Daniel Williams,

3
Ora esiste un'opzione più semplice per i casi d'uso più comuni, descritti nella mia risposta di seguito.
Sam Brightman,

1
Purtroppo il collegamento al foglio di calcolo di Google è interrotto. Sarebbe bello avere una breve descrizione su come usare / attivare gli script. Tuttavia ottima risposta che funziona. :)
brimborium,

19

I nuovi Fogli Google ti consentono di farlo, come descritto qui . Devi prima abilitare i nuovi fogli di calcolo nelle impostazioni del tuo driver Google come descritto nell'articolo. Quindi puoi selezionare "La formula personalizzata è" dalle opzioni di formattazione condizionale e inserire qualsiasi formula (non dimenticare di aggiungere il =prefisso!). I riferimenti di cella senza $prefissi vengono regolati automaticamente quando applicati agli intervalli come previsto.

Sembra che manchi il supporto per la migrazione dal vecchio al nuovo: si applica solo ai nuovi fogli e ho scoperto che solo i valori potevano essere copiati dall'uno all'altro. La copia di un intero foglio può essere un'opzione.


1
Grazie per averlo segnalato. Funziona davvero esattamente come lo voglio io.
Robert Koritnik,

Al momento, la maggior parte dei vecchi fogli di calcolo sono stati migrati nei nuovi Fogli Google, quindi la nota sul supporto per la migrazione è obsoleta.
Rubén,

2

Ho scritto questa app Web, Color Code + , con Apps-Script, per coprire la maggior parte delle esigenze di formattazione condizionale di base. Gettare in alcune regole e sarà sputare codice che è possibile incollare nel foglio di calcolo, in StrumentiEditor Script ... . ( Aiuto thread sui forum di Google.)


1

Le regole del formato condizionale di Fogli Google si presentano così se si desidera formattare in modo condizionale con uno sfondo rosso se la somma in due celle è diversa rispetto alla terza cella:

Regole del formato condizionale di Fogli Google con colore singolo e formula personalizzata


0

Formattazione condizionale - formula personalizzata

range 2:227

= if($i:$i = "Duplicate",True,False)

selezionare il colore che si desidera evidenziare nella riga.


0

(Febbraio 2017) Come menzionato in un'altra risposta, Fogli Google ora consente agli utenti di aggiungere la formattazione condizionale direttamente dall'interfaccia utente, che si tratti di un desktop / laptop, dispositivi Android o iOS. Tuttavia, il resto di questa risposta è principalmente per gli sviluppatori perché puoi scrivere app "fare" formattazione condizionale.

Con l'API di Google Sheets v4 (e successive), gli sviluppatori possono ora scrivere applicazioni che CRUD regole di formattazione condizionale. Controlla le guida e campioni pagine per maggiori dettagli e le documentazione di riferimento (cercare {add,update,delete}ConditionalFormatRule). La guida presenta questo frammento di Python (presupponendo un ID file SHEET_IDe SHEETScome endpoint del servizio API):

myRange = {
    'sheetId': 0,
    'startRowIndex': 1,
    'endRowIndex': 11,
    'startColumnIndex': 0,
    'endColumnIndex': 4,
}

reqs = [
    {'addConditionalFormatRule': {
        'index': 0,
        'rule': {
            'ranges': [ myRange ],
            'booleanRule': {
                'format': {'textFormat': {'foregroundColor': {'red': 0.8}}}
                'condition': {
                    'type': 'CUSTOM_FORMULA',
                    'values':
                        [{'userEnteredValue': '=GT($D2,median($D$2:$D$11))'}]
                },
            },
        },
    }},
    {'addConditionalFormatRule': {
        'index': 0,
        'rule': {
            'ranges': [ myRange ],
            'booleanRule': {
                'format': {
                    'backgroundColor': {'red': 1, 'green': 0.4, 'blue': 0.4}
                },
                'condition': {
                    'type': 'CUSTOM_FORMULA',
                    'values':
                        [{'userEnteredValue': '=LT($D2,median($D$2:$D$11))'}]
                },
            },
        },
    }},
]

SHEETS.spreadsheets().batchUpdate(spreadsheetId=SHEET_ID,
        body={'requests': reqs}).execute()

Oltre a Python, le API di Google supportano una varietà di lingue , quindi hai opzioni. Comunque, quel codice di esempio formatta un foglio (vedi immagine sotto) in modo tale che quelli più giovani dell'età media siano evidenziati in rosso chiaro mentre quelli sopra la mediana hanno i loro dati colorati in rosso.

Esempio di formattazione condizionale

NOTA: la mia risposta qui è identica a quella su SO per questa domanda tranne per il fatto che ho lasciato cadere il PSA in quanto non è necessario vivere in> 1 posto.


Esistono diverse risposte a questa domanda anche sulla domanda posta in merito. Qual è l '"Un'altra risposta" a cui fa riferimento questa risposta? (: Dall'altro lato, mentre le persone che visitano questo sito potrebbero scrivere codice, penso che la maggior parte di loro lo faccia come "sviluppo dell'utente finale" come nelle funzioni personalizzate / funzioni definite dall'utente. Non sono sicuro che termini come CRUDè noto a molti di loro e potrebbe trovare utili tutti i dettagli aggiuntivi inclusi in questa risposta.
Rubén

0

Per affrontare le specifiche della Q nei "nuovi" fogli, suggerisco di cancellare qualsiasi formattazione condizionale da B: B, selezionando la colonna B e applicando una formula personalizzata è di:

=A1=1

con formattazione di scelta e Done.


0

Quando modifichi la formattazione condizionale, seleziona Formula personalizzata e usa il seguente ...

=if(A1 = 1 , true)

Seleziona i tuoi colori e il gioco è fatto.


-1

Modifica in risposta al chiarimento della domanda:

Nella finestra di Google Spreadsheet, c'è un menu Formato con l'opzione "Cambia colore con regole". Questo è tanto tecnico quanto la formattazione condizionale di Google Spreadsheet. Per quanto ne so, non c'è modo di colorare una cella in base al valore di un'altra: Google non ti consente di inserire formule per altre celle.

A meno che tu non inserisca altri dati nella colonna B, puoi sempre rendere tutta la colonna B uguale alla colonna A, quindi utilizzare l'opzione "Cambia colore con regole" per colorare tutte le celle con il valore di 1 con colori simili, ad es. sfondo rosso e testo rosso quando il valore è 1, sfondo bianco e testo bianco quando non lo è, nascondendo efficacemente il valore nella colonna B. Questo ti darà l'aspetto che desideri.

In Excel, puoi fare quello che vuoi. Usando i tuoi dati come esempio, ho formattato condizionatamente B1 quando questa formula è vera:

=IF(A1=1,true,false)

e quindi trascinato verso il basso la formattazione, che ha evidenziato solo le celle in B dove è un vicino nella colonna A uguale a 1.

Excel può farlo, ma non Google


Risposta originale

Non sono sicuro che puoi farlo in 2 colonne, ma so che puoi farlo in 3:

 A  |  B  |  C
----------------
 1  |  f  |  x

Nella colonna B, puoi utilizzare la IFformula per vedere se una x è stata posizionata nella colonna C appropriata:

=IF(C1="x",A1,"") 

La IFformula ha 3 parti: il test, il valore then e il valore else . Nell'esempio sopra, la formula controlla se c'è un xnella colonna C. Se esiste, inserisce il valore da A1, altrimenti inserisce uno spazio. Non importa se xè maiuscolo o minuscolo.

Dopo aver inserito questa formula nella parte superiore dell'elenco, puoi utilizzare la funzione di trascinamento per trascinare la formula verso il basso per il resto dell'elenco. Con la cella evidenziata in blu, sposta il mouse sul quadrato nell'angolo in basso a destra fino a quando il cursore non diventa un mirino. Quindi fai clic e tieni premuto mentre trascini verso il basso per copiare la formula nelle celle sottostanti.


1
Penso che tu mi abbia frainteso. La domanda riguarda la formattazione condizionale che non posiziona i valori nelle celle.
Robert Koritnik,

1
Al momento questa risposta è obsoleta. Vedere Applica regole di formattazione condizionale - guida di Editor documenti
Rubén
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.