Eu tenho duas listas (conjuntos exclusivos) em uma planilha e quero obter a interseção das duas.
Existe uma maneira fácil de fazer isso?
Aqui está um exemplo do que eu quero alcançar:
Lista 1 Lista 2 Resultado esperado a 1 e b 2 f ce d 4 ef f 6
Eu tenho duas listas (conjuntos exclusivos) em uma planilha e quero obter a interseção das duas.
Existe uma maneira fácil de fazer isso?
Aqui está um exemplo do que eu quero alcançar:
Lista 1 Lista 2 Resultado esperado a 1 e b 2 f ce d 4 ef f 6
Respostas:
Não há necessidade de acessar o GAS; as funções padrão da planilha lidam com isso facilmente.
Cole o seguinte em uma célula no seu exemplo
=iferror(filter($A$2:$A, match($A$2:$A, B2:$B , false)), "no match")
A função de correspondência gera um produto cartesiano dos dois intervalos cheios de erros, exceto onde uma correspondência é encontrada. Ele retorna um índice para o 2º intervalo quando uma correspondência é encontrada.
A função de filtro joga fora toda a porcaria e retorna apenas os valores indexados corretamente.
O iferror ajuda a obter um resultado organizado, se não houver correspondências.
Os intervalos podem ter qualquer comprimento, conforme indicado pelo idioma $ A $ 2: $ A.
Este pequeno script irá comparar dois intervalos, como uma fórmula:
function COMPARE(array1, array2) {
var array = [];
for(i=0; i<array1.length; i++) {
for(j=0; j<array2.length; j++) {
if(array1[i][0] == array2[j][0]) {
// the extra square brackets will make it a 2D array,
// aligning it vertically
array.push([array1[i][0]]);
}
}
}
return array;
}
Na sua planilha, você pode adicionar na célula D2 a seguinte fórmula:
=COMPARE(A2:A7,B2:B7)
Adicione o script através do menu Ferramentas, editor de scripts.
Caso você esteja procurando como encontrar uma subtração de dois intervalos (elementos do intervalo 1 que não estão no intervalo 2), como:
List 1 List 2 Expected result
a 1 a
b 2 b
c e c
d 4 d
e f
f 6
Aqui está uma fórmula para você:
=iferror(filter($A$2:$A, iserror(match($A$2:$A, B2:$B , false))), "no match")
Este pequeno script irá comparar dois intervalos, como uma fórmula:
function intersect(array1, array2) {
var array = [];
for(i=0; i<array1.length; i++) {
for(j=0; j<array2.length; j++) {
if(array1[i][0] == array2[j][0]) {
// the extra square brackets will make it a 2D array,
// aligning it vertically
array.push([array1[i][0]]);
}
}
}
return array;
}
Extra:
function extersect(array1, array2) {
var array = [];
var tmp = true;
for(i=0; i<array1.length; i++) {
for(j=0; j<array2.length; j++) {
if(array1[i][0] == array2[j][0]) {
// the extra square brackets will make it a 2D array,
// aligning it vertically
tmp = false;
}
}
if(tmp == true)
{
array.push([array1[i][0]]);
}
tmp = true;
}
return array;
}
Na sua planilha, você pode adicionar na célula D2 a seguinte fórmula:
=intersect(A2:A7,B2:B7)
Adicione o script através do menu Ferramentas, editor de scripts.
= intersect (A2: A7, B2: B7) retorna resultados que aparecem nas duas matrizes matriz1, matriz2.
= extersect (A2: A7, B2: B7) retorna valores da matriz1 que não existe no intervalo B2: B7