見習いエンジニアがゆく

見習いエンジニアの勉強帳 VBA・NWなどなどITの勉強用ブログです。のんびり、のんびり。

【Excel入門】【関数】VLOOKUP

この記事では、VLOOKUP関数の使い方を学びます。

 

 

VLOOKUP関数の構文・解説

まず、VLOOKUP関数の構文を見ていきます。

 

構文

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

 

引数

  • 検索値:『範囲』から検索する値
  • 範囲:検索する値と表示するデータを含むセル範囲
  • 列番号:『範囲』の中で表示したい列
  • 検索方法:検索値が範囲の中に見つからない場合にエラーと近似値のどちらを表示するかを指定

 

VLOOKUP関数の検索方法について 

検索方法に「True」もしくは「1」もしくは「省略」を指定すると、検索値が見つからない場合に検索値未満で最も大きい値が返されます。

※範囲の左端の列のデータを昇順に並べ替える必要があります。

 

検索方法「False」もしくは「0」を指定すると、検索値に完全一致する値だけが検索されます。見つからない場合は、エラーの「#N/A」が返されます。

 

検索方法については、「True」「1」「省略」の近似値検索を使うことは、ほぼほぼありませんので、VLOOKUP関数では「False」「0」で完全一致検索をすると覚えておけばいいと思います。

また、「False」を指定するよりも「0」を指定する人の方が多いので、検索方法は「0」を指定して、完全一致検索と覚えておいてもいいかもしれません。

 

解説

VLOOKUP関数は、検索値が範囲にある場合は、範囲の中で表示したい列の値を表示します。

また、検索値が範囲に存在しているかどうか見ることもできます。

 

解説だけでは分かりずらいので、いくつかの使用例を書きますので、実際にVLOOKUP関数を使って覚えましょう。

 

VLOOKUP関数の使用例

VLOOKUP関数の引数を考える

f:id:melancholy198x:20190505034508j:plain


受注表のコード列にコードを入力したら、品名をコード表から取得して返すパターンを考えたいと思います。

 

検索値は「受注表」のコード列のセルに入力される値です。「受注表」のコード列に入力された値をもとに検索をするので、「A4」、「A5」、「A6」・・・・となっています。

 

範囲検索値を探して、値を返す範囲ですので「受注表」のコード列「101」が入力されている「G4」から「単価」列の「200」が入力されている「I7」までを範囲としました。

※この例の場合は、検索値のコードから品名を返すので、コードと品名が含まれる範囲「101」の「G4」から「消しゴム」の「H7」まででも良いです。

 

列番号は検索値が範囲の中にある場合、合致したデータから何列目の値を返すかを指定するので、「2」を指定します。

受注表は「コード」、「品名」と並んでいるのため、2列目の品名を返すために「2」を指定します。

 

検索方法は「0」を指定。間違えたコードを入力した場合に近似値の値を返さないために完全一致の検索を指定しています。

 

受注表のコード列にコードを入力すると、品名を返します。

f:id:melancholy198x:20190505035452j:plain

 

 

検索するコードの品名・単価をコード表からVLOOKUP関数で返す

今回は品名だけでなく、単価も返すようにしています。

品名列には「=VLOOKUP($A4,Sheet2!$A$1:$C$6,2,0)」をコピー&ペーストして入力しています。

コピー&ペーストで参照先がずれないように、絶対参照($)を使っています。

単価列には「=VLOOKUP($A4,Sheet2!$A$1:$C$6,3,0)」をコピー&ペーストして入力しています。

f:id:melancholy198x:20190504015052j:plain

 

以下がSheet2のコード表です。

f:id:melancholy198x:20190504015143j:plain

 

VLOOKUPの引数を見てみましょう。

品名は「=VLOOKUP($A4,Sheet2!$A$1:$C$6,2,0)」、単価は「=VLOOKUP($A4,Sheet2!$A$1:$C$6,3,0)」で値を返しています。

 

検索値は「$A4」。上図の手入力したコード「102」です。セルでいうと「A4セル」です。

範囲は「Sheet2!$A$1:$C$6」。コード表を記入したシート2のA1:C6セルです。

列番号は品名が「2」、単価は「3」です。検索値と一致する値がある行の品名は2列目、単価は3列目の値を返します。

検索方法は完全一致の「0」。

 

なので、A4セルの検索値と完全一致するコード表の行の2列目の値、3列目の値を返しています。

 

コードを入力していない「品名」、「単価」は「#N/A」のエラー値ですが、コードを入力すると品名と単価が表示されるようになっています。

 

ただし、「#N/A」が表示されていると不格好なので、IFERROR関数を使って、エラーが表示されているとき、エラーを表示しないようにすることができます。

 

IFERROR関数を使ってエラーを非表示にする

f:id:melancholy198x:20190504021349j:plain

 

品名には「=IFERROR(VLOOKUP($A4,Sheet2!$A$1:$C$6,2,0),"")」

単価には「=IFERROR(VLOOKUP($A4,Sheet2!$A$1:$C$6,2,0),"")」をコピー&ペーストすることでエラーが表示されなくなりました。

 

VLOOKUP関数の式をIFERROR関数の()で囲んで、エラーになった時に何も表示させない「""」を指定しています。

IFERROR関数については、後日記事にしたいと思います。

 

VLOOKUP関数を使って「検索値」の存在確認をする

f:id:melancholy198x:20190505040148j:plain

VLOOKUP関数は、検索値が存在するかどうかを調べるために使うこともあります。

※COUNTIF関数などでも存在確認はできます。

 

今回の例では、システムの移行PCの中に、すでにシステム移行済みPCが含まれているかどうかを確認したいと思います。

 

A列が移行対象のPC。B列にすでに移行済みPC。C列はVLOOKUP関数を使って、移行対象PCの中に移行済みPCが含まれるかどうかを調べています。

 

=VLOOKUP(B2,A:A,1,0)

 

検索値「B2」の「A102」が範囲「A:A」(A列)に存在すれば1列目の移行PC名を返すようにしています。

検索方法は「0」の完全一致です。

もし、存在しなければ「#N/A」のエラーが返ってきます。

 

存在すればPC名が返ってきて、存在しなければエラーが返ってきます。

今回の例ではデータが少ないので一目瞭然ですが、データが膨大な時はVLOOKUP関数をコピー&ペーストしたあとにフィルタを使って、エラーを除外すればすでにシステム移行済みのPCを確認することができます。

 

注意としては、VLOOKUP関数を沢山使うとExcelが非常に重たくなります。

VLOOKUP関数で値を返した後は、コピー&ペーストの値貼り付けを使って、返ってきた結果をVLOOKUP関数の数式ではなく、値として貼り付けてフィルタなどを行うほうが良いです 。