次のようなスプレッドシート「マスターファイル」のデータがあったとすると
「派生ファイル」というスプレッドシートを作成し、そのA1セルに次のように入力すると、
=QUERY(IMPORTRANGE(“https://docs.google.com/spreadsheets/d/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/edit”, “シート1!A1:K10”), “SELECT Col1,Col2,Col3,Col5,Col6,Col7,Col8,Col9,Col10,Col11 where Col11 =’販売中'”, 1)
次のようにデータを抽出して持ってくることができる。
派生ファイルに記述した式の補足。
URLはマスターファイルをブラウザで開いた時のアドレスバーのURLそのもの。
シート1!A1:K10 というのはA1セルからK10セルまでを選択範囲としている。
SELECT Col1, Col2, … というのは必ずCol1 みたいに指定しないといけない。Col1がA列に対応している。今回は仕入価格を見せたくなかったと仮定して、Col4は抽出しないようにしている。 SELECT文の最後で where Col11=’販売中’ とすることで現在販売中の行だけ抽出するようにしている。
これを使うと、派生ファイルのほうで行列を挿入したり、中のデータを更新、修正することはできなくなっちゃう。
列の真ん中に手動で列を追加したい場合は?
たとえばCol1, Col2, Col3 と Col5, Col6, Col7の間に「金庫No」列を手動で追加したいような場合を想定しています。
以下のような結果を得たい場合。
A1セルに、左側のデータを取得
D列に手動で金庫Noを入力
E1セルに、右側のデータを取得
という手順でやればよい。
つまり
A1セルには、
=QUERY(IMPORTRANGE(“https://docs.google.com/spreadsheets/d/xxxxxxxxxxxxxxxxxxxxxxxxxxxx/edit”, “シート1!A1:K10”), “SELECT Col1,Col2,Col3 where Col11 =’販売中'”, 1)
とし
E1セルには、
=QUERY(IMPORTRANGE(“https://docs.google.com/spreadsheets/d/xxxxxxxxxxxxxxxxxxxxxxxxxxxx/edit”, “シート1!A1:K10”), “SELECT Col5,Col6,Col7 where Col11 =’販売中'”, 1)
とする。
2つのスプレッドシートを結合(マージ)して表示するには?
例えば以下のように2つのシートがあるスプレッドシート内の表を2つとも結合して持ってくるにはどうすればよいか?という話。
結合用のシートに以下のように式を入力します。
=QUERY({
IMPORTRANGE(“https://docs.google.com/spreadsheets/d/hogehotehogehoge/”, “シート1!A2:L100”);
IMPORTRANGE(“https://docs.google.com/spreadsheets/d/hogehotehogehoge/”, “シート2!A2:L100”) },
“SELECT * WHERE Col1 IS NOT NULL”, 0)
こうですね。
SELECTの後の * はすべての列という意味になるし、A列、B列、C列だけを持ってきたい場合は、 Col1, Col2, Col3 と言った形で指定できます。最後の引数の0は1行目をヘッダー行としない、という指定です。1を指定すると1行目をヘッダー行だとみなすようになります。
たとえば以下の様に書きます。
=QUERY({
IMPORTRANGE(“https://docs.google.com/spreadsheets/d/hogehotehogehoge/”, “シート1!A2:L100”);
IMPORTRANGE(“https://docs.google.com/spreadsheets/d/hogehotehogehoge/”, “シート2!A2:L100”) },
“SELECT Col1, Col2, Col3 WHERE Col1 IS NOT NULL”, 0)