Come ottenere l'intersezione di due insiemi


Risposte:


20

Non è necessario passare a GAS, le funzioni di foglio di calcolo standard gestiscono questo facilmente.

Incolla quanto segue in una cella del tuo esempio

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

La funzione match genera un prodotto cartesiano delle due gamme piene di errori tranne nel caso in cui venga trovata una corrispondenza. Restituisce un indice nel 2 ° intervallo quando viene trovata una corrispondenza .

La funzione filtro elimina tutte le schifezze e restituisce solo i valori correttamente indicizzati.

L' iferror aiuta a ottenere un risultato ordinato se non ci sono partite.

Gli intervalli possono essere di qualsiasi lunghezza, come indicato dal linguaggio $ A $ 2: $ A.


3

Questo piccolo script confronterà due intervalli, come una formula:

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

Nel tuo foglio puoi aggiungere nella cella D2 la seguente formula:

=COMPARE(A2:A7,B2:B7)

Aggiungi lo script tramite il menu Strumenti, editor di script.


Accolgo con favore la vecchia formula semplice. Potrei pensarli immediatamente .....
Jacob Jan Tuinstra,

1
potrebbe / dovrebbe essere impossibile .......
Jacob Jan Tuinstra,

1
Grazie, @Jacob! Non ho mai avuto un vero motivo per usare le formule in gDocs - grazie per avermi aperto a questo mondo!
NoamNelke,

3

Nel caso in cui stai cercando come trovare una sottrazione di due intervalli (elementi dell'intervallo 1 che non sono nell'intervallo 2), come:

List 1  List 2  Expected result

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

Ecco una formula per te:

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

0

Questo piccolo script confronterà due intervalli, come una formula:

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

Nel tuo foglio puoi aggiungere nella cella D2 la seguente formula:

=intersect(A2:A7,B2:B7)

Aggiungi lo script tramite il menu Strumenti, editor di script.

= intersect (A2: A7, B2: B7) restituisce risultati che si presentano su entrambi gli array array1, array2.

= extersect (A2: A7, B2: B7) restituisce valori dell'array1 che non esiste nell'intervallo B2: B7

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.