データの中からある条件に合致するデータを抽出する作業はよくあります。今回は指定した文字列で部分一致するデータを抽出するやり方を説明します。
データを抽出する2つの関数
Googleスプレッドシートでデータを抽出するのに使える関数は以下の2つです。
- FILTER関数
FILTER関数は範囲と条件を指定することでデータを絞り込むことができます。結果は配列データで返されます。 - QUERY関数
クエリ言語を使用して、データに対してクエリを実行することができます。今回はWHERE句を使ってデータを絞り込みます。
FILTER関数による方法
FILTER関数の構文を示します。
FILTER(範囲, 条件1, [条件2, …])
範囲:フィルタを行うデータ範囲
条件1:抽出条件を指定あるいは1列目または 1 行目に対応する TRUE 値または FALSE 値を含む列か行を指定
条件2:[省略可]抽出条件を指定
FILTER関数の問題はワイルドカード(*や?)が使えないことです。つまり、部分一致による絞り込みがFILTER関数だけではできないのです。
上記の問題を解決するためにFIND関数とIFERROR関数を組み合わせます。FIND関数は条件値として指定した文字列の一を返しますが存在しなかった場合はエラーとなります。
つまり、エラーとならなかった場合は文字列が含まれる、エラーとなった場合は含まれないことが分かります。これをIFERRORでエラー確認させることによりTRUE、FALSEが返されます。
=IFERROR(FIND(文字列,範囲))
返り値
TRUE:文字列を含む FALSE:文字列を含まない
さらに以下の様にFILTER関数と組み合わせることで部分一致を実現することができます。
=FILTER(範囲,IFERROR(FIND(文字列,範囲)))
上記は市区町村で「馬」という文字を含んだデータを抽出した結果です。
QUERY関数による方法
QUERY関数はExcelにはなくGoogleスプレッドシート独自の関数です。QUERY関数の構文を示します。
=QUERY(データ, クエリ, [見出し])
データ:クエリを実行するデータ範囲
クエリ:クエリ言語で書かれたクエリ
見出し:[省略可]見出しの行の数、省略した場合は推測
クエリにWHERE句とLIKE演算子を使って絞り込みを行います。たとえば、FILTER関数のところでサンプル的に行った「馬」を含む市区町村を抽出するには以下の様にします。
=QUERY(D:D,"where D LIKE '%馬%'")
ここで%は任意の文字列を示しています。「馬」の前後に%を置くことで部分一致を実現しています。
%を前だけに置くと前方一致、後ろだけに置くと後方一致にすることができます。
文字列を埋め込みで示しましたが汎用的にするためにセル参照にしてみます。
=QUERY(D:D,"where D LIKE '%"&H2&"%'")
セル(H2)を”&セル&”と囲むことによりセル内のデータを文字列として認識してくれます。
まとめ
指定した文字列で部分一致するデータを抽出するやり方をFILTER関数とQUERY関数を使って行う方法について説明しました。
QUERY関数の方がセル参照の方法をきちんと理解できれば直感的に分かりやすい式かなと思っています。ただし、Excelしか知らない担当者だと引き継ぎが難しいかも知れませんね。
コメント