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


¿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.


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.


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

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

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.