41
35

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

ExcelのVLOOKUP関数で左端列以外を検索したいときのメモ

Posted at

VLOOLUP、真ん中の列で検索させてくれ

VLOOKUP関数、よく使いますね。
しかし、データ範囲の左端列しか検索してくれなくて困ることがあります。
勝手にデータレイアウトを変えるわけにはいかず、別シートにいい感じに参照させていい感じにする面倒なことをして凌いでいました。

調べてみると、INDEX関数とMATCH関数で代替できることがわかったのでメモします。
また、いちいち書くのは面倒なので自作関数を作りました。

それぞれどんな関数なの?

VLOOKUP関数

VLOOKUP(検索値, 検索値を含む範囲, 戻り値を含む範囲内の列番号, 近似一致には TRUE または完全一致には FALSE を必要に応じて指定)

「指定された範囲の1列目で特定の値を検索し、指定した列と同じ行にある値を返します。」だそうです。

INDEX関数

INDEX(参照, 行番号, [列番号], [領域番号])

「指定された行と列が交差する位置にある値またはセルの参照を返します。」だそうです。

MATCH関数

MATCH(検査値, 検査範囲, [照合の型])

「指定された照合の種類に従って検査範囲内を検索し、検査値と一致する要素の、配列内での相対的な位置を表す数値を返します。」だそうです。

で、どうやんの?

MATCH関数で検索値の行を取得
⇒取得した行に対して、INDEX関数で列を指定して値を取得する

=INDEX(データ範囲,MATCH(検索値,検索範囲,0),返却列)

実際にやってみる

やりたいこと

名字ランキングの表がある。
「カナ」(黄色部分)を入力すると、表を検索して「漢字」「順位」を取得したい。
image

こんな感じでできる

=INDEX(データ範囲,MATCH(検索値,検索範囲,0),返却列)
=INDEX(A:C,MATCH(E3,C:C,0),2)
「コバヤシ」(E3)をC列(C:C)から探し、その行に該当する表(A:C)の2列目にある「小林」(B11)をF3に返す
image

「表の検索」関数を作る

いちいち=INDEX...と入力するのは面倒なので、自作関数を作ります。
=表の検索(検索値,データ範囲,検索範囲,返却列番号)
とすれば、
=INDEX(データ範囲,MATCH(検索値,検索範囲,0),返却列)
と同じようにします。

表の検索
Function 表の検索(検索値 As Variant, データ範囲 As Variant, _
                            検索範囲 As Variant, 返却列番号 As Integer)

    表の検索 = WorksheetFunction.Index(データ範囲, _
                        WorksheetFunction.Match(検索値, 検索範囲, 0), 返却列番号)

End Function

参考リンク

▼WorksheetFunction.Match メソッド (Excel)
https://msdn.microsoft.com/ja-jp/library/office/ff835873.aspx

▼WorksheetFunction.Index メソッド (Excel)
https://msdn.microsoft.com/ja-jp/library/office/ff197581.aspx

41
35
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
41
35

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?