Magicode logo
Magicode
0
3 min read

これからのスタンダード!? VLOOKUPでも、INDEX+MATCHでもなく、XLOOKUP(EXCEL)

https://cdn.apollon.ai/media/notebox/Screenshot_1.png

はじめに

EXCELを使っていると、VLOOKUP関数をよく使用します。(どこかでみましたが、SUM、AVERAGEに次いで第3位だとか)
VLOOKUPの不満点を解消した XLOOKUP関数 というのがアナウンスされました(2019/08)
Announcing XLOOKUP
普通に使いたい、と思わせるものなので、これからのスタンダードになるかもしれません。

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」として紹介されています。
(検索先のシートやデータはソートされている必要があります)
=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 関数
=XLOOKUP(検索する値, 検索先の列範囲, 表示する列範囲,[match_mode],[search_mode])
※後ろ2つはオプション
下記、解説があります(動画もあります)
The VLOOKUP Slayer: XLOOKUP Debuts Excel
また、なぜリリースになったかという理由をみると、「検索範囲の左端列(1番目)を基準としないといけない」「近似値のデフォルトがTRUE」といった問題に対応してくれるものとなっていることがわかります。
長年の癖でVLOOKUPが勝つのか、それとも、XLOOKUPが市民権を得るのか、、楽しみです。

Discussion

コメントにはログインが必要です。