エクセルのVLOOKUP関数について基本技と応用技を解説!

エクセルのワークシート上の数値や文字列を検索したい場合、いくつか方法があります。

例えば、Ctrl + Fの検索機能やソート機能、フィルタ機能を使う方法の他、ワークシート関数のMATCH関数やVLOOKUP関数、VBAでのFINDメソッドを使う方法などです。

MATCH関数を使う方法は、別記事「VBAでも使えるMATCH関数!文字列をシート内検索する方法」で解説しています。

本記事では、「VLOOKUP関数で数値や文字列を検索する方法」を解説します。

1.VLOOKUP関数の構文

こんにちは。エクセルマン・ブリーダーのしもむぎ(@re_znd13)です。

まずVLOOKUP関数の基本的な情報を見ていきましょう。

VLOOKUP関数は列を下方向に(つまりVerticalに)検索する関数です。

その構文は以下の通りです。

=VLOOKUP(検索値,範囲,列番号,[検索方法])

2.VLOOKUP関数の基本技

下の画像は、VLOOKUP関数の基本的な使用例です。

A列に番号、B列にひらがなを入力してあります。

D1セルにVLOOKUP関数を使った式を入力していて、上記構文でいうところの検索値として「5」、範囲として「A1:B10」、列番号は「2」と設定しています(検索方法は省略)。

D1セルのVLOOKUP関数は、範囲「A1:B10」の最左列から、検索値「5」を探し、列番号「2」つまり範囲内の二列目であるB列の内容「なにぬねの」を返しています。

このように「列の下方向へ検索し、ヒットした行で右方向のデータを取り出す」というのが基本的なVLOOKUP関数の使い方です。

3.VLOOKUP関数の応用技(商品一覧と請求書)

VLOOKUP関数を応用した使い方として、商品一覧と請求書の作り方を紹介します。

完成イメージは以下の2つの画像を見てください。

一枚目の画像は商品一覧の例です。

独立したシートに、発注コードや型名、商品名、単価などが入力されています。

二枚目の画像は請求書の一例です。

具体的には、御請求明細という表のC11~C20セルで発注コードをプルダウンリストから選択すると、商品一覧シートから型名、商品名、単価がD~F列に表示され、G列にそれぞれの個数を入力すると各項目の金額をH列に出力します。

明細の表の下部にある小計や消費税、総額というのは、自動的に計算されるようになっています。

このような商品一覧と請求書をひとつのファイル(ブック)内に作成する方法を、注意点を踏まえて解説していきます。

作成手順は以下です。

  1. 商品一覧(マスターデータ)を作成
  2. 請求書のテンプレートを作成
  3. 御請求明細において発注コードをプルダウンリストとして設定
  4. 発注コードから各項目を検索して表示
  5. 自動計算部分を設定

3.1 マスターデータ作成上の注意点

手順に沿って注意点を見ていきましょう。

【1.商品一覧(マスターデータ)を作成】のステップでは、一覧表の列順に注意する必要があります。

後工程で発注コードを呼び出すようにしますので、最左列(ここではA列)には発注コードを配置します。

VLOOKUP関数では設定した範囲の最左列を検索の対象とするためです。

例えば、商品名で検索したい場合は商品名を最左列に配置します。

3.2 出力データ作成上の注意点

【2.請求書のテンプレートを作成】のステップでは、出力データとして請求書のテンプレートを作成しましょう。

今回の例では、下画像の青いセルのみを入力セルとし、その他のセルは固定値、もしくは自動計算としています。

3.3 VLOOKUP関数の検索値設定の注意点

【3.御請求明細において発注コードをプルダウンリストとして設定】のステップでは、下画像のように、発注コードを選択肢として表示させるプルダウンリストを設定します。

次のステップで、VLOOKUP関数を使った検索をさせますが、検索値とする発注コードを間違いなく入力するための工夫です。

「100-004」というすべて半角の発注コードを選択している例ですが、「100-004」(すべて全角)や「100-004」(ハイフンが全角)という誤った発注コードが入力されないようにしているのです。

プルダウンリストの作成方法は、別記事「エクセルでプルダウンリストを追加する方法を解説します!」を参照ください。

3.4 VLOOKUP関数使用上の注意点

【4.発注コードから各項目を検索して表示】のステップで、VLOOKUP関数の出番がやってきます。

D11セルに入力した式(以下)を見てください。

=IF(C11="","",VLOOKUP($C11,商品一覧!$A$2:$D$19,D$1))

ただVLOOKUP関数で呼び出すのではなく、いくつかの工夫を施しました。

ひとつめの工夫はIF関数による空白処理です。

C列で発注コードをプルダウンリストから選択していますが、不要なセル(C14~C20セル)では空白になっていますね。

検索値が空白の場合、VLOOKUP関数は「#N/A」というエラーを返してしまうためです。

IF関数で空白を処理する方法は別記事「エクセルでif関数を使う方法!重要な論理式4パターンを解説!」を参照ください。

もうひとつの工夫は、VLOOKUP関数において要設定の「列番号」部分です。

第1章で確認した構文を思い出してください。

VLOOKUP関数では、設定した範囲のうち、どの列番号を呼び出すのかを設定する必要がありました(省略不可)。

この列番号は数値で設定する必要がありますが、コピペやオートフィルで他のセルに同じ式を適用する場合には少し不便です。

そこで、今回の例では1行目に列番号をあらかじめ入力し、それを参照するようにしています。

ちなみに、B2:I26のセル範囲以外はグレーアウトされていますが、これは印刷範囲外に設定しているためです。

印刷されない範囲である1行目に列番号を入力しておくという工夫です。

このコピペやオートフィルのための処理は、他の方法も考えられます。

例えば、下の画像では、COLUMNS関数を用いました。

COLUMNS関数は範囲の列数を返す関数です。

起点とするA列は絶対参照とし、終点とする列は相対参照(ただし行方向は絶対参照)とすることで、コピペやオートフィルに対応しています。

他に考えられる方法としては、COLUMN関数がありますが、COLUMN関数は絶対参照で列番号を返すため、マスターデータ(この場合、商品一覧)がA列を起点としない場合など注意が必要です。

あえてCOLUMN関数を使用する場合は以下の式でOKです(ただし、D11セルの式として)。

=IF(C11="","",VLOOKUP($C11,商品一覧!$A$2:$D$19,COLUMN(商品一覧!B$1)-COLUMN(商品一覧!$A$1)+1))

またMATCH関数を使う方法も考えられます。

MATCH関数を使用する場合は以下の式でOKです(ただし、D11セルの式として)。

MATCH関数を使う場合の利点は、マスターデータである商品一覧の列順が変更された場合にも、項目を参照して(下式ではD10の「型名」)いるため、対応可能であることです。

=IF(C11="","",VLOOKUP($C11,商品一覧!$A$2:$D$19,MATCH(D10,商品一覧!$A$1:$D$1)))

3.5 その他関連セルの注意点

【5.自動計算部分を設定】では、大きな工夫はしていませんが、金額欄では空白処理をしています。

■御請求金額の値は、右下の総額のセルを参照して、記載ミスを回避している点もひとつの工夫です。

4.まとめ

本記事では、「VLOOKUP関数で数値や文字列を検索する方法」を解説しましたが、いかがでしたか?

多大なデータ群から所望の数値や文字列を検索する上でとても便利な関数ですが、マスターデータを作成したり編集したりする際には注意が必要であることがわかりました。

第3章で解説した工夫点を盛り込み、ロバスト(堅固)でミスを誘発しないファイル(ブック)を作成することを心がけましょう。