【QUERY関数①】コピペ可|select、whereの意味は?エラーの原因は?

関数教室

皆さんは「QUERY」というスプレッドシート関数を聞いたことはありますか?

私はIT企業で人事をしているのですが、正直コレを使い始めてから月10時間ほど削減できました

人事業務でいうと、必要な行(従業員)と列(項目)だけを瞬時に抽出して、リスト作成や分析ができるスグレモノです。

「そんな便利な関数、初耳だ!」という方には是非使って頂きたいのですが、トップ画像のサ●ヤ人のように

selectとかwhereとか何なん?!

なぜエラー?!?!

発狂しながらPCを閉じてしまう未来が、残念ながら見えています。

そうならぬよう、本記事ではQUERY関数「体系的に」「事例と図解も交えながら」「日本語で(笑)」解説していきます

ITリテラシー皆無の新任人事担当がルーティン業務に忙殺されているシーンからスタートしますので、是非ご覧下さい。

新任
新任

毎日スプレッドシートの更新作業ばかりでしんどいです。

人事のプロ
人事のプロ

人事担当者は、ルーティンワークよりもっと脳に汗かく仕事に集中するべきよ。
ちなみにどんな作業をしているの?

新任
新任

えっと、従業員情報をシステムから落として、それをスプレッドシートで雇用形態ごとにフィルターして、不要な行は削除して…

人事のプロ
人事のプロ

うんうん、なるほど。
そんなこと毎日やっていたら、定時で帰れないのも当然ね。

あれこれ考えず、まずはQUERY関数を覚えるといいわ。

この記事を読んだら
  • QUERY関数の基本構造を理解することで、様々な応用)ができる
    ※今すぐコピペして使いたい方はこちら
  • 1つのセルに対象者と項目を条件指定するだけで、瞬時に抜き出すことができる
    • 関数で完結するため、行のフィルターや列の非表示・削除を使用しない
      • ゆえに以降は元データの貼り替えのみで情報更新できる
  • よくあるエラー事例を知ることで、早急に原因究明・改善できる

QUERY関数の基本

「●●の人たちだけを抜き出して▲▲と■■の項目だけ持ってきたい!」
そんな時に便利なのがQUERY関数です。
(スプレッドシート限定のため、Excelでは使用できません)

新任
新任

データベースの中から正社員従業員番号名前だけ持ってきたい時とか、よくあります!

人事のプロ
人事のプロ

QUERYなら従業員リストの作成くらいお手の物ね。

1つの条件で抽出(〜と一致するもの)

実際の活用方法について見ていきましょう。
まずは、最も基本的な単一条件による抽出です。

読売ジャイアンツの2020年データで解説していきます。

読売ジャイアンツの選手データ
プロ野球データFreak2020年データより

例えば、この中から「投手」だけを抜き出し、項目を守備選手名年俸(推定)の順番で並べたい時。
真っ先に思いつくのは以下の手順かと思います。

  1. 守備が「投手」以外の行をフィルター削除する
  2. 選手名と守備の列を入れ替える(切り取り・貼り付け)
  3. 使用しない列を削除する
新任
新任

これじゃいけないんですか?

人事のプロ
人事のプロ

条件を変えたり他の項目を追加したくなったら、また同じ作業を繰り返さないといけないでしょ?
元データの情報が更新された時も、全てやり直しというのは非効率的じゃない?

新任
新任

確かに…!
早くQUERYってやつを教えて下さい!

QUERY関数を使用すると、以下のようになります。

スプレッドシートでQUERY関数を使用して「投手」だけを抜き出し、項目を守備・選手名・年俸(推定)の順番で並べたキャプチャ
新任
新任

僕が知ってる関数(VLOOKUPとか)と何か違う…。
左上の1箇所しか入力してないし、なんか変な感じ。
でもたったこれだけで作業終了ですか?!

人事のプロ
人事のプロ

これがQUERY関数最も基本的な使い方よ。
まずはを覚えて、たくさん使って慣れること!

QUERY関数の構成をで表現すると、以下のようになります。

  • 式の前半では「どこから」という「参照範囲」を指定
  • select句で成り立つ後半では、その範囲から何を取ってくるかを指定
    • where句では、その列をどのように取ってくるかを指定
関数の仕組みを箱で例えており、「query」の中に「範囲(どこから)」と「列(何を)」を表す「select」が存在し、「select」の中に「行の条件(どのように)」を表す「where」が入っている図

以下の文字列をコピーして、早速使ってみましょう。(緑文字を置き換え)

=query('シート名'!$この列から:$この列まで,"select 列①,列②,列③ where 検索列='検索条件'",見出し行番号)

Copy
  • 前半の赤下線部分で参照先を指定
    • シートとセルの範囲を指定するだけ(VLOOKUP等と同様)
  • 後半の黄下線部分で条件を指定
    • select指定
      • 「▲▲と■■の項目だけ持ってきたい!」
        • 今回のケースでは、[D列]守備・[C列]選手名・[M列]年俸(推定)
          • 列は指定した順番で抽出される(前後してもOK)
      • select*にすると、前半の赤下線部分で指定した全ての列を抽出できる
      • 始まり終わりに「"(ダブルコーテーション)」をつける 忘れがち!
    • where指定
      • 「●●の人たちだけを抜き出したい!」
        • 今回のケースでは、[D列]守備=投手
      • 検索条件(文字)の始まり終わりに「'(シングルコーテーション)」をつける 忘れがち!
  • 見出し行番号は省略可
    • 参照先データの内容に基づいて推測される
      • 先程の「投手」を抽出した例では、見出し行番号「2」になるが、基本的には省略しても問題ない
QUERY関数の参照先データ
参照先データ
スプレッドシートでQUERY関数を使用して「投手」だけを抜き出し、項目を守備・選手名・年俸(推定)の順番で並べたキャプチャ
見出し行番号は「2」になるが、省略しても正しく見出しが引用されている
【補足】シートに関数をコピーする方法
  • 貼り付けたいセルにカーソルを合わせて「fx」欄に貼り付け
    • キーボード「F2」ボタン(セル編集)を押してから貼り付けでも可
スプレッドシートに関数をコピペするには、対象セルにカーソルを合わせて「fx」欄に貼り付けることを説明したキャプチャ

否定形による抽出(〜以外のもの全て)

「俺か俺以外か」というフレーズは「俺である」という肯定形(=)と「俺ではない」という否定形(<>)で成り立っている。

先程とは反対に、「野手(投手以外)」だけを抜き出し、項目を守備選手名年俸(推定)の順番で並べたい時。

読売ジャイアンツの選手データ
プロ野球データFreak2020年データより

方法は2種類あるので、それぞれ紹介します。

「<>(不等号)」を使用する場合

新任
新任

これはそのまま置き換えるだけですね!

人事のプロ
人事のプロ

等号(=)・不等号(<>)の関係性は数式内でも変わらないわ。

それより、もう一つの方がQUERYの様々な応用に使えるので覚えてちょうだい。

「not(文否定)」を使用する場合

新任
新任

ヒィーーー!

英語ムリィーーー!!

人事のプロ
人事のプロ

いやいや、中学1年生レベルよ!(というか関数ってそういうものだから…)

notが前につくと、後ろの文を否定することになるの。
D列(守備)「投手」一致(=)していない、という意味だから、不等号(<>)を使用した場合と同じ結果になるわね。

<>(不等号)」を使用する場合

=query('シート名'!$この列から:$この列まで,"select 列①,列②,列③ where 検索列①<>'検索条件①'")

Copy

not(文否定)」を使用する場合

=query('シート名'!$この列から:$この列まで,"select 列①,列②,列③ where not 検索列①='検索条件①'")

Copy

よくあるエラー事例(形式にうるさい関数)

「#VALUE!」の対処法

新任
新任

何度試しても「#VALUE!」となってしまい、もう挫けそうです…。

人事のプロ
人事のプロ

おそらく半角スペースシングルコーテーションダブルコーテーションが抜けていることが原因ね。
あとはカンマの使い方も確認してみて。
便利である反面、形式にうるさい関数なので、何度も使って覚えていきましょう。

よくあるエラー事例を以下に掲載しているので、どのパターンか(どこに原因があるか)確認して、改善にお役立て下さい

スプレッドシートでQUERY関数を使用したものの、whereの後に半角スペースが抜けているためエラーになっているキャプチャ
whereの後に半角スペースが抜けている
スプレッドシートでQUERY関数を使用したものの、selectの後の列と列の間がカンマではなく半角スペースのためエラーになっているキャプチャ
selectの後の列と列の間がカンマではなく半角スペース
スプレッドシートでQUERY関数を使用したものの、whereの後の検索条件末尾のシングルコーテーションが抜けているためエラーになっているキャプチャ
whereの後の検索条件末尾のシングルコーテーションが抜けている
スプレッドシートでQUERY関数を使用したものの、selectの後の列(アルファベット)が小文字のためエラーになっているキャプチャ
selectの後の列(アルファベット)が小文字
スプレッドシートでQUERY関数を使用したものの、selectの後の列またはwhereの後の列が前半で指定したセルの範囲外であるためエラーになっているキャプチャ
selectの後の列またはwhereの後の列が前半で指定したセルの範囲外

「#REF!」の対処法

新任
新任

今度は「#REF!」というエラーが出てしまい、もう帰りたいです。

スプレッドシートでQUERY関数を使用したものの、入力したセルと同じ行に値が入力されていたためエラーになっているキャプチャ
人事のプロ
人事のプロ

大したことじゃないわ。
その入力したセルの下とかに、何か値は入ってない?

新任
新任

あ、前に作業していたものが残っていました。
そして消したらエラー解決しました!

上表のように、関数を入力したセル同じ列(右方向)または行(下方向)値が入っているエラーになるため、事前にシートを全選択・消去しておくと安心です

今回は、QUERY関数基本について解説しました。

「形式にうるさい関数」であるため、見様見真似で使おうとしても、エラー解決できないまま嫌になってしまうこともあります。

まずは構造を体系的にインプットしてから、ひとつずつ覚えていきましょう。

次の記事では、より実務な内容として、ターゲットが明確で更に絞り込みたい時の「複数条件」と、逆に不明確でキーワード抽出したい時の「部分一致」について解説します。

タイトルとURLをコピーしました