shikumika’s diary

日々の事務作業で手間なことを簡単にできる仕組み(自動化、方法など)、困ったことの解決方法を調べた備忘録

【Excel】XLOOKUPのバイナリ検索とVLOOKUPの近似一致の速度比較

ExcelのXLOOKUP関数のバイナリ検索と、VLOOKUP関数の近似一致による検索で、IF文を用いて「完全一致のみを抽出」をした場合の速度を比較した事例です。

「XLOOKUP関数やVLOOKUP関数で検索の型を完全一致」で実施した場合の比較は、【Excel】VLOOKUP関数とXLOOKUP関数の速度比較の事例 のとおり、複数列以上の抽出時に処理時間に差があります。

以下は、バイナリ検索や近似一致を用いて「1列のみ抽出」をした時の処理時間です。

一つの事例ですが、結果は次のとおりでした。

  1. XLOOKUP関数のバイナリ検索と、VLOOKUP関数の近似一致による検索で、処理時間は同程度だった。
  2. 上記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文を用いて「完全一致のみを抽出」をした場合の速度を比較した事例でした。

なお、繰り返しとなりますが複数列以上の抽出時は、処理時間の特性に違いがあるので、以下も確認ください。

shikumika.org

XLOOKUP関数の特徴と活用事例

ExcelのXLOOKUP関数は検索列と結果列の選択がしやすいなど、便利な関数です。以下に特徴と活用事例をまとめています。

shikumika.org