Come evidenziare la cella se il valore è duplicato nella stessa colonna per il foglio di calcolo di Google?


271

Sto cercando la formula per evidenziare la cella di evidenziazione del foglio di calcolo se il valore è duplicato nella stessa colonna

qualcuno può aiutarmi per favore per questa domanda?

Risposte:


474

Prova questo:

  1. Seleziona l'intera colonna
  2. Fai clic su Formato
  3. Fai clic su Formattazione condizionale
  4. Fai clic su Aggiungi un'altra regola (o modifica quella esistente / predefinita)
  5. Imposta formato celle se su:Custom formula is
  6. Imposta il valore su: =countif(A:A,A1)>1(o modifica Ala colonna scelta)
  7. Imposta lo stile di formattazione.
  8. Assicurati che l'intervallo si applichi alla tua colonna (ad es A1:A100.).
  9. Fai clic su Fine

Tutto ciò che è scritto nelle celle A1: A100 verrà controllato e se esiste un duplicato (si verifica più di una volta), verrà colorato.

Per le versioni locali che utilizzano la virgola ( ,) come separatore decimale, il separatore di argomenti è molto probabilmente un punto e virgola ( ;). Cioè, prova: =countif(A:A;A1)>1invece.

Per più colonne, utilizzare countifs.


50
A partire dai nuovi Fogli Google puoi utilizzare la versione a più colonne COUNTIFS. Utilizzare in questo modo se i duplicati sono una combinazione di più colonne=COUNTIFS(A:A; A1; B:B; B1)>1
Christiaan Westerbeek,

6
la fine si ;traduce in un errore "formula non valida" per me. Basta rimuoverlo ha fatto il trucco. Inoltre, fai attenzione: la cella specificata come secondo argomento di countifdovrebbe essere la prima cella dell'intervallo selezionato.
edelans,

11
Funziona. Ma perché? Supponendo che A1 sia un criterio per l'equazione, questa formula non confronta tutte le celle nell'intervallo con A1?
mafonya,

9
@mafonya, la formula personalizzata è una formula generica che deve essere letta come applicabile alla prima cella. Tutti i riferimenti saranno adattati per ogni singola cella nell'intervallo selezionato. Ad esempio, quando si controlla la cella B2 la formula diventerà internamente =countif(B:B,B2)>1. Ciò consente di eseguire una formattazione piuttosto avanzata quando si utilizzano riferimenti di cella assoluti o relativi.
asoundmove,

14
Come nota a margine , se si desidera applicarlo all'intera colonna, è possibile utilizzare la formula = countif (A: A, A: A)> 1 Ciò significa che non si applicherà solo alla cella A1, ma a A4 e A8 se sono uguali (duplicati). Ora, sia A4 che A8 saranno formattati.
BBking

68

Mentre la risposta di zolley è perfettamente giusta per la domanda, ecco una soluzione più generale per qualsiasi intervallo, oltre a una spiegazione:

    =COUNTIF($A$1:$C$50, INDIRECT(ADDRESS(ROW(), COLUMN(), 4))) > 1

Si noti che in questo esempio userò l'intervallo A1:C50. Il primo parametro ( $A$1:$C$50) deve essere sostituito con l'intervallo su cui si desidera evidenziare i duplicati!


per evidenziare i duplicati:

  1. Selezionare l'intero intervallo su cui si desidera la marcatura duplicata.
  2. Nel menu: Format>Conditional formatting...
  3. Sotto Apply to range, seleziona l'intervallo a cui applicare la regola.
  4. In Format cells if, seleziona Custom formula isil menu a discesa.
  5. Nella casella di testo inserisci la formula indicata, regolando l'intervallo in modo che corrisponda al passaggio (3).

Perché funziona

COUNTIF(range, criterion), confronterà ogni cella rangecon il criterion, che viene elaborato in modo simile alle formule. Se non vengono forniti operatori speciali, confronterà ogni cella nell'intervallo con la cella specificata e restituirà il numero di celle che corrispondono alla regola (in questo caso, il confronto). Stiamo utilizzando un intervallo fisso (con$ segni) in modo da visualizzare sempre l'intero intervallo.

Il secondo blocco, INDIRECT(ADDRESS(ROW(), COLUMN(), 4))restituirà il contenuto della cella corrente. Se questo è stato inserito nella cella, i documenti avrebbero pianto sulla dipendenza circolare, ma in questo caso la formula viene valutata come se fosse nella cella, senza cambiarla.

ROW()e COLUMN()restituirà rispettivamente il numero di riga e il numero di colonna della cella specificata. Se non viene fornito alcun parametro, verrà restituita la cella corrente (ad esempio 1, B3restituirà 3 per ROW()e 2 perCOLUMN() ).

Quindi usiamo: ADDRESS(row, column, [absolute_relative_mode])per tradurre la riga e la colonna numerica in un riferimento di cella (come B3. Ricorda, mentre siamo nel contesto della cella, non sappiamo che sia l'indirizzo O il contenuto e abbiamo bisogno del contenuto per confrontarlo con). Il terzo parametro si occupa della formattazione e 4restituisce i INDIRECT()like di formattazione .

INDIRECT(), prenderà un riferimento di cella e ne restituirà il contenuto. In questo caso, il contenuto della cella corrente. Quindi torna all'inizio, COUNTIF()testerà ogni cella nell'intervallo contro la nostra e restituirà il conteggio.

L'ultimo passo è fare la nostra formula restituire un valore booleano, rendendolo un'espressione logica: COUNTIF(...) > 1. La > 1si usa perché sappiamo che c'è almeno una cella identica alla nostra. Questa è la nostra cella, che è nell'intervallo, e quindi verrà confrontata con se stessa. Quindi, per indicare un duplicato, dobbiamo trovare 2 o più celle corrispondenti alle nostre.


fonti:


4
Purtroppo questo non funziona per me. Non riesce a evidenziare nulla, nonostante ci siano molti duplicati. Non so perché, sembra una bella soluzione.
JVC

Questo funziona per me, ma evidenzia anche celle vuote. C'è un modo per escludere gli spazi?
Gillespieza,

1
@Amanda - Sì, un po 'di creatività ed è possibile. Sono AFK per la settimana, ma mi raggiungo tra una settimana e mezza e sarò felice di aiutarti. L'idea è quella di creare un'istruzione AND (usando *) e un altro controllo, così lungo le linee di ((COUNTIF(...))*(NOT(ISBLANK(INDIRECT(...current cell...))))). Questo è il meglio che posso fare sul cellulare. :)
Egoista,

2
Esattamente questa è la soluzione richiesta. Funziona proprio come un HASHMAP per identificare i duplicati.
Akh

1
Funziona affascinante, grazie @Selfish! Mi hai risparmiato tempo. Nota: l'unica cosa da cambiare deve essere $A$1:$C$50- di conseguenza alle colonne in questione. Mi piace questo approccio più generico più di quello di Zolley.
boldnik,

28

La risposta di @zolley è corretta. Basta aggiungere una Gif e i passaggi per il riferimento.

  1. Vai al menu Format > Conditional formatting..
  2. Trova Format cells if..
  3. Aggiungi =countif(A:A,A1)>1nel campoCustom formula is
    • Nota: cambia la lettera Acon la tua colonna.

inserisci qui la descrizione dell'immagine


2
Come posso filtrarli per colore dopo aver evidenziato i duplicati?
Faisal,

@Faisal solo con script o addon
player0

27

Dal menu a discesa "Il testo contiene" seleziona "La formula personalizzata è:" e scrivi: "= countif (A: A, A1)> 1" (senza virgolette)

Ho fatto esattamente come proposto da Zolley , ma dovrebbe esserci una piccola correzione: usa "La formula personalizzata è" invece di "Contiene testo" . E quindi il rendering condizionale funzionerà.

Schermata dal menu


1
Non ti ho sottovalutato (ho appena trovato questa domanda oggi), ma ecco un commento sulla tua risposta, come da te richiesto. Non credo che il punto e virgola sia necessario nella formula. Inoltre, vedo ancora un menu a discesa nel pannello di formattazione condizionale nei fogli di google. Almeno, faccio clic sull'opzione di selezione e viene visualizzato un lungo set di opzioni, che in genere definirei un menu a discesa. L'opzione che appare inizialmente nel Text Containsmenu a discesa è spesso , quindi è quello su cui un utente farebbe generalmente clic per accedere al menu a discesa.
Paul de Barros,

Grazie Paolo, per il tuo commento. Forse ho frainteso: ho capito che "Testo contiene" (o "Formatta celle se ...") ha un menu a discesa "La formula personalizzata è:". Inoltre "Testo contiene" dovrebbe avere un valore di sottostringa corrispondente, non "= countif (A: A, A1)> 1;". In realtà è un altro approccio.
Shurik,

12

Evidenzia duplicati (nella colonna C):

=COUNTIF(C:C, C1) > 1

Spiegazione: Il C1qui non fa riferimento alla prima riga in C. Poiché questa formula viene valutata da una regola di formato condizionale, invece, quando la formula viene controllata per vedere se si applica, il C1riferimento effettivo a qualunque riga è attualmente valutata vedere se il momento saliente deve essere applicato. ( Quindi è più simile INDIRECT(C &ROW()), se questo significa qualcosa per te! ). In sostanza, quando si valuta una formula di formato condizionale, tutto ciò che fa riferimento alla riga 1 viene valutato rispetto alla riga su cui viene eseguita la formula. ( E sì, se usi C2, chiedi alla regola di controllare lo stato della riga immediatamente sotto quella attualmente in corso di valutazione. )

Quindi, dice questo, conta le occorrenze di qualunque cosa sia C1(la cella corrente in fase di valutazione) che si trova nell'intera colonna Ce se ce ne sono più di 1 (ovvero il valore ha duplicati), allora: applica l'evidenziazione ( perché la formula , nel complesso, valutaTRUE ).

Evidenzia solo il primo duplicato:

=AND(COUNTIF(C:C, C1) > 1, COUNTIF(C$1:C1, C1) = 1)

Spiegazione: Questo evidenzia solo se entrambi COUNTIFsono TRUE(appaiono all'interno di un AND()).

Il primo termine da valutare (il COUNTIF(C:C, C1) > 1) è esattamente lo stesso del primo esempio; è TRUEsolo se ciò che è dentro C1ha un duplicato. ( Ricorda che si C1riferisce efficacemente alla riga corrente che viene controllata per vedere se deve essere evidenziata ).

Il secondo termine ( COUNTIF(C$1:C1, C1) = 1) sembra simile ma ha tre differenze cruciali:

Non cerca in tutta la colonna C(come fa la prima:) C:Cma invece avvia la ricerca dalla prima riga: C$1 (la $costringe a guardare letteralmente riga 1, non in qualunque riga venga valutata).

E quindi interrompe la ricerca nella riga corrente in fase di valutazione C1.

Finalmente dice = 1.

Quindi, sarà solo TRUEse non ci sono duplicati sopra la riga attualmente in fase di valutazione (il che significa che deve essere il primo dei duplicati).

In combinazione con quel primo termine (che sarà solo TRUEse questa riga ha duplicati) questo significa che verrà evidenziata solo la prima occorrenza.

Evidenzia il secondo e i successivi duplicati:

=AND(COUNTIF(C:C, C1) > 1, NOT(COUNTIF(C$1:C1, C1) = 1), COUNTIF(C1:C, C1) >= 1)

Spiegazione: La prima espressione è la stessa di sempre ( TRUEse la riga attualmente valutata è un duplicato).

Il secondo termine è esattamente lo stesso dell'ultimo tranne che è negato: ha un NOT() intorno. Quindi ignora la prima occorrenza.

Infine, il terzo termine raccoglie i duplicati 2, 3 ecc. COUNTIF(C1:C, C1) >= 1Avvia l'intervallo di ricerca nella riga attualmente valutata (la C1in C1:C). Quindi valuta TRUE(applica l'evidenziazione) solo se ci sono uno o più duplicati sotto questo (e incluso questo): >= 1(non deve essere >=solo >altrimenti l'ultimo duplicato viene ignorato).


3

Ho provato tutte le opzioni e nessuna ha funzionato.

Mi hanno aiutato solo gli script delle app di Google.

fonte: https://ctrlq.org/code/19649-find-duplicate-rows-in-google-sheets

Nella parte superiore del documento

1.- vai su strumenti> editor di script

2.- imposta il nome del tuo script

3.- incolla questo codice:

function findDuplicates() {
  // List the columns you want to check by number (A = 1)
  var CHECK_COLUMNS = [1];

  // Get the active sheet and info about it
  var sourceSheet = SpreadsheetApp.getActiveSheet();
  var numRows = sourceSheet.getLastRow();
  var numCols = sourceSheet.getLastColumn();

  // Create the temporary working sheet
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var newSheet = ss.insertSheet("FindDupes");

  // Copy the desired rows to the FindDupes sheet
  for (var i = 0; i < CHECK_COLUMNS.length; i++) {
    var sourceRange = sourceSheet.getRange(1,CHECK_COLUMNS[i],numRows);
    var nextCol = newSheet.getLastColumn() + 1;
    sourceRange.copyTo(newSheet.getRange(1,nextCol,numRows));
  }

  // Find duplicates in the FindDupes sheet and color them in the main sheet
  var dupes = false;
  var data = newSheet.getDataRange().getValues();
  for (i = 1; i < data.length - 1; i++) {
    for (j = i+1; j < data.length; j++) {
      if  (data[i].join() == data[j].join()) {
        dupes = true;
        sourceSheet.getRange(i+1,1,1,numCols).setBackground("red");
        sourceSheet.getRange(j+1,1,1,numCols).setBackground("red");
      }
    }
  }

  // Remove the FindDupes temporary sheet
  ss.deleteSheet(newSheet);

  // Alert the user with the results
  if (dupes) {
    Browser.msgBox("Possible duplicate(s) found and colored red.");
  } else {
    Browser.msgBox("No duplicates found.");
  }
};

4.- salva ed esegui

In meno di 3 secondi, la mia riga duplicata è stata colorata. Basta copiare e incollare la sceneggiatura.

Se non conosci gli script di Google Apps, questi link potrebbero aiutarti:

https://zapier.com/learn/google-sheets/google-apps-script-tutorial/

https://developers.google.com/apps-script/overview

Spero che aiuti.


Questo codice può essere modificato per evidenziare solo i campi duplicati nella colonna con il rosso anziché la riga intera?
Amr
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.