名簿・リストなどから検索する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関数と同じ使い方が可能になります。
まとめると以下の通りになります。
ユーザー定義関数を作成しておくとより簡単に使用できる
VBAの機能を使って、以下のコードを標準モジュールに記載するとユーザー定義関数「値取得」で上記の関数を使用することも可能です。
計算式をたくさん使うなら設定しておいても良いかもしれません。
a:値を取得したい範囲
b:検索したい文字
c:検索範囲
Dim 行番号
行番号 = Application.WorksheetFunction.Match(b, c, 0)
値取得 = Application.WorksheetFunction.Index(a, 行番号)
End Function
コメント