表題の通り、VLOOKUP関数とその代替関数の使い方をまとめました。
Excelであるキーに対応する値を取って来たい場合、多くの場合はVLOOKUP関数(第四引数FALSE)を使うと思います。
記述量も少なく関数の内容もわかりやすいので、VLOOKUP関数は広まっていますし、とりあえず検索したい時はVLOOKUP関数(第四引数FALSE)で事足ります。
しかし、高速化する必要がある場合や左側の項目を取得する場合、行と列の両方にキーが存在する場合は、他の方法で検索する必要があります。
一番汎用性が高いのはINDEX関数とMATCH関数の合わせ技です。
MATCH関数は第二引数で指定された範囲から第一引数が存在する位置を返すというもので、INDEX関数は第一引数の範囲から第二引数が示す位置を返すというものです。INDEX関数の第二引数にMATCH関数の結果を用いることでVLOOKUP関数と同じようなことができます。左側の項目を取得したい場合にも対応できます。
また、MATCH関数の第三引数(通常は0)を1にすることで、文字コードの昇順に並んでいる範囲を二分検索で高速で検索することもできます。
更に、INDEX関数は第二引数で行の位置、第三引数で列の位置を指定することもでき、この二つの引数を用いることで行と列の両方にキーが存在するケースにも対応できるようになります。
いざという時に使えるようにしておくと便利でしょう。
使い方をまとめた画像は以下になります。
以下、コピペ用にテキストでも記載します。
セル指定は適宜変更して下さい。
・キー項目が昇順・降順ではない場合の検索
VLOOKUP(B12,$B$3:$D$7,3,FALSE)
INDEX($D$3:$D$7,MATCH(B17,$B$3:$B$7,0))
・キー項目が昇順の場合の高速検索
IF(VLOOKUP(B21,$C$3:$C$7,1,TRUE)=B21,VLOOKUP(B21,$C$3:$D$7,2,TRUE),NA())
IF(LOOKUP(B25,$C$3:$C$7)=B25,LOOKUP(B25,$C$3:$C$7,$D$3:$D$7),NA())
INDEX($D$3:$D$7,MATCH(B28,$C$3:$C$7,1))
・キー項目が右側に存在する場合の検索
IF(LOOKUP(B35,$C$3:$C$7)=B35,LOOKUP(B35,$C$3:$C$7,$B$3:$B$7),NA())
INDEX($B$3:$B$7,MATCH(B38,$C$3:$C$7,1))
・列検索と行検索を同時に行う場合の検索
INDEX($B$2:$D$7,MATCH(C46,$B$2:$B$7,0),MATCH(B46,$B$2:$D$2,0))
いかがでしたでしょうか。
キーに対応する値を取って来るだけでも、意外と奥深いことが分かったと思います。
VLOOKUP関数(第四引数FALSE)で大抵の場合は事足りるとは言え、遅い、左側の項目を取得できない、行と列を同時に検索できない、という不満はいずれ持つと思います。
そのような時に、INDEX関数とMATCH関数の合わせ技でサクっと対応できることがあるので、覚えておくと便利だと思います。
次回も、役に立つ情報を提供していきたいと思います!
コメント