$shibayu36->blog;

クラスター株式会社のソフトウェアエンジニアです。エンジニアリングや読書などについて書いています。

Googleスプレッドシートで複数シートの内容を1つのシートに統合する

たとえばユーザー向け開発とリファクタリングなどの内部改善を、スプレッドシートの別シートで管理していたとする。これらを別シートに分けている理由は管理したい情報がそれぞれで違うためだ。

一方、それら進行状態については全部一覧で見たいことがあった。そうすることで、全てのタスクを含めて状況を把握しやすいためだ。

これを対応するためにGoogleスプレッドシートでいろいろ試してみたのでメモ。

シートの例

https://docs.google.com/spreadsheets/d/1IJ4qORImjfzVDodH0Z4vINRmXcqYjg9095uRVlTfSRI/edit#gid=0 にサンプルを作ってみた。シート1には機能開発一覧としてID、ステータス、タイトルという列を使って管理している。シート2にはリファクタリング一覧としてID、ステータス、名前、担当者が入っている。

QUERYと配列結合を使って統合する

QUERY配列を使うことで、この二つのシートを結合した別シートを作れる。たとえばこの二つからIDとステータスとタスク名を取り出したいなら、見出しは手作業で書いた上で、その下に次のような式を書けば良い。

= {QUERY('シート1'!A:C, "SELECT A, C, B WHERE A != '' OFFSET 1", 0); QUERY('シート2'!A:E, "SELECT A, C, B WHERE A != '' OFFSET 1", 0) }

= { }の部分が配列の結合部分だ。;を使うことで同じ列数を持つデータを縦方向に結合ができる。

QUERY式を使うことで、別シートから柔軟に列を指定して取り出すことができる。見出し部分を除去するためにOFFSET 1と3引数目に0を指定するという工夫をしている。

あとは結合したシートでフィルタ表示を使えば、絞り込みやソートを簡単に行える。便利。

この辺りの知識があれば、さらに別のスプレッドシートからIMPORTRANGEでデータを取ってきた上でQUERYでフィルタかけて結合なども簡単に行えるようになる。

参考資料