¿Cómo resaltar la celda si el valor se duplica en la misma columna para la hoja de cálculo de Google?

271

Estoy buscando la fórmula para la celda resaltada de la hoja de cálculo de Google si el valor está duplicado en la misma columna

¿Alguien puede ayudarme con esta consulta?

usuario3331309
fuente

Respuestas:

474

Prueba esto:

  1. Selecciona toda la columna
  2. Haga clic en formato
  3. Haga clic en formato condicional
  4. Haga clic en Agregar otra regla (o edite la existente / predeterminada)
  5. Establecer formato de celdas si a:Custom formula is
  6. Establezca el valor en: =countif(A:A,A1)>1(o cambie Aa la columna elegida)
  7. Establece el estilo de formato.
  8. Asegúrese de que el rango se aplique a su columna (por ejemplo, A1:A100).
  9. Haga clic en Listo

Cualquier cosa escrita en las celdas A1: A100 se verificará, y si hay un duplicado (ocurre más de una vez), se coloreará.

Para las configuraciones regionales que usan coma ( ,) como separador decimal, el separador de argumento es muy probablemente un punto y coma ( ;). Es decir, intente: en su =countif(A:A;A1)>1lugar.

Para múltiples columnas, use countifs.

zolley
fuente
50
A partir de las nuevas Hojas de cálculo de Google, puede usar la versión de varias columnas COUNTIFS. Úselo así si los duplicados son una combinación de más columnas=COUNTIFS(A:A; A1; B:B; B1)>1
Christiaan Westerbeek
66
el final ;resulta en un error de "fórmula no válida" para mí. Solo quitarlo hizo el truco. También tenga cuidado: la celda que especifique como segundo argumento del countifdebería ser la primera celda del rango que seleccione.
edelans
11
Funciona. ¿Pero por qué? Suponiendo que A1 es un criterio para la ecuación, ¿esta fórmula no compara todas las celdas dentro del rango con A1?
mafonya
9
@mafonya, la fórmula personalizada es una fórmula genérica que debe leerse como aplicada a la primera celda. Todas las referencias se adaptarán para cada celda en el rango seleccionado. Entonces, por ejemplo, cuando se verifica la celda B2, la fórmula se convertirá internamente =countif(B:B,B2)>1. Esto le permite a uno hacer un formateo bastante avanzado cuando usa referencias de celda absolutas versus relativas.
asoundmove
14
Como nota al margen, si desea aplicarlo a toda la columna, puede usar la fórmula = countif (A: A, A: A)> 1 Esto significa que no solo se aplicará a la celda A1, sino que A4 y A8 si son iguales (duplicados). Ahora, se formateará A4 y A8.
BBking
68

Si bien la respuesta de zolley es perfectamente correcta para la pregunta, aquí hay una solución más general para cualquier rango, más una explicación:

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

Tenga en cuenta que en este ejemplo utilizaré el rango A1:C50. ¡El primer parámetro ( $A$1:$C$50) debe reemplazarse con el rango en el que desea resaltar duplicados!


para resaltar duplicados:

  1. Seleccione todo el rango en el que se desea la marca duplicada.
  2. En el menú: Format>Conditional formatting...
  3. Debajo Apply to range, seleccione el rango al que se debe aplicar la regla.
  4. En Format cells if, seleccione Custom formula isen el menú desplegable.
  5. En el cuadro de texto, inserte la fórmula dada, ajustando el rango para que coincida con el paso (3).

Por que funciona

COUNTIF(range, criterion), Comparará cada célula en rangela criterionque se procesa de manera similar a las fórmulas. Si no se proporcionan operadores especiales, comparará cada celda del rango con la celda dada y devolverá el número de celdas que coinciden con la regla (en este caso, la comparación). Estamos usando un rango fijo (con $signos) para que siempre veamos el rango completo.

El segundo bloque, INDIRECT(ADDRESS(ROW(), COLUMN(), 4))devolverá el contenido actual de la celda. Si esto se colocó dentro de la celda, los documentos habrán llorado por la dependencia circular, pero en este caso, la fórmula se evalúa como si estuviera en la celda, sin cambiarla.

ROW()y COLUMN()devolverá el número de fila y el número de columna de la celda dada, respectivamente. Si no se proporciona ningún parámetro, se devolverá la celda actual (esto se basa en 1, por ejemplo, B3devolverá 3 para ROW()y 2 para COLUMN()).

Luego usamos: ADDRESS(row, column, [absolute_relative_mode])para traducir la fila numérica y la columna a una referencia de celda (como B3. Recuerde, mientras estamos dentro del contexto de la celda, no sabemos su dirección O contenido, y necesitamos el contenido para poder compararlo). El tercer parámetro se encarga del formato y 4devuelve los me INDIRECT()gusta del formato .

INDIRECT(), tomará una referencia de celda y devolverá su contenido. En este caso, el contenido actual de la celda. Luego, de vuelta al inicio, COUNTIF()probará cada celda del rango contra la nuestra y devolverá el recuento.

El último paso es hacer nuestra fórmula devuelve un valor booleano, por lo que es una expresión lógica: COUNTIF(...) > 1. Se > 1usa porque sabemos que hay al menos una celda idéntica a la nuestra. Esa es nuestra célula, que está en el rango, y por lo tanto se comparará con ella misma. Entonces, para indicar un duplicado, necesitamos encontrar 2 o más celdas que coincidan con las nuestras.


Fuentes:

Egoísta
fuente
44
Lamentablemente esto no funciona para mí. No resalta nada a pesar de que hay muchos duplicados. No estoy seguro de por qué, parece una buena solución.
JVC
Esto funciona para mí, pero también resalta las celdas en blanco. ¿Hay alguna manera de excluir espacios en blanco?
gillespieza
1
@Amanda: Sí, un poco de creatividad y es posible. Estoy AFK por la semana, pero atraparme en una semana y media y estaré encantado de ayudar. La idea es crear una declaración AND (usando *) y otra verificación, de manera similar ((COUNTIF(...))*(NOT(ISBLANK(INDIRECT(...current cell...))))). Eso es lo mejor que puedo hacer en dispositivos móviles. :)
Egoísta
2
Exactamente esta es la solución requerida. Esto simplemente funciona como un HASHMAP para identificar duplicados.
AKh
1
Funciona encantador, gracias @Selfish! Me ahorró tiempo Nota: lo único que debe cambiarse debe ser $A$1:$C$50, de acuerdo con las columnas en cuestión. Me gusta más este enfoque genérico que el de Zolley.
boldnik
28

La respuesta de @zolley es correcta. Simplemente agregue un Gif y pasos para la referencia.

  1. Ir al menú Format > Conditional formatting..
  2. Encontrar Format cells if..
  3. Agregar =countif(A:A,A1)>1en campoCustom formula is
    • Nota: Cambie la letra Acon su propia columna.

ingrese la descripción de la imagen aquí

maheshwaghmare
fuente
2
¿Cómo puedo filtrarlos por color después de resaltar los duplicados?
Faisal
@Faisal solo con script o complemento
player0
27

En el menú desplegable "El texto contiene", seleccione "La fórmula personalizada es:" y escriba: "= countif (A: A, A1)> 1" (sin las comillas)

Hice exactamente lo que propuso Zolley , pero debería hacerse una pequeña corrección: use "La fórmula personalizada es" en lugar de "El texto contiene" . Y luego el renderizado condicional funcionará.

Captura de pantalla del menú

Shurik
fuente
1
No te rechacé (acabo de encontrar esta pregunta hoy), pero aquí hay un comentario sobre tu respuesta, tal como lo solicitaste. No creo que el punto y coma sea necesario en la fórmula. Además, todavía veo un menú desplegable en el panel de formato condicional en las hojas de Google. Al menos, hago clic en la opción de selección, y aparece un largo conjunto de opciones, que generalmente llamaría un menú desplegable. La opción que aparece inicialmente en el menú desplegable es con frecuencia Text Contains, por lo que generalmente es en lo que un usuario haría clic para acceder al menú desplegable.
Paul de Barros
Gracias Paul por tu comentario. Tal vez entendí mal: entendí que "El texto contiene" (o "Formatear celdas si ...") tiene un menú desplegable secundario "La fórmula personalizada es:". Además, "El texto contiene" debe tener un valor de subcadena correspondiente, no "= countif (A: A, A1)> 1;". De hecho es otro enfoque.
Shurik
12

Resalte duplicados (en la columna C):

=COUNTIF(C:C, C1) > 1

Explicación: C1Aquí no se refiere a la primera fila en C. Debido a que esta fórmula se evalúa mediante una regla de formato condicional, en cambio, cuando se verifica la fórmula para ver si se aplica, C1efectivamente se refiere a la fila que se está evaluando actualmente. ver si se debe aplicar el resaltado. (¡ Entonces es más como INDIRECT(C &ROW())si eso significara algo para ti! ). Esencialmente, cuando se evalúa una fórmula de formato condicional, todo lo que se refiere a la fila 1 se evalúa contra la fila con la que se ejecuta la fórmula. ( Y sí, si usa C2, entonces le pide a la regla que verifique el estado de la fila inmediatamente debajo de la que se está evaluando actualmente ) .

Entonces, esto dice, cuente las ocurrencias de lo que esté en C1(la celda actual que se está evaluando) que está en toda la columna Cy si hay más de 1 de ellas (es decir, el valor tiene duplicados) entonces: aplique el resaltado ( porque la fórmula , en general, evalúa aTRUE ).

Resalte solo el primer duplicado:

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

Explicación: Esto solo se resalta si ambas COUNTIFson TRUE(aparecen dentro de una AND()).

El primer término a evaluar (el COUNTIF(C:C, C1) > 1) es exactamente el mismo que en el primer ejemplo; es TRUEsolo si lo que está dentro C1tiene un duplicado. ( Recuerde que C1efectivamente se refiere a la fila actual que se verifica para ver si debe resaltarse ).

El segundo término ( COUNTIF(C$1:C1, C1) = 1) es similar pero tiene tres diferencias cruciales:

No busca en toda la columna C(como lo hace la primera:) C:Csino que comienza la búsqueda desde la primera fila: C$1 (lo $obliga a mirar literalmente en la fila 1, no en la fila que se está evaluando).

Y luego detiene la búsqueda en la fila actual que se está evaluando C1.

Finalmente lo dice = 1.

Por lo tanto, solo será TRUEsi no hay duplicados por encima de la fila que se está evaluando actualmente (lo que significa que debe ser el primero de los duplicados).

Combinado con ese primer término (que solo será TRUEsi esta fila tiene duplicados), esto significa que solo se resaltará la primera aparición.

Resalte el segundo y más duplicados:

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

Explicación: La primera expresión es la misma de siempre ( TRUEsi la fila evaluada actualmente es un duplicado).

El segundo término es exactamente el mismo que el último, excepto que se niega: tiene un NOT()alrededor. Entonces ignora la primera ocurrencia.

Finalmente, el tercer término recoge los duplicados 2, 3, etc., COUNTIF(C1:C, C1) >= 1comienza el rango de búsqueda en la fila evaluada actualmente (la C1en el C1:C). Luego, solo se evalúa para TRUE(aplicar resaltado) si hay uno o más duplicados debajo de este (e incluido este): >= 1(no debe ser >=solo, de lo >contrario, se ignorará el último duplicado).

RedYeti
fuente
3

Probé todas las opciones y ninguna funcionó.

Solo los scripts de aplicaciones de Google me ayudaron.

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

En la parte superior de su documento

1.- ir a herramientas> editor de script

2.- establece el nombre de tu script

3.- pegue este código:

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.- guardar y correr

En menos de 3 segundos, mi fila duplicada estaba coloreada. Simplemente copie el guión.

Si no conoce los scripts de aplicaciones de Google, estos enlaces pueden serle de ayuda:

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

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

Espero que esto ayude.

JRichardsz
fuente
¿Se puede modificar este código para resaltar solo los campos duplicados en la columna con rojo en lugar de la fila completa?
Amr