VLOOKUP関数よりも簡単に左側の列の値を取得する方法

スポンサーリンク

名簿・リストなどから検索するVLOOKUP関数の制約について

何かの一覧表から必要な行を抜き出す作業をよくする方によく使われているVLOOKUP関数ですが、使い方が難しかったり、使うための条件が複雑だったりします。

私は普段名簿・リストから情報の抜き出し・照合などの作業を行うことが多く、VLOOKUP関数に慣れているのですが、1点大きな不満を感じています。
それはVLOOKUP関数が「リストの中で検索対象文字列の右側の値しか表示できないこと」です。

今回はVLOOKUP関数を使わずにより簡単にリスト中の左側の列の値を表示させる方法をご紹介します。

VLOOKUP関数の代わりに2つの関数を組み合わせて使用する

VLOOKUP関数の代わりに使用する関数は下記の2つになります。
これらの関数を組み合わせることでVLOOKUPよりも便利な検索・行列関数として機能します。

①MATCH関数

ある列の中から特定の文字列に一致するものの行番号を取得します。

例えば「=MATCH(F2,D2:D100,0)」と入力したとすると、F2セルの値に一致するものをD2:D100の範囲から探しだし、上から何個目のセルかを表示してくれます。

最後の「0」は完全一致を表します。(完全一致以外を使用する機会は少ないと思います。)

②INDEX関数

対象列範囲の中から特定の順番のセルの値を抜き出します。

例えば「=INDEX(B2:B100,6)」と入力したとするとB2:B100の範囲の上から6番目のB7セルの値を表示します。

オプションの引数で、列番号を指定もできるようになっていますが、今回のようにVLOOKUP関数の代わりとして使用する場合には使用しません。

スポンサーリンク

VLOOKUP関数の代わりとなるINDEX関数・MATCH関数の組み合わせ

上記でご紹介したMATCH関数とINDEX関数を下記の流れで使用するとVLOOKUP関数と同じ使い方が可能になります。

  • ①=MATCH(F2,D2:D100,0) → D2:D100セルの中でF2に一致するセルの行番号(何番目の行か)を取得する
  • ②=INDEX(B2:B100,6) → B2からB100セルまでの中で6番目のセルの値を表示する
  • ①+②=INDEX(B2:B100, MATCH(F2,D2:D100,0)) → D2:D100セルの中からF2に一致するものを抜き出し、その行のB列の値を抜き出す
  • まとめると以下の通りになります。

  • =INDEX(値を取得したい列範囲, MATCH(検索したい値,検索列範囲,0))
  • ユーザー定義関数を作成しておくとより簡単に使用できる

    VBAの機能を使って、以下のコードを標準モジュールに記載するとユーザー定義関数「値取得」で上記の関数を使用することも可能です。
    計算式をたくさん使うなら設定しておいても良いかもしれません。

    a:値を取得したい範囲

    b:検索したい文字

    c:検索範囲

    Function 値取得(a, b, c) As String

    Dim 行番号
    行番号 = Application.WorksheetFunction.Match(b, c, 0)
    値取得 = Application.WorksheetFunction.Index(a, 行番号)

    End Function

    コメント