はじめに
Excelに蓄積されたデータから、条件によって別シートへ抽出したい事案が発生しました。
SQL等に慣れていればGoogleスプレッドのquery関数で簡単に実現できそうです。
データがExcel上にあるので本来はExcelのみで実現させたかったのですが、目的まで最短で行けそうなので取り急ぎGoogleスプレッドシートで行ってみました。
やりたい事
以下のような日付(年月日)と金額の2項目存在する元データから、指定した年月の条件で抽出し日付順に並び替えて出力します。
A | B | |
1 | 日付 | 金額 |
2 | 20210313 | 300 |
3 | 20210211 | 210 |
4 | 20210425 | 451 |
5 | 20210329 | 675 |
6 | 20210207 | 650 |
7 | 20210109 | 354 |
8 | 20210306 | 367 |
9 | 20210424 | 655 |
10 | 20210316 | 245 |
例えば2021年3月とA2のセルへ抽出条件を指定した場合、2021年3月のデータを抽出し日付順に別シートへ出力する事を目的とします。
A | B | C | |
1 | 抽出年月 | 日付 | 金額 |
2 | 202103 | 20210306 | 367 |
3 | 20210313 | 300 | |
4 | 20210316 | 245 | |
5 | 20210329 | 675 |
手順
データ出力開始である「B2」セルに、以下のようなquery関数を埋め込みます。
=QUERY(データ,クエリ,見出し)
解説します。
1:データ
検索及び抽出範囲(データ全て)を指定します。
今回のデータは、シート「元データ」でデータの範囲は、A2~B10になります。
2:クエリ
SQLに慣れている方は、説明は不要ですね。
1:selectで元データから抽出する列を指定します。「select A,B」
whereは抽出条件です。
1:日付を元に検索するので、Aの列を指定します。「where A」
2:抽出する値を指定します。「like A2%」
あいまい検索なのでlikeを使用します。
検索条件は、シート抽出データ内のA2を指定します。
3:データの並び替えをA列に対して行います。「order by A」
3:見出し
今回のデータ抽出は見出しは不要なので「-1」としています。
見出しを作成せずにデータ範囲をA1:B10とすれば、「1」を指定すれば同じ結果となります。
という訳で今回のqueryは、以下で実行可能となります。
=QUERY('元データ'!A2:B10,"select A,B where A like '"&A2&"%' order by A",-1)
まとめ
Googleスプレッドシートのquery関数で、簡単に目的を達成する事ができました。
Excel上でも結果的に別関数や組み合わせで実現可能なのですが、ここまで簡単に行う事は不可能です(多分・・・)
この件については、また別の機会に行ってみたいと思います。
表形式のデータをデータベースのように扱えるのは、かなり便利ですね。
コメント