ビジネスに必須のVLOOKUP関数
ExcelのVLOOKUP(ブイ・ルックアップ)関数は、表を縦方向に検索し、特定のデータに対応する値を取り出す機能を持つ関数です。商品IDから商品の単価を取得したり、顧客名から住所を取得したりなど、業務でよく行う処理を効率的に行えるため、ビジネスに必須の関数として知られています。
代表的な利用例を見てみましょう。以下の表ではVLOOKUP関数を使い、セルA3で指定した商品IDに対応する商品名と単価を「商品マスタ」の表から取り出しています。
VLOOKUP関数の利用例
セルB3/C3にVLOOKUP関数が入力されており、セルA3に入力された商品ID「S1-002B」に対応する商品名と単価を「商品マスタ」から取り出しています。
上記の例はかなり単純化しているので、目視でも何とかなると思うかもしれません。しかし、商品マスタが何百・何千行とある表だったら、商品IDを目視で確認して商品名と単価を手入力していくのは効率が悪く、ミスの原因にもなります。
しかし、VLOOKUP関数を使えば目視での手作業は不要になり、圧倒的な時短とミスの防止を実現できます。数あるExcel関数の中でも、VLOOKUP関数が屈指の人気を誇っているのは、そのような理由からです。
一方で、VLOOKUP関数は引数の指定が複雑で、Excel関数を学ぶ人にとって最初のハードルになりがちです。自分で表を作成する場合だけでなく、他人から引き継いだファイルにVLOOKUP関数が含まれている場合もあり、どのような動作をしているのか読み解くのにも苦労することもあるでしょう。
本記事ではVLOOKUP関数を「初めて使う」「ちゃんと使える自信がない」「久しぶりに使おうとしたら忘れてしまった」という人のために、VLOOKUP関数の使い方を解説します。
VLOOKUP関数の構文
まず、VLOOKUP関数の構文を確認しましょう。
=VLOOKUP
(検索値, 範囲, 列番号, 検索の型)
VLOOKUP関数には4つの引数(ひきすう)がありますが、ポイントとなるのは1つめ~3つめの引数です。それぞれ以下のような意味があります。
- [検索値] ...... どのデータで
- [範囲] ...... どこを検索して
- [列番号] ...... どの列にある値を取り出すか
4つめの引数[検索の型]は、いったん置いておきます。
先ほどの例をあらためて見てみましょう。セルB3(商品名を取得するセル)のVLOOKUP関数の引数は、以下のように指定されています。
VLOOKUP関数の第1・第2引数の指定
セルB3のVLOOKUP関数では、[検索値]にセルA3(商品ID)、[範囲]にセルA7~C17(商品マスタ)が指定されています。なお、[範囲]に表の見出しは含めても含めなくても構いません。
注意点としては、[検索値]の検索対象は[範囲]の左端の列(左から1列目)にしておくことが必須となります。左から2列目や3列目を検索することはできません。この例の場合、仮に[検索値]として「商品名」を指定したいなら、[範囲]の左端の列が「商品名」となるように、あらかじめ商品マスタの表を整えておく必要があります。
3つめの引数[列番号]は、[範囲]で指定した表のうち、取り出したい値がある列が左から何列目にあるかを意味します。この例のセルB3では、商品マスタの2列目にある「商品名」を取り出したいので「2」としています。セルC3では「単価」を取り出したいので、3列目の「3」を指定することになります。
VLOOKUP関数の第3引数の指定
セルB3のVLOOKUP関数では、[列番号]に「2」を指定しています。これは[範囲]、つまり商品マスタの表の左から2列目にある「商品名」を取り出すという意味になります。
4つめの引数は「FALSE」が基本
VLOOKUP関数の4つめの引数[検索の型]は、検索する値が見つからない場合、どのように処理するかを決める引数です。「TRUE」または「FALSE」で指定し、省略した場合は「TRUE」と同じ扱いになります。
例えば、[検索値]に一致するデータが見つからないとき、[検索の型]が「TRUE」の場合は[検索値]以下の最大値を一致する値として取り出します。「FALSE」ではエラーを返します。
とはいえ、VLOOKUP関数では完全に一致する値を探すことのほうが多いはずです。そのため、少々乱暴ではありますが、とりあえず[検索の型]は「FALSE」にすると覚えてください。
VLOOKUP関数の第4引数の指定
VLOOKUP関数の4つめの引数[検索の型]は、「TRUE」または「FALSE」で指定します。しかし、多くの場合は完全に一致する値を検索することが多いため、4つめの引数は「FALSE」にすると覚えてしまっていいでしょう。
VLOOKUP関数の入力方法
ここまでの説明を踏まえて、実際にVLOOKUP関数の数式を入力する手順を見ていきましょう。先ほどの例のセルB3に入力していきます。
1数式の入力を開始する
VLOOKUP関数で求めた値を表示したいセル(ここではセルB3)を選択し、「=VLOOKUP」と入力します。
2第1引数[検索値]を指定する
「(」を入力し、1つめの引数[検索値]となるセル(ここではセルA3)をクリックします。直接「A3」と入力しても構いません。
3第2引数[範囲]を指定する
「,」を入力し、2つめの引数[範囲]となるセル(ここではセルA7~A17)をドラッグして選択します。選択範囲を間違えたときは、ドラッグをやり直せばOKです。
4第3引数[列番号]を指定する
「,」を入力し、3つめの引数[列番号]を指定します。ここでは商品マスタの表の左から2列目にある「商品名」を求めたいので「2」と入力します。
5第4引数[検索の型]を指定する
「,」を入力し、4つめの引数[検索の型]として「FALSE」を指定します。これで[検索値]と完全に一致する値のみが検索されるようになります。
6数式の入力を完了する
「)」を入力して[Enter]キーを押し、VLOOKUP関数の数式の入力を完了します。結果、セルB3に商品ID「S1-002B」に対応する商品名が表示されました。
同じ要領で、隣のセルC3にもVLOOKUP関数を入力します。セルC3では「単価」を取り出したいので、3つめの引数[列番号]に「3」と指定します。
セルB3/C3の数式は、それぞれ以下のようになります。3つめの引数[列番号]が違うだけで、ほかの引数は同じであることが分かります。
=VLOOKUP(A3,A7:C17,2,FALSE) =VLOOKUP(A3,A7:C17,3,FALSE)
[検索の型]の「FALSE」と「TRUE」の違い
VLOOKUP関数の基本を理解できたところで、4つめの引数[検索の型]の「FALSE」と「TRUE」の動作の違いについて、あらためて確認していきましょう。
[検索の型]を「FALSE」とした場合、これまでの例のように、1つめの引数[検索値]に完全一致する値を検索します。一方、「TRUE」とした場合、[検索値]以下の最大値を一致する値(近似一致)と見なします。
以下の例を見てください。セルB3/C3にVLOOKUP関数の数式が入力されており、[検索値]を「200」、[範囲]をセルA6~A16、[列番号]を「1」としているのは同じですが、[検索の型]には、それぞれ「FALSE」と「TRUE」を指定しています。
VLOOKUP関数の[検索の型]の違い①
セルB3/C3に、4つめの引数[検索の型]を「FALSE」と「TRUE」にしたVLOOKUP関数が入力されています。
VLOOKUP関数の入力を確定すると、別々の結果が表示されました。[検索の型]が「FALSE」の場合は「200」、「TRUE」の場合は「150」という値が取得されています。
[検索の型]が「FALSE」の場合は完全一致した値を取得するため、正確に「200」を取得できました。一方、[検索の型]が「TRUE」の場合は近似一致となるため、先頭から「200」を検索して「200」以下の最大値、つまり「150」が近似値として取得されたわけです。
[検索の型]で「TRUE」と指定するケースとしては、営業成績や予算などの表で、一定の基準値以下の最大値を探したいときなどが考えられます。ただし、VLOOKUP関数は[範囲]の左端の列を先頭から検索する、という点に注意が必要です。
上記の例で[範囲]に指定されている「数値」の表をよく見ると、「200」という値があります。よって、「200」以下の最大値なら「200」が該当するはずですが、上記の例では「150」が取得されていました。これは「数値」の表が昇順(小さい順)になっていないためです。
このような誤動作を防ぐには、[範囲]の左端の列をあらかじめ昇順(小さい順)に並べ替えておきます。以下の例では[検索の型]が「TRUE」の場合に、「200」以下の最大値である「200」を取得できています。
VLOOKUP関数の[検索の型]の違い②
[範囲]の左端の列を昇順(小さい順)に並べ替えた状態です。[検索の型]が「TRUE」でも「200」と取得されました。
[範囲]は列単位で指定すると安心
実際にビジネスシーンでVLOOKUP関数を使う場合、2つめの引数[範囲]で指定する「商品マスタ」や「顧客マスタ」のような表は、別のワークシートに用意されていることが多いのではないでしょうか。
そして、商品マスタや顧客マスタの表には、時間の経過とともに新しいデータが追加されていく状況が容易に想像できます。
VLOOKUP関数の[範囲]が別のシートにある場合
VLOOKUP関数の[範囲]として指定したい商品マスタの表が、同じファイル(ブック)内の別のワークシートに用意されています。商品が追加されるたび、表のデータも更新されます。
VLOOKUP関数の[範囲]はワークシートをまたいでも指定できるので、その点に問題はありません。しかし、参照先の表に新しいデータが追加される可能性を考慮しておかないと、思わぬミスにつながることがあります。
上記の例で商品マスタに商品が追加されると、表は縦方向に伸びていきます。このとき、VLOOKUP関数の[範囲]を「セルA2~C12」のように指定していると、商品が追加されるたびに、その引数を修正しなければなりません。
このような問題を回避するには、[範囲]を列単位をまとめて選択するのがおすすめです。以下の手順のように指定しましょう。
1VLOOKUP関数と第1引数[検索値]を入力する
セルB3を選択して、数式バーに「=VLOOKUP(A3」と入力します。
2第2引数[範囲]を指定する
「,」を入力して、参照するワークシート(ここでは[商品マスタ])に切り替えます。
A列からC列の列見出しをドラッグします。このように操作することで[範囲]が列単位で指定されます。数式バーには「商品マスタ!A:C」と表示されます。
3第3引数と第4引数を指定する
「,」を入力して[列番号]の「2」と[検索の型]の「FALSE」を指定します。
4数式の入力を完了する
「)」を入力して[Enter]キーを押します。ワークシートが切り替わり、セルB3に商品ID「S1-002B」に対応する商品名が表示されました。
冒頭の例と同様に、セルC3に入力するVLOOKUP関数には[列番号]を「3」と指定して単価を取り出します。セルB3とセルC3の数式は、それぞれ以下のようになります。
=VLOOKUP(A3,商品マスタ!A:C,2,FALSE) =VLOOKUP(A3,商品マスタ!A:C,3,FALSE)
「A:C」とA列からC列を列単位で指定していれば、商品マスタの表に商品が追加されても、VLOOKUP関数の数式を変更する必要はなくなります。数式も単純になって分かりやすくなりました。
VLOOKUP関数と参照する表が同じワークシートにあるときでも、[範囲]を列単位で指定する方法はおすすめです。以下のように表の構造を変えて試してみてください。
VLOOKUP関数の[範囲]を列単位で指定した例
同じワークシートの表を参照するときでも、[範囲]を列単位で指定する方法はおすすめです。数式がすっきりするほか、表にデータが追加されたときにVLOOKUP関数の数式を修正する必要がなくなります。