スプレッドシートに2つのリスト(一意のセット)があり、2つのリストの共通部分を取得したい。
これを行う簡単な方法はありますか?
私が達成したいものの例を次に示します。
リスト1リスト2期待される結果 a 1 e b 2 f ce d 4 ef f 6
GASに飛び込む必要はありません。標準のスプレッドシート関数がこれを簡単に処理します。
次のセルを 例 のセルに貼り付けてください
=iferror(filter($A$2:$A, match($A$2:$A, B2:$B , false)), "no match")
match関数は、一致が見つかった場合を除き、エラーでいっぱいの2つの範囲のデカルト積を生成します。一致isが見つかった場合、2番目の範囲にインデックスを返します。
filter関数はすべてのがらくたを捨て、正しくインデックス付けされた値のみを返します。
iferrorは、一致するものがまったくない場合に整然とした結果を得るのに役立ちます。
$ A $ 2:$ Aイディオムで示されるように、範囲の長さは任意です。
この小さなスクリプトは、式として2つの範囲を比較します。
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;
}
シートで、セルD2に次の式を追加できます。
=COMPARE(A2:A7,B2:B7)
ツールメニューのスクリプトエディタからスクリプトを追加します。
次のように、2つの範囲(範囲2にない範囲1の要素)の減算を見つける方法を探している場合:
List 1 List 2 Expected result
a 1 a
b 2 b
c e c
d 4 d
e f
f 6
ここにあなたのための式があります:
=iferror(filter($A$2:$A, iserror(match($A$2:$A, B2:$B , false))), "no match")