¿Cómo puedo encontrar duplicados en una columna, usando fórmulas?

11

¿Alguien ha ideado una fórmula para encontrar duplicados en una columna? Por ejemplo:

a
b
c
d
b
d

=somefunction(A1:A6)

Salida:

b
d

Sé que hay una =unique()función, es básicamente una =not_unique()función. Me preguntaba si se puede construir sin usar código.

jason
fuente
Aquí hay un ejemplo en este hilo stackoverflow.com/questions/19843406/… eche un vistazo a esto que podría darle alguna idea.
Vembu
Espera, lo que estás buscando es una not_uniquefunción ¿verdad? Parece que está buscando los campos que no son únicos (los duplicados), no los campos que son únicos.
David Mulder

Respuestas:

16

La posible solución sin una columna adicional es:

=FILTER(UNIQUE(A2:A7), ARRAYFORMULA( COUNTIF(A2:A7,UNIQUE(A2:A7))>1 ))

Por favor, vea el ejemplo preparado aquí: Buscar duplicados

Ilya Lapitan
fuente
3

La única forma que encontré (usando fórmulas) es introduciendo una nueva countcolumna.

Si sus valores se enumeran en la columna A, a partir de la fila 2, introduzca la fórmula =COUNTA(FILTER(A$2:A$7, A$2:A$7 = A2))en B2y arrastre hacia abajo para copiarlo. Esto da:

| A: VALUE  | B: COUNT |
|-----------|----------|
|     a     |     1    |
|     b     |     2    |
|     c     |     1    |
|     d     |     2    |
|     b     |     2    |
|     d     |     2    |

Ahora que tenemos un recuento de las ocurrencias de cada valor, podemos filtrar la Acolumna por los valores de B. En la celda C2, inserte la fórmula =UNIQUE(FILTER(A2:A7, B2:B7 > 1)). Esto da:

| A: VALUE  | B: COUNT | C: DUPS |
|-----------|----------|---------|
|     a     |     1    |    b    |
|     b     |     2    |    d    |
|     c     |     1    |         |
|     d     |     2    |         |
|     b     |     2    |         |
|     d     |     2    |         |

Explicación de fórmulas

=COUNTA(FILTER(A$2:A$7, A$2:A$7 = A2))

  • La filtercláusula inspecciona la Acolumna y encuentra celdas que tienen el mismo valor que la celda A2( A2se reemplaza con la celda correspondiente al copiar la fórmula).
  • counta cuenta los valores (incluidos los no numéricos).

=UNIQUE(FILTER(A2:A7, B2:B7 > 1))

  • Esto filterexamina la columna Bpara los valores que son > 1, y devuelve los valores correspondientes de la columna A. La uniquefunción simplemente asegura que solo devolvamos cada valor una vez, por lo que no obtenemos bdos veces, por ejemplo.

Sin embargo , una forma más elegante sería usar una función de script:

function dups(rows) {
  var values = {};
  var duplicates = [];
  for (var i = 0; i < rows.length; i++) {
    var value = rows[i][0];
    if (values[value] !== undefined && duplicates.indexOf(value) == -1) {
      duplicates.push(value);
    } else {
      values[value] = true
    }
  }
  return duplicates;
}

Vaya a Herramientas → Editor de secuencias de comandos , pegue el código anterior y guárdelo. Ahora puede llamar a la función ingresando la fórmula en =dups(A2:A7)cualquier lugar. Esto devuelve los duplicados encontrados en A2:A7.


He configurado una hoja de cálculo de ejemplo para demostrar ambas posibilidades , siéntase libre de mirarla y copiarla.

Vidar S. Ramdal
fuente
los valores var = {} deben ser valores var = [] ¿verdad?
Jacob Jan Tuinstra
1
En realidad no. valuesse usa como un mapa de valores clave, no como una matriz, por lo que es fácil verificar si ya hemos procesado un valor específico, ya sea que values[property]exista o no.
Vidar S. Ramdal
1
Pensé que estabas empujando en una matriz .... He probado su código y se sigue mostrando las entradas duplicadas, como en d, d, d, d ... . La solución de fórmula que proporcionó no hace eso.
Jacob Jan Tuinstra
1
Quise decir objeto.
Jacob Jan Tuinstra
1
@JacobJanTuinstra Ah, sí, ahora veo eso. Corregido el código.
Vidar S. Ramdal