はじめに
EXCELを使っていると、VLOOKUP関数をよく使用します。(どこかでみましたが、SUM、AVERAGEに次いで第3位だとか)
VLOOKUPの不満点を解消したXLOOKUP関数
というのがアナウンスされたようです(2019/08/29)
Announcing XLOOKUP
https://techcommunity.microsoft.com/t5/Excel-Blog/Announcing-XLOOKUP/ba-p/811376
普通に使いたい、と思わせるものなので、これからのスタンダードになるかもしれません。
VLOOKUPのいまいちな点
VLOOKUPは大変お世話になっていますが、個人的に感じる、いまいちな点は4つあります。
=VLOOKUP(検索する値, 検索範囲, 検索範囲における列番号, 0)
※0は、完全一致(0もしくはFALSEと指定する)
① 検索範囲の左端列(1番目)を基準としないといけない
②引数の3番目が、「検索範囲における列番号」を数えるのが大変
- 1つ2つならよいですが、テーブルなどをダウンロードしたあと、表示する値(返り値)が遠く離れていると、3番目の引数に指定するために列数えないといけないです。
③引数の4番目の引数の初期値が「TRUE」となっている(近似値の検索)
- ほとんどの場合は、完全一致の検索なので、0とかFALSEを指定する必要がある
④大量のデータに、VLOOKUPをいれるとEXCELがとても重くなる。
対応策:INDEX+MATCH or 高速VLOOKUP
①・②の不満を解消するためにでてくるのが、INDEX+MATCHです。
=INDEX(表示する列範囲, MATCH(検索する値, 検索先の列範囲, 0))
ただ、VLOOKUPよりは関数の式がシンプルでなくなってしまいます。
④については、INDEX、MATCH、VLOOKUPを使用して、注意点はあるものの対応することがありました。
下記のページで、**「高速VLOOKUP」**として紹介されています。
https://excel-ubara.com/excel3/EXCEL019.html
(検索先のシートやデータはソートされている必要があります)
例
=IF(INDEX(Sheet1!$A$2:$A$200001,MATCH($A2,Sheet1!$A$2:$A$200001,1),1)=$A2,VLOOKUP($A2,Sheet1!$A$2:$B$200001,2,TRUE),NA())
これからは、XLOOKUP
VLOOKUPに比べて、とてもシンプルになりました。
=XLOOKUP(検索する値, 検索先の列範囲, 表示する列範囲,[match_mode],[search_mode])
※後ろ2つはオプション
下記、解説があります(動画もあります)
The VLOOKUP Slayer: XLOOKUP Debuts Excel
https://www.mrexcel.com/excel-tips/the-vlookup-slayer-xlookup-debuts-excel/
また、なぜリリースになったかという理由をみると、「検索範囲の左端列(1番目)を基準としないといけない」「近似値のデフォルトがTRUE」といった問題に対応してくれるものとなっていることがわかります。
長年の癖でVLOOKUPが勝つのか、それとも、XLOOKUPが市民権を得るのか、、楽しみです。