Como obter a interseção de dois conjuntos


16

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      

Exemplo de planilha do Google


Você pode compartilhar um documento conosco e explicar um pouco o resultado esperado?
Jacob Jan Tuinstra

Respostas:


20

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.


3

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.


Congratulo-me com simples fórmula antiga. Eu poderia pensar-los imediatamente .....
Jacob Jan Tuinstra

1
podia deve / tem de ser não podia .......
Jacob Jan Tuinstra

1
Obrigado, @ Jacob! Eu nunca tive um motivo real para usar fórmulas no gDocs - obrigado por me abrir para este mundo!
NoamNelke

3

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")

0

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

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.