エクセル関数の代表格?と言っても良いVLOOKUP関数。就職の面接やあるいは実務などでエクセルの話になり、「エクセル使えます」、「エクセルの関数わかります」、「VLOOKUP 理解しています・使えます」といった感じで、エクセルのスキルを確認する際にVLOOKUP 関数が指標的な感じになってたりします。
実際に実務でも使用する機会が多いと思いますし、VLOOKUPを理解し始めて初めて職場で使用しているエクセルファイル上で駆使出来た時の感動は自動化できた感動とVLOOKUP関数を理解、駆使出来た喜びで半端ないと思います。一度理解できれば、様々なエクセルのシートで応用、駆使することが出来ると思いますし、長期にわたってお世話になる関数の一つだと思います。
では、VLOOKUP関数とは何ぞやという方に説明していきたいと思います。
VLOOKUP は任意のデータを自動的に表示させる
VLOOKUP はあるデータを入力するとそれと関連のあるデータを自動的に抽出あるいは表示させることが出来ます。下は簡単な例です。
B列に支店番号とC列に支店名のテーブルがあります。セルG2に VLOOKUP 関数が設定されていて、セルF2に101と入力するとセルG2に東京支店というデータが自動的に表示されるようになっています。そしてセルF2に102を入力すれば大阪支店が、103と入力すれば福岡支店がセルG2に表示されるわけです。このような場合、VLOOKUP 関数を使用するとセルG2に「東京支店」などと入力せず、セルF2に「101」など3ケタの番号を入力すれば、自動的にセルG2に「東京支店」表示することが出来、入力の手間を少なくすることが出来るわけです。
下の例ではデータがわずかですが、もし実務で使用するファイルが支店数や営業所などが100近くあって、G列に表示させたいデータの数も50とかあった場合に「東京支店」など全て手入力で入力していたら、とんでもない時間がかかってしまいます。このようにVLOOKUP 関数はあるデータを入力した時に関連する別のデータを自動的に表示させることができます。

実務でVLOOKUP関数を使用するケース
実務では支店番号と支店名に限らず、商品コードと商品名、従業員番号と従業員の氏名あるいはマンションなどの部屋番号と賃借人、あるいは郵便番号と住所などエクセルを使用する部署や仕事内容などによって様々な組み合わせが想定されます。また、関連するデータは2つとは限らず例えば支店番号、支店名、売上、月など複数あることが通常です。
また、実務では上の例のような簡単なケースで VLOOKUP 関数を使用することはまずないでしょう。IT が進化し、どの企業も売り上げや従業員管理、商品管理などをソフトウェア、アプリケーションあるいはERPなどのシステムを導入して管理や分析に使用しています。そして、そのデータ量は数千、数万など膨大で、いちいち全てをエクセルのシートに手入力して月ごと、年ごとの分析などをするなんてことはしません。実際には多くのソフトウェアやアプリケーション、システムはエクセルにデータやレポートを吐き出す機能を備えています。エクセルに吐き出されたその膨大なデータを編集、加工して各自で分析したり社内での会議や上司への報告に使用するというケースが大半ではないでしょうか?
VLOOKUP 関数を駆使すれば、その編集、加工という作業が高速化、自動化できるわけです。上司が「xxのデータ(あるいはレポート)を送って」と言った時に、「はい、わかりました」と言ってそこから手入力で3時間かけて上司に送るのと、関数を駆使して5分、10分で上司に送るのでは、上司の評価が全然違うであろうというのは想像に難くないと思います。もし、3時間の仕事が10分でできれば、その差の2時間50分を別の仕事に費やすことが出来るわけです。それは「生産性が高くなる」あるいは「会社に価値をもたらす」ということができるわけです。
VLOOKUP 関数の基礎
下のケースではE列の住所にVLOOKUP関数が使用されています。D列に郵便番号を手入力するとファイル内の別のシートにあるデータから該当の郵便番号の住所を表示するようになっています。`つまりD列に郵便番号さえ入力すればE列には都道府県から町名までは自動的に表示されるわけです。後は丁、番地、マンション名等を入力するだけで良い状態になっています。


郵便番号と住所のデータは下記の日本郵便のページからダウンロードできます。
郵便番号データダウンロード - 日本郵便 (japanpost.jp)
VLOOKUP 関数の数式の意味
上の例では =VLOOKUP(D5,KEN_ALL!C:P,14,FALSE) という数式がセルE5に入力されています。この式の意味は:
- セルD5に入力されている郵便番号(=2520004)を別シート(=シート名;KEN_ALL)のC列から探し出し
- 該当する郵便番号があれば、そこから右に14列移動したところのセルの情報(P列)を表示する
という意味です。FALSE は検索の値=2520004が絶対値であるという条件を課しています。ここでいう絶対値とは一言一句同じであるという意味です。数字が一つでも違ったりスペースの有無の違いなども許されません。もしゼロの数がひとつ少なければ該当する郵便番号がないとみなされVLOOKUP関数は住所を表示しません。

別シートには日本全国の郵便番号のリストが上記のリンクからダウンロードされていて、C列に郵便番号が入力されています。P列には都道府県から町名までが一続きに入力されていますが、郵便局からデータをダウンロードするとP列は空白でG列に都道府県名、H列に市区名、I列に町村名が入力されているだけです。なので、私の方でP列に数式を入力しG列からI列の情報をつなげています。
実務でVLOOKUP 関数が使用されるケース(一例)
VLOOKUP 関数の働きは上記の通りですが、実際に企業で働くと多くの企業で売上や従業員のデータ管理などをソフトウェアやERPなどのシステムで管理されていてそこから必要なデータやレポートが作成されることがほとんどです。なので、そのシステムであらかじめ用意されている既定のレポートで十分であれば、何もエクセルに吐き出して加工したりする必要もなく、そのレポートをPDFに出力してそのまま送れば良いわけです。実際にそのようなケースも少なくないと思います。
ただ、同じ業界でも企業同士の競争がありますし、各企業で強みや弱みも違ったりすることで、その時々で分析内容や欲しい情報が少しずつ変わってきて既定のレポートでは足りない情報があってそのまま送るわけにはいかない、あるいは複数のシステムを駆使していて2つのシステムからデータを吐き出して組み合わせないとレポートが作成できないといった状況が実務では多々あります。そんな時はシステムから一旦エクセルにデータを吐き出し、データを統合、加工、編集等をした後、レポートとして上司等に送らないといけないという作業が必要です。実務ではそのような時にVLOOKUP 関数を駆使する場面があります。下で売上日報の簡単な例を示します。
まず、前提として:
- このファイルでは日々の商品ごとの売上を記録し日報として社内の各部署にメールで送信する
- ファイル内には1日から月末までのワークシート(シート1から31まで)と月計のワークシートの合計32シートがある
- 日々の売上データを社内のシステムから日々のワークシート(シート1から31)のB列からF列に吐き出され、商品ごとの売上合計がH列からJ列に集計されている
- 月計でVLOOKUPを使用して日々のワークシートから商品ごとの売上金額を表示させる
という設定にします。
さて、下のワークシートは6月1日及び6月2日のワークシート(シート1と2)で、B列からF列にシステムから吐き出したデータ、H列からJ列に商品ごとのその日の売上合計を関数を駆使して出しています。この日々のワークシートは上述の通り1から31まであります。


そして月計のワークシートを別途設けて、その月の日々の売上表示するそんな感じのファイルです。VLOOKUP関数はワークシート「月計」の商品ごとの日々の売上金額のセルに入力されています。

こうすれば、シート1から31までのB列からF列にシステムから売上データを吐き出し、H列からJ列に商品ごとの日々の売上金額を関数で自動的に集計するようにしておけば、ワークシート「月計」は日々のデータをエクセルに吐き出すだけで自動的に作成されます。
VLOOKUP 関数よりINDEX・MATCH関数?
VLOOKUP 関数を習得したいと思ってネットで検索すると「VLOOKUP 関数は使えない。INDEX・MATCH 関数を使用したほうが良い」といった趣旨の説明をしているサイトがたくさんあります。INDEX・MATCH 関数とはINDEX 関数とMATCH 関数の2つの関数を合わせて使用する方法です。実務では1つの関数だけではパワー不足で複数の関数を組み合わせて使うことがほとんどです。INDEX・MATCH関数はその典型例です。INDEX・MATCH関数の詳細な説明はここでは控えますが、何故 VLOOKUP 関数より INDEX・MATCH 関数なのでしょうか?VLOOKUP 関数のどこがダメなのでしょうか?
VLOOKUP 関数は左側にあるデータを表示できない

上の郵便番号から住所を自動的に表示させる例では郵便番号がC列にあり、住所がP列にあります。P列はC列の右側にあり、VLOOKUP関数はこの場合には機能します。では、もし住所のデータがP列でなくB列にあった場合はどうなるでしょうか?VLOOKUP 関数だとこのような場合うまく機能しません。これが VLOOKUP 関数が使えないと言われる理由です。会社で使用されているソフトウェアのデータの吐き出し方によっては自動的に表示させたい情報が検索値(郵便番号=C列)の右側にあれば良いのですが、左側にはきだされてしまうと VLOOKUP 関数を使用することができません。VLOOKUP を使用したいなら左側にある郵便番号の列をコピーして右側の列に貼り付けるという作業が発生します。これは作業を自動化するという観点からは矛盾することになり、1度だけならまだしも売上日報のように毎日の作業となると非常に億劫ですし、作業効率が悪くなります。そのような場合にはINDEX・MATCH関数を使うのが有効です。
ただ、右側にデータがあれば何の問題もないので「使えない」というのは言い過ぎかなと個人的には思いますし、VLOOKUP 関数は関数自体それほど複雑でなく実務で何度も使用するので自然に覚えていきます。一方、INDEX・MATCH 関数も実務で使用する頻度は高いですが、INDEX 関数と MATCH関数の2つを理解してないといけないですし、2つをどのように組み合わせるかというのを理解するのも初心者の方には最初理解するのに苦労すると思うので、VLOOKUP 関数を使えるときは積極的に使うと良いかと思います。