Cómo obtener la intersección de dos conjuntos

16

Tengo dos listas (conjuntos únicos) en una hoja de cálculo y quiero obtener la intersección de las dos.

¿Hay una forma fácil de hacer esto?

Aquí hay un ejemplo de lo que quiero lograr:

Lista 1 Lista 2 Resultado esperado

 a 1 e
 b 2 f
 ce      
 d 4      
 ef      
 f 6      

Ejemplo de hoja de Google

NoamNelke
fuente
¿Puedes compartir un documento con nosotros y explicar un poco el resultado esperado?
Jacob Jan Tuinstra

Respuestas:

20

No hay necesidad de saltar a GAS, las funciones estándar de hoja de cálculo manejan esto fácilmente.

Pegue lo siguiente en una celda en su ejemplo

=iferror(filter($A$2:$A, match($A$2:$A, B2:$B , false)), "no match")

La función de coincidencia genera un producto cartesiano de los dos rangos lleno de errores, excepto donde se encuentra una coincidencia. Devuelve un índice en el segundo rango cuando un partido se encuentra.

La función de filtro descarta toda la basura y solo devuelve los valores indexados correctamente.

El iferror ayuda a obtener un resultado ordenado si no hay coincidencias en absoluto.

Los rangos pueden ser de cualquier longitud, como lo indica el modismo $ A $ 2: $ A.

Martin Bramwell
fuente
3

Este pequeño script comparará dos rangos, como una 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;
}

En su hoja puede agregar en la celda D2 la siguiente fórmula:

=COMPARE(A2:A7,B2:B7)

Agregue el script a través del menú de herramientas, editor de script.

Jacob Jan Tuinstra
fuente
Doy la bienvenida a las viejas fórmulas simples. Podría pensar en ellos de inmediato .....
Jacob Jan Tuinstra
1
podría debería / debería ser no podría .......
Jacob Jan Tuinstra
1
¡Gracias, @Jacob! Nunca tuve una razón real para usar fórmulas en gDocs, ¡gracias por abrirme a este mundo!
NoamNelke
3

En caso de que esté buscando cómo encontrar una resta de dos rangos (elementos del rango 1 que no están en el rango 2), como:

List 1  List 2  Expected result

 a       1        a
 b       2        b
 c       e        c
 d       4        d
 e       f      
 f       6    

Aquí hay una fórmula para ti:

=iferror(filter($A$2:$A, iserror(match($A$2:$A, B2:$B , false))), "no match")
Zhenya Morozov
fuente
0

Este pequeño script comparará dos rangos, como una 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;
}

En su hoja puede agregar en la celda D2 la siguiente fórmula:

=intersect(A2:A7,B2:B7)

Agregue el script a través del menú de herramientas, editor de script.

= intersectar (A2: A7, B2: B7) devuelve resultados que se presentan en ambas matrices array1, array2.

= extersect (A2: A7, B2: B7) devuelve valores de array1 que no existe en el rango B2: B7

GlobeCore.com
fuente