はじめに
・他のスプレッドシートから内容を引用したかった。
・かつ、シート毎で月別にしたかった。(月初〜月末)
結論
=QUERY(IMPORTRANGE("【引用したいスプレッドシートのURL】", "【引用したいスプレッドシートの名称】!【引用したい対象の範囲】"),"SELECT 【対象範囲から引用したい列】 where 【対象範囲から日付が入力されている引用したい列】 >= date '【指定日付】'",-1)
※ 【対象範囲から引用したい列】
はカンマ区切りで複数指定可能。
※ where
内はand
などで複数指定が可能。
=QUERY(IMPORTRANGE("https://docs.google.com/spreadsheets/d/xxxxx/edit?ts=yyyyy#gid=zzzzz", "フォームの回答 1!A:T"),"SELECT Col1,Col20 where Col1 >= date '2020-04-01' And Col1 < date '2020-05-01'",-1)
※ x,y,z箇所は内容を伏せています。
※ 実際にはアクセス許可を与える必要があります。
解説
他のスプレッドシートから内容の引用
=(IMPORTRANGE("【引用したいスプレッドシートのURL】", 【引用したい対象の範囲】")
=IMPORTRANGE("https://docs.google.com/spreadsheets/d/xxxxx/edit?ts=yyyyy#gid=zzzzz","A1:T90")
※ 上記の場合、引用したいスプレッドシートのA1〜T90までが、関数を記載したシートに記載される。
指定した列のみを引用
=query('【引用したいシート名】'!【引用したい対象の範囲】, "select 【抽出したい列】", -1)
※ 抽出する対象が同じシート内にある場合は『'【引用したいシート名】'!』は不要。
※ 【抽出したい列】
はカンマ区切りで複数指定可能。
=QUERY(A:T, "SELECT A, T", -1)
※ A:T
は行の範囲を絞らなくても大丈夫。
条件に該当する行のみを引用(日付)
=query('【引用したいシート名】'!【引用したい対象の範囲】, "select 【抽出したい列】 where 【引用した対象の列】 【不等号】 date '【条件】'", -1)
※ 抽出する対象が同じシート内にある場合は『'【引用したいシート名】'!』は不要。
※ where
に指定する条件はandやorで複数指定可能。
=query(A:T, "select A, T where T >= date '2020-04-01'", -1)
んー!(PPAP風に統合)
=QUERY(IMPORTRANGE("【引用したいスプレッドシートのURL】", "【引用したいスプレッドシートの名称】!【引用したい対象の範囲】"),"SELECT 【対象範囲から引用したい列】 where 【対象範囲から日付が入力されている引用したい列】 >= date '【指定日付】'",-1)
=QUERY(IMPORTRANGE("https://docs.google.com/spreadsheets/d/xxxxx/edit?ts=yyyyy#gid=zzzzz", "フォームの回答 1!A:T"),"SELECT Col1,Col20 where Col1 >= date '2020-04-01' And Col1 < date '2020-05-01'",-1)
※ 【対象範囲から日付が入力されている引用したい列】では、Col【左から数えた数値】
で指定する必要がある。
おわりに
- SQLをかじっていたので、selectやwhereはすんなり受け入れられた。
- IMPORTRANGE関数を使用する際に、色々な記事があってすんなりいかなかった。
- 業務時間を優先させた為、日付の自動取得などを調べることまで手が回らなかった。
- 酔った勢いで結果から分割して解説したが、逆に分かりづらいような気もした。
- 最近コードをいじらず、エクセルかスプレッドシートと格闘してばっかりだと、改めて思った。
参照記事
・queryをimportrangeを使って別スプレッドシートのデータをフィルタリングする - GoogleSpreadSheet
・スプレッドシートのQUERY関数で、条件に一致するデータをまとめて抽出する方法
・【QUERY関数】where句で日付データを条件にして行を抽出する
・【スプレッドシート】QUERY関数の参照にimportrangeを使う