Como posso encontrar duplicatas em uma coluna usando fórmulas?

11

Alguém criou uma fórmula para encontrar duplicatas em uma coluna? Por exemplo:

a
b
c
d
b
d

=somefunction(A1:A6)

Resultado:

b
d

Eu sei que existe uma =unique()função, é basicamente uma =not_unique()função. Queria saber se ele pode ser construído sem o uso de código.

Jason
fonte
Aqui está um exemplo neste segmento stackoverflow.com/questions/19843406/…, dê uma olhada nisso, que pode lhe dar uma idéia.
Vembu 11/08/2015
Espere, o que você está procurando é uma not_uniquefunção, certo? Você parece estar procurando os campos que não são exclusivos (as duplicatas), não os campos que são únicos.
David Mulder

Respostas:

16

A solução possível sem uma coluna adicional é:

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

Por favor, veja o exemplo preparado aqui: Encontre duplicados

Ilya Lapitan
fonte
3

A única maneira que encontrei (usando fórmulas) é introduzindo uma nova countcoluna.

Se os seus valores estão listados na coluna A, começando na linha 2, introduza a fórmula =COUNTA(FILTER(A$2:A$7, A$2:A$7 = A2))em B2e arraste para baixo para copiá-lo. Isto dá:

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

Agora que temos uma contagem de ocorrências de cada valor, podemos filtrar a Acoluna pelos valores de B. Na célula C2, insira a fórmula =UNIQUE(FILTER(A2:A7, B2:B7 > 1)). Isto dá:

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

Explicação das fórmulas

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

  • A filtercláusula inspeciona a Acoluna e localiza células que têm o mesmo valor que a célula A2( A2é substituída pela célula correspondente ao copiar a fórmula).
  • counta conta valores (incluindo não numéricos).

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

  • Este filterexamina coluna Bpara valores que são > 1, e retorna os valores correspondentes da coluna A. A uniquefunção simplesmente garante que retornemos cada valor apenas uma vez, portanto não obtemos bduas vezes, por exemplo.

No entanto , uma maneira mais elegante seria usar uma função 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;
}

Vá em Ferramentas → Editor de scripts , cole o código acima e salve. Agora você pode chamar a função digitando a fórmula em =dups(A2:A7)qualquer lugar. Isso retorna as duplicatas encontradas em A2:A7.


Criei uma planilha de exemplo para demonstrar as duas possibilidades , fique à vontade para vê-la e copiá-la.

Vidar S. Ramdal
fonte
var values ​​= {} precisa ser var values ​​= [] certo?
Jacob Jan Tuinstra
1
Na verdade não. valuesé usado como um mapa de valores-chave, não como uma matriz, para que seja fácil verificar se já processamos um valor específico - o values[property]existe ou não.
Vidar S. Ramdal
1
Pensei que estivesse empurrando em uma matriz .... Eu testei seu código e ele continua a mostrar entradas duplicadas, como em d, d, d, d ... . A solução da fórmula que você forneceu não faz isso.
Jacob Jan Tuinstra
1
Eu quis dizer objeto.
Jacob Jan Tuinstra
1
@JacobJanTuinstra Ah, sim - eu vejo isso agora. Corrigido o código.
Vidar S. Ramdal