次のようなスプレッドシート「マスターファイル」のデータがあったとすると

「派生ファイル」というスプレッドシートを作成し、その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)