みなさまこんにちは。本書をお手に取ってくださり、ありがとうございます。
私はVLOOKUP関数が好きです。VLOOKUP関数を知ったとき、「こんな便利なことができるのか!」と感動を覚えました。みなさんの中にも、そう感じた方が多いのではないでしょうか。
昨今は業務で取り扱うあらゆる情報(売上・損益・顧客・勤怠・人事情報など)がパソコンやクラウドに集約され、権限があれば一般の従業員でも部署単位・会社単位の大きなデータを出力できるようになりました。
大きなデータを目の前にしてもどう活用してよいのか、途方に暮れることも多いですよね。そのようなときには、ぜひQUERY関数を活用してください。
また大きなデータでなくても、日々更新される重要なデータをキャッチアップしたいときなどに、自分が見やすいように抽出・整理するにも、QUERY関数は有用です。
QUERY関数はGoogleスプレッドシート特有の関数です。QUERY関数はVLOOKUP関数に似たような機能を持ちますが、数種類ある「句」を組み合わせて用いることで、抽出・集計の幅が格段に広がります。
QUERY関数を習得することで、大きなデータでも臆することなく、自分に必要な情報を必要な分だけ抽出・集計できます。いままでトライしたことない角度での分析も容易に実現でき、さらに視野が広がると思います。
VLOOKUP関数を習得したら、ぜひ次はQUERY関数に挑戦してみてください。本書がその一助になるようにと願いながら執筆いたしました。
※本書の一部のサンプルデータを格納したGoogleスプレッドシートを用意しました。下記URLからコピーし、ご利用ください(予告なく配布を終了する場合があります。何卒ご了承ください)。
https://docs.google.com/spreadsheets/d/1wzpUGlrgkryC_kYRArTeV64WVFLirOhwl-YukP5usXY/copy
本章ではQUERY関数とその他の関数の実用例を比較し、QUERY関数の便利さをご紹介します。
たとえば、こんなケースはありませんか?
あなたは上司から「来月の研修参加メンバーが確定したから、参加社員一覧表を作成しておいて」と依頼されました。あなたの職場ではGoogle Workspaceが導入されており、全社員のデータベースがGoogleスプレッドシートに保存されているので、そのデータを活用して一覧表を作成するとします。
別途紙資料やメールなどで共有された「研修参加メンバー」を参照しながら、あなたはどうやってリストを作りますか?
一人ずつコピペするのもいいですが、人数が多い場合は面倒になり、手作業によるミスのリスクもあります。あなたがもしVLOOKUP関数を使えるのであれば、まず列Aに「社員番号」を入力していき、列B-EにVLOOKUP関数を用いることでしょう。
ただしこの場合、参加メンバーより多くVLOOKUPを仕込んでおくと、下記のようなエラー値が返ってきてしまいます。
IFERROR関数等を用いてエラーを回避する方法はありますが、そのひと手間が少々煩わしく感じられることもあるでしょう。これでは作表後に参加メンバーの増減があった場合、柔軟に対応できません。
このようなときには、ぜひQUERY関数を使ってみましょう。
まず準備として、全社員データベースの最終列に「研修参加対象」列を加え、チェックボックスを設けます。
次に、セルA2に以下の関数を入力します。
=QUERY(G2:L,"select G,H,I,J,K where L = TRUE")
すると、チェックボックスにチェックを入れたメンバーだけが列A-Eに表示されます。
いかがでしょうか。とてもシンプルな関数で、便利な仕組みが構築できました。
参加メンバーの変更があった場合でも関数を変更することは不要で、チェックボックスをオン/オフする作業のみですばやく柔軟に対応できます。
さらにQUERY関数なら、列の表示順の変更も簡単にできます。
列の表示順を以下のように変更したいとします。
社員番号,氏名,支社名,部署名,役職
↓
社員番号,氏名,役職,支社名,部署名
この場合、セルA2の関数を以下のように変更します。
=QUERY(G2:L,"select G,H,I,J,K where L = TRUE")
↓
=QUERY(G2:L,"select G,H,K,I,J where L = TRUE")
VLOOKUP関数を用いた場合はそれぞれのセルに入力した関数の引数をすべて変更しなければなりませんが、QUERY関数を用いると、一箇所の変更のみで実現できます。
QUERY関数、便利ですね!
次項で別のケースを見てみましょう。
売上データベースからある条件に合致したデータを抽出する、というタスクがあるとします。
下記のスプレッドシートで、売上データベースである列F-Iは、売上があるごとに最終行にデータが追記されます。
このスプレッドシートの列A-Dに、
・売上金額が50万円以上のデータのみ抽出
・売上日は新しい順に並び替え
……とすると、どのような方法が考えられるでしょうか。
ポピュラーな方法のひとつとして、FILTER関数とSORT関数の併用があります。FILTER関数とSORT関数はともに非常に便利な関数で、よく利用されます。
このケースの場合、セルA3に以下の関数を入力します。
=SORT(FILTER(F3:I,I3:I >= 500000),1,FALSE)
すると、以下のように抽出&並び替えが実現できました。
FILTER関数とSORT関数の併用でも十分に便利なのですが、ここでもぜひQUERY関数を使ってみましょう。
セルA2に以下の関数を入力します。
※セルA2-D2にあらかじめ入力していた項目名は削除します。
=QUERY(F2:I,"select F,G,H,I where I >= 500000 order by F desc")
すると、FILTER関数とSORT関数の併用と同様の結果が得られました。
QUERY関数を用いると、複数の関数を組み合わせることなく、ひとつの関数でさまざまな抽出/並び替えが実現できます。
また、QUERY関数では項目名も元データを参照し返してくれるので、非常に便利です。
なおSORT関数の場合、第二引数である「並べ替え基準列」を「列番号」で指定する必要がありますが、QUERY関数では列のアルファベット(A1参照形式)で指定できるので、直感的に理解しやすいです。
前出のケースの応用として、このスプレッドシートの列A-Dに
・売上金額が50万円以上のデータのみ抽出
・売上日は新しい順に並び替え
・請求先は(株)MMM社または(株)LLL社のみ絞り込み
……となると、FILTER関数&SORT関数の併用では少々面倒になります。
=SORT(FILTER(F3:I,(I3:I >= 500000)*
((H3:H = "(株)MMM")+(H3:H = "(株)LLL"))),1,FALSE)
FILTER関数によるAND/OR条件の絞り込みでは、「*(=AND)」と「+(=OR)」記号を用いることになります。この記号、直感的な理解には少々慣れが必要ですね。
また、AND/OR条件併用時のネストが少々深くなり「カッコ」の数が増えてしまうので、カッコの数や位置に注意しながら関数を構築する必要が生じます。
QUERY関数を用いるとどうなるでしょう。
=QUERY(F2:I,"select F,G,H,I where I >= 500000 AND
(H = '(株)MMM' OR H = '(株)LLL') order by F desc")
「*」「+」記号ではなく「AND」「OR」を用いることができるので理解しやすく、またFILTER関数よりAND/OR条件併用時のネストが浅く済み、よりシンプルになります。
以上の2例のように、QUERY関数とそれ以外の関数では同様の結果が得られますが、QUERY関数を用いると関数式がよりシンプルになったり、直感的な理解を得られたり、ひとつの関数なのに、より多様な応用が実現できます。
それでは次の章で、QUERY関数の基本的な使い方を見ていきましょう。