Ho due elenchi (set univoci) in un foglio di calcolo e voglio ottenere l'intersezione dei due.
C'è un modo semplice per farlo?
Ecco un esempio di ciò che voglio ottenere:
Elenco 1 Elenco 2 Risultato atteso a 1 e b 2 f ce d 4 ef f 6
Ho due elenchi (set univoci) in un foglio di calcolo e voglio ottenere l'intersezione dei due.
C'è un modo semplice per farlo?
Ecco un esempio di ciò che voglio ottenere:
Elenco 1 Elenco 2 Risultato atteso a 1 e b 2 f ce d 4 ef f 6
Risposte:
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.
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.
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")
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