前回の話で、QUERYがシートからデータを自在に切り出せる魔法の関数であることは分かりました!
魔法…(笑)
でも確かに、使いこなせば従来の作業工数を半分以下に減らすポテンシャルはあるわね。
すごい!
もっとQUERYについて詳しく教えて下さい!
今回は、ターゲットが明確で更に絞り込みたい時の「複数条件」と、逆に不明確でキーワード検索したい時の「部分一致」について覚えていきましょう!
【and/or】複数の条件で抽出
前回の記事では、QUERY関数の型を理解頂くために1つの条件で抽出しましたが、より実務で活用できるように複数条件の方法を解説します。
今回も、読売ジャイアンツを例に見ていきましょう。
条件一致(当てはまるもの全て)
and(かつ)
例えば、この中から「北海道出身の投手」を抜き出したい時。
D列が投手で、かつL列が北海道ってことですよね?
頭では分かっているけど、関数にできる自信はないです…。
それでいいのよ!
頭の中で整理できていれば、後は当てはめるだけ。
このままやり方を見ていきましょう。
守備が「投手」かつ出身地が「北海道」の選手を、QUERY関数で抽出すると、以下のようになります。
andで単純に繋ぐだけなんですね!
これならすぐに使えそう!
「かつ(and)」条件はこんな感じね。
あわせて「または(or)」条件も覚えてしまいましょう。
or(または)
守備が「投手」かつ出身が「東京」または「神奈川」の選手を、QUERY関数で抽出すると、以下のようになります。
orで区切るだけですね!
ただ、何だか少しくどい気がします…。
それはQUERY関数の仕組みを理解することで納得できるはず。
whereという箱の中で「どのように抽出するか」という条件を定義する時、orは「間仕切り」のイメージかしら。
and(かつ)で条件を絞り込んでも、後から全く別の条件をプラスすることが可能になるわ。
行の抽出条件となるwhere句の中で、より詳細な条件を設定する場合にand/orを使用します。
以下の文字列をコピーして使ってみましょう。(緑文字を置き換え)
=query('シート名'!$この列から:$この列まで,"select 列①,列②,列③ where 検索列①='検索条件①' and 検索列②='検索条件②' or 検索列①='検索条件①' and 検索列②='検索条件③'")
- and(かつ)
- 接続した条件式について、全てを満たす行を抽出
- or(または)
- 接続した条件式について、いずれかを満たす行を抽出
条件不一致(当てはまらないもの全て)
and(かつ)[否定]
「北海道出身ではない投手」を抜き出したい時は、以下のようになります。
出身地が北海道ではなく、かつ守備が投手、ということですね!
これは言葉通りなので分かりやすいです。
そうやって項目(列)ごとに条件を判断していけば、数式の作り方が見えてくるわね。
not(否定)の効力は、すぐ後ろの文にだけ掛かってくるものと覚えておきましょう。
or(または)[否定]
「野手のうち、高卒ルーキー(1年目・19歳)と在籍2年目以上」(※)を抜き出したい時は、以下のようになります。
※1年目のうち大卒や外国人選手を除くという意図
うおお…!
えっと、orをはさむと前後で条件式が分かれるので、投手以外(野手)の19歳(高卒ルーキー)または、投手以外(野手)の1年目以外(2年目以上)…ということですね?!
その通り!
これが分かれば、and/or、それぞれの肯定・否定、全て大丈夫ね!
【like+%】条件の部分一致で抽出
QUERYは非常に柔軟性の高い関数で、数式の後半を少し変えるだけで部分的な条件一致も抽出できます。
それっぽいものを全て抽出できるってことですよね?
実務でかなり使えそう!
そういう捉え方もできるわね。
これを活用すれば、無理にandやorを使って長い数式を組まずに済むので、習得しない手はないわ。
引き続き、読売ジャイアンツを例に見ていきましょう。
部分的な条件一致(含むもの全て)
前回の記事では、where D='投手'という形で、D列(守備)が「投手」という文字列と完全一致する行(選手)を抽出しました。
では、「左投げの投手」を抽出したい時。
K列に利き腕の情報はありますが、投打が1つのセルにまとめられており、先程と同じ方法では難しそうですね。
そんな時は、部分的な条件一致を抽出できるLIKEと%を組み合わせてみましょう。
数式に反映させて抽出すると、以下のようになります。
likeはイメージつくのですが、%ってなんですか?!
どのように部分一致しているかを指定するために%を使っているのよ。
このケースではD列(投打)のセル前方が「投球時の利き腕」を指しているので、前方一致で抽出できるわね。
以下の3パターンがあるので、状況に応じて使い分けましょう。
行の抽出条件となるwhere句の中で、部分的(曖昧)な一致条件を設定する場合にLIKE+%を使用します。
=query('シート名'!$この列から:$この列まで,"select 列①,列②,列③ where 検索列①='検索条件①' and 検索列② like '%検索条件②%'")
- 〜%(後に%)
- 〜から始まる文字列
- %〜(前に%)
- 〜で終わる文字列
- %〜%(前後に%)
- 〜を含む文字列 おすすめ
部分的な条件不一致(含まないもの全て)
「投手と捕手」を消去法で抜き出したい時は、以下のようになります。
「野手」という文字列を含まないものを条件にすることで、内野手と外野手は対象外となり、結果的に投手と捕手だけが抽出される…なるほど!
上手く使えば、数式もコンパクトになりますね!
複数条件と部分一致を、否定(not)もあわせて使い分けることができれば、QUERYの基礎知識は充分よ!
これで従業員情報を自由自在に抜き出せるわね。
でも、実はまだまだ便利な使い方があるのよ…。
なお、部分一致の抽出条件をセル参照する方法は、こちらの記事で解説しているのであわせてご覧下さい。
今回は、より実務に則した使い方として「複数条件」と「部分一致」について解説しました。
これらを活用すれば、名簿等リスト作成のためにデータベースを切り貼りする必要はなくなるでしょう。
スプレッドシートの更なる仕組み化に向けて、次回はQUERY関数で数値データを操る方法を解説します。