Comment obtenir l'intersection de deux ensembles

16

J'ai deux listes (ensembles uniques) dans une feuille de calcul et je veux obtenir l'intersection des deux.

Y a-t-il un moyen facile de faire ceci?

Voici un exemple de ce que je veux réaliser:

Liste 1 Liste 2 Résultat attendu

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

Exemple de feuille Google

NoamNelke
la source
Pouvez-vous partager un document avec nous et expliquer un peu le résultat attendu?
Jacob Jan Tuinstra

Réponses:

20

Il n'est pas nécessaire de passer au GAS, les fonctions de feuille de calcul standard gèrent cela facilement.

Veuillez coller ce qui suit dans une cellule de votre exemple

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

La fonction de correspondance génère un produit cartésien des deux plages rempli d'erreurs, sauf lorsqu'une correspondance est trouvée. Il renvoie un index dans la 2e plage lorsqu'une correspondance est trouvée.

La fonction de filtre jette toutes les conneries et renvoie uniquement les valeurs correctement indexées.

L' erreur if permet d'obtenir un résultat net s'il n'y a pas de correspondance du tout.

Les plages peuvent être de n'importe quelle longueur, comme indiqué par l'idiome $ A $ 2: $ A.

Martin Bramwell
la source
3

Ce petit script comparera deux plages, sous forme de formule:

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;
}

Dans votre feuille, vous pouvez ajouter dans la cellule D2 la formule suivante:

=COMPARE(A2:A7,B2:B7)

Ajoutez le script via le menu Outils, éditeur de script.

Jacob Jan Tuinstra
la source
Je salue les vieilles formules. Je pourrais penser à eux immédiatement .....
Jacob Jan Tuinstra
1
pourrait devrait / devrait ne pas pouvoir être .......
Jacob Jan Tuinstra
1
Merci, @Jacob! Je n'ai jamais vraiment eu de raison d'utiliser des formules dans gDocs - merci de m'avoir ouvert à ce monde!
NoamNelke
3

Dans le cas où vous cherchez comment trouver une soustraction de deux plages (éléments de la plage 1 qui ne sont pas dans la plage 2), comme:

List 1  List 2  Expected result

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

Voici une formule pour vous:

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

Ce petit script comparera deux plages, sous forme de formule:

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;
}

Supplémentaire:

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;
}

Dans votre feuille, vous pouvez ajouter dans la cellule D2 la formule suivante:

=intersect(A2:A7,B2:B7)

Ajoutez le script via le menu Outils, éditeur de script.

= intersect (A2: A7, B2: B7) renvoie les résultats présents sur les deux tableaux array1, array2.

= extersect (A2: A7, B2: B7) renvoie les valeurs du tableau1 qui n'existe pas dans la plage B2: B7

GlobeCore.com
la source