ExcelのXLOOKUP関数のバイナリ検索と、VLOOKUP関数の近似一致による検索で、IF文を用いて「完全一致のみを抽出」をした場合の速度を比較した事例です。
「XLOOKUP関数やVLOOKUP関数で検索の型を完全一致」で実施した場合の比較は、【Excel】VLOOKUP関数とXLOOKUP関数の速度比較の事例 のとおり、複数列以上の抽出時に処理時間に差があります。
以下は、バイナリ検索や近似一致を用いて「1列のみ抽出」をした時の処理時間です。
一つの事例ですが、結果は次のとおりでした。
- XLOOKUP関数のバイナリ検索と、VLOOKUP関数の近似一致による検索で、処理時間は同程度だった。
- 上記1の処理時間は、「XLOOKUP関数やVLOOKUP関数の検索の型を完全一致」とした場合の半分程度だった。
よって、1列のみ抽出の場合、目的やデータ状況によるが「VLOOKUP関数」で数式がシンプルになるなら、「VLOOKUP関数」で良い印象。
なお、使用のExcelは「Microsoft® Excel® for Microsoft 365 MSO」(バージョン2309)です。
比較した内容
前提
シート名「検索範囲」に、「顧客コード」と「名前」の一覧表が5万件ある。別途、「顧客コード」だけのリストが5万件あり、関数を使用して「検索範囲」で「顧客コード」と一致する「名前」を抽出する。
詳細な要件は、前述の【Excel】VLOOKUP関数とXLOOKUP関数の速度比較の事例 と同様。
速度比較の結果
検索の型 | 参照先の並び | 関数 | IF文にある検索方法 | 処理時間(秒) | 備考 |
完全一致のみ | 並べ替えなし | VLOOKUP | - | 0.7 | 数式1 |
XLOOKUP | - | 0.8 | 数式2 | ||
近似一致との組み合わせ | 昇順 | VLOOKUP | VLOOKUP | 0.3 | 数式3 |
XLOOKUP | VLOOKUP | 0.4 | 数式4 | ||
XLOOKUP | 0.4 | 数式5 |
処理時間は、VBAで数式を5万行にコピーした時の時間を計測し、3回測定の平均値で算出。
補足説明
それぞれの数式例は次のとおり(上記備考欄に対応)。
数式1
=VLOOKUP(A2,テーブルA!$A$2:$B$50000,2,FALSE)
数式2
=XLOOKUP(A2,テーブルA!$A$2:$A$50000,テーブルA!$B$2:$B$50000,,0,1)
数式3
=IF(VLOOKUP(A2,検索範囲!$A$2:$A$50000,1,TRUE)=A2,VLOOKUP(A2,検索範囲!$A$2:$C$50000,3,TRUE),"")
数式4
=IF(VLOOKUP(A2,検索範囲!$A$2:$A$50000,1,TRUE)=A2,XLOOKUP(A2,検索範囲!$A$2:$A$50000,検索範囲!$C$2:$C$50000,,-1,2),"")
数式5
=IF(XLOOKUP(A2,検索範囲!$A$2:$A$50000,検索範囲!$A$2:$A$50000,,-1,2)=A2,XLOOKUP(A2,検索範囲!$A$2:$A$50000,検索範囲!$C$2:$C$50000,,-1,2),"")
以上、ExcelのXLOOKUP関数のバイナリ検索と、VLOOKUP関数の近似一致による検索で、IF文を用いて「完全一致のみを抽出」をした場合の速度を比較した事例でした。
なお、繰り返しとなりますが複数列以上の抽出時は、処理時間の特性に違いがあるので、以下も確認ください。
XLOOKUP関数の特徴と活用事例
ExcelのXLOOKUP関数は検索列と結果列の選択がしやすいなど、便利な関数です。以下に特徴と活用事例をまとめています。