Table of Contents
VLOOKUP関数
検索範囲の左端の列で、検索値を探します。
そして検索値が見つかったセルと同じ行かつ、指定した列番号のセルのデータを取り出すことができます。
構文
VLOOKUP(検索値, 検索範囲, 列番号, 検索方法) |
引数
引数 | 説明 |
---|---|
検索値 | 検索対象の値または 検索対象のデータが入力されたセルを指定します。 検索値にはワイルドカード※を使用することもできます。 |
検索範囲 | 検索対象となる列が左端(最初の列)で、取り出したいデータが含まれるセル範囲を指定します。 |
列番号 | 検索範囲の左端から数えて何番目の列を参照するのかを指定します。 |
検索方法 | 「FALSE」を選択すると完全に一致するものを検索します。 「TRUE」を選択すると検索値に一致するものがない場合、検索値未満の最大値を検索します。検索値は昇順に並べておく必要があります。 ※「TRUE」は省略することができます。これは何も指定しなかった場合、「TRUE」が選択されてしまうことを意味しますので注意しましょう。筆者は実務では「FALSE」(完全一致)を指定することが圧倒的に多いです。 |
※ワイルドカード(「*(アスタリスク)」や「?(疑問符)」)を使って条件を指定すると、部分的に等しい文字列を検索することができます。
ワイルドカード | 意味 | 検索文字列 | 検索結果 |
---|---|---|---|
? | 任意の1字 | ?田 | 「田」の前に任意の1文字がつく 例) 柳田 山田 |
* | 任意の文字列 (0文字以上) | *原 | 「原」で終わる文字列を検索 例) 清原 小笠原 原 |
手順
以下は、8資産(国内株式、先進国株式、新興国株式、国内債券、先進国債券、新興国債権、国内リート、先進国リート)及び8資産均等の年別パフォーマンスの順位を示しています。
14行目に8資産均等だけの年別順位を取り出してみます。
例えば2008年の8資産だけの年別順位を取り出す概念図をまとめると以下のようになります。
2008年の8資産だけの年別順位を取り出すには以下のように入力します。
=VLOOKUP($B$14,$B$2:F10,F12,FALSE) |
今回、検索値と列番号はセル参照にしています。
また2008年以外にも2005年~2017年の順位を入力できるようにしており、数式もコピーすることを想定して、検索値は絶対参照でB14に固定をして、検索範囲は複合参照にしています。
検索範囲の左上(始点)のB2は絶対参照、右下(終点)のF10は相対参照としています。
2008年の数式を左右の他の年にもコピーすることによって、検索範囲は始点のB2からであることは変わりませんが、年によって終点を9行目の何列目までとするかが変わります。
2008年における8資産均等のパフォーマンス順位「4位」が取り出されました。
その他の年も数式のコピーで正確な値を取り出すことができました。
過去に経験したVLOOKUPのエラー
検索値にスペースが入ってしまうと#N/Aエラー
先程と同じように、2008年における8資産均等のパフォーマンス順位を求めるために以下のように入力しました。
=VLOOKUP($B$14,$B$2:F10,F12,FALSE) |
しかし、結果は#N/Aエラーが表示されました。
一見、先程の例とは違いがないように見えますが、今回の例は、検索値の「8資産均等」という文字の後に一つ、スペースを入れています。
スペースが一つでも入ると検索値が検索範囲の最初の列に含まれていないとみなされ、上のように#N/Aエラーが表示されます。
特に文字列の途中で入っているスペースは分かりやすいですが、上の例のように、文字列の最後にスペースが入っていると分かりにくいです。
VLOOKUP|大文字小文字の違い、ハイフン、ワイルドカードの検証
スペースが入っているか入っていないかの違いだけではなく、VLOOKUPで検索できるもの#N/Aエラーが表示されるものを色々試してみました。
検索値についてVLOOKUPで参照できたものは「◯」と表示されています。
アルファベットの場合、大文字小文字の違いは検索値が検索範囲の最初の列に含まれているとみなされます。
ハイフンなどが入ってしまうと、検索値が検索範囲の最初の列に含まれているとみなされず、#N/Aエラーが表示されます。
ワイルドカードを使用した例も検証していますので参考にしてみてください。
検索値よりも左側の範囲からVLOOKUPで値を取り出せないか
検索値よりも左側の範囲からVLOOKUPで値を取り出せないかという場面に直面することがあります。
例えば以下のイメージのように2008年におけるパフォーマンス順位「1位」の資産クラスを検索範囲の左端の列(1列目)から検索するようなケースです。
結論から書きますと、この作業はVLOOKUPを使ってはできません。
以下のように、2008年におけるパフォーマンス順位「1位」の資産クラスを検索範囲の1列目から検索するために、以下のような式を入力してみました。
=VLOOKUP(F2,$B$2:$F$10,1,FALSE) |
VLOOKUP関数の結果は#N/Aエラーが出ます。
検索値は検索範囲の左端の列(最初の列)のみ検索できるという制約があります。
検索値が検索範囲の最初の列に含まれていない場合、上のように#N/Aエラーが表示されます。
検索値よりも左側の範囲から値を取り出す方法①
それでは、検索値よりも左側の範囲から値を取り出すにはどのようにすればよいでしょうか?
結論から書きますと、今回の例ではMATCH関数を使い、行数を指定してINDEX関数にネストさせ、1列目から取り出す方法が考えられます。
以下の様な式になります。
=INDEX($B$2:$F$10,MATCH(F2,F$2:F$10,0),1) |
詳細は以下の記事で解説していますので参考にしてください。
【Excel】INDEX関数|MATCH関数と組合わせるとセル範囲から検索する行と列の指定が便利にここでは、INDEX関数とMATCH関数の構文及び、概念図だけまとめておきます。
INDEX(配列, 行番号, [列番号]) |
MATCH(検索値, 検索範囲, 検索方法) |
検索値よりも左側の範囲から値を取り出す方法②
検索値よりも左側の範囲から値を取り出す2つ目の方法は、MATCH関数を使い、行数を指定してINDIRECT関数にネストさせ、B列から取り出す方法が考えられます。
以下の様な式になります。
=INDIRECT(“B”&MATCH(F2,$F$1:$F$10,0)) |
MATCH関数については以下の記事で解説していますので参考にしてください。
【Excel】INDEX関数|MATCH関数と組合わせるとセル範囲から検索する行と列の指定が便利にここでは、INDIRECT関数とMATCH関数の構文及び、概念図だけまとめておきます。
INDIRECT(参照文字列, [参照形式]) |
MATCH(検索値, 検索範囲, 検索方法) |
Excelを一度体系的に学ぶと、目に見えて生産性が飛躍的に向上します。
MOS Excel※は資格の取得、及び資格取得までのプロセスを通じて体系的にExcelスキルを身につけることができますのでコスパが良くおすすめです。
※Microsoft Office Specialist(MOS)ExcelはExcelの利用能力を証明する世界的な資格です。
筆者は「スペシャリスト(一般)」と「エキスパート(上級)」両方を取得して体系的にスキルを身に着けました。
MOS試験対策でどのテキストを使うべきか悩まれる方も多いのではないかと思いますが、以下がおすすめです。
今回の内容が参考になれば幸いです。