質問: **[Googleスプレッドシート]Query:一覧に該当しないデータの抽出方法** ------------------------------------------ **<やりたいこと>** ファイルAのSheet1からファイルBのSheet3に値を転記したいと思っています。 その際、ファイルBのSheet2に記載された#に該当しないデータのみを抽出したいと思っています。 --- **ファイルA Sheet1**(コピー元) | # | 名前 | 項目1 | | --- | --- | --- | | 001 | apple | 30 | | 002 | banana | 40 | | 003 | grape | 20 | **ファイルB Sheet2**(抽出させたくないデータ一覧) | # | | | --- | --- | | 001 | | **ファイルB Sheet3**(コピー先) | # | 名前 | 項目1 | | --- | --- | --- | | 002 | banana | 40 | | 003 | grape | 20 | --- **<想定している対応方法>** 現在想定しているのが ``` query(importrange("ファイルA-URL", "Shee1!A1:D1000"), "select * where Col1 != "(importrange("ファイルB-URL", "Sheet2!A:A")"))) ``` とファイルB Sheet3に記載すれば良いのかと思ったのですが、エラーとなっています。 (where句のcol1に該当しない物を抽出する想定) 解消方法もしくはライトな方法をご存知であればお助けいただけますと幸いです。
回答: やりたいことはわかります。スマートではないですが、以下の2点を修正すると一応できます。 ・Query関数内で セル参照使う場合は ちょっとクセがあります。 ・A:A という形で 抽出させたくないデータ一覧 を引っ張ってくると 配列になっちゃうので、 そのままQuery では 使えないと思われます。 とりあえず 1つだけファイルB Sheet2 のA2 だけ除外なら 以下のような書き方 ``` query(importrange("ファイルA-URL", "Shee1!A1:D1000"), "select * where Col1 != '"& importrange("ファイルB-URL", "Sheet2!A2") &"'") ``` ファイルB Sheet2 のA列に、抽出させたくないデータが複数ある場合は、 無理やりですが以下のような感じでいけます。 Sheet2とSheet3は 同じスプレッドシートのようなので、 importrangeよりも直接シート参照の方が早そうなので書き換えてみました。 ``` query(importrange("ファイルA-URL", "Shee1!A1:D1000"), "select * where Col1 != '"& join("' and Col1 != '",INDIRECT("Sheet2!A2:A" & COUNTA(Sheet2!A:A))) &"'") ``` importrangeとquery、join 使ってるんで、データ多いと重くなりそう。 他の関数組み合わせ等で、もっとスマートに実現できるかもしれません。