【数式】 1.XLOOKUP関数を動画で視覚的にマスターしよう!

目次

XLOOKUP関数の概要

XLOOKUP関数は、VLOOKUP関数の不便な点を改良した、現時点で最新のLOOKUP系の関数です。
この機会に、VLOOKUP関数からは卒業し、XLOOKUP関数を使えるようになりましょう。

参考情報 ExcelVBAで使うXLOOKUP関数はこちら→【VBA】15.2 XLOOKUP関数を使ってみよう!

動画を見て、XLOOKUP関数を視覚的にマスターしよう!

百聞は一見に如かず、習うより慣れよ、です。
まずは動画を見て、XLOOKUP関数の設定方法やどのような機能なのかを理解してみましょう。

この動画では、XLOOKUP関数を用いて、以下の処理を実施するものです。

ウィンドウ名ウィンドウの役割
左のウィンドウA列のメールアドレスをキーにして、右のウィンドウよりXLOOKUP関数で氏名を取得し、B列に氏名をセットします。
右のウィンドウ氏名やメールアドレスなどの情報を持っている社員一覧シートです。

この動画では、以下の設定を実行しています。

  1. B2セルをクリックし、メニューの「数式」→リボンの「関数の挿入」をクリックし、関数を選択するダイアログ画面で関数名の領域から「XLOOKUP」を選択します。
  2. 検索値として、左のExcelシートのA2セル(メールアドレス)を設定します。
  3. 検索範囲として、右のExcelシートのD列(メールアドレス)を設定します。
  4. 戻り範囲として、右のExcelシートのB列(氏名)を設定します。
  5. 見つからない場合の戻り値として、“”(半角ダブルクォーテーションを連続で2つ)を設定します。
  6. 上記の1.~4.で、B2セルへのXLOOKUP関数の設定は完了しました。
  7. B2セルに設定したXLOOKUP関数の設定をB3セル~B5セルにコピーします。

XLOOKUP関数の構文

XLOOKUP関数の構文は、以下の通りです。

  • =XLOOKUP(検索値, 検索範囲, 戻り範囲, 見つからない場合, 一致モード, 検索モード)
引数名必須/
任意
解説
検索値必須XLOOKUP関数で検索する値を指定します。
検索範囲必須検索値で検索する範囲を列の一部、または列全体で指定します。
戻り範囲必須検索範囲でヒットした際の戻り値を取得する範囲を列の一部、または列全体で指定します。



見つからない場合



任意
検索値を検索範囲で検索した場合に、見つからない場合の戻り値を設定できます。

任意項目のため、設定していない場合は「#N/A」エラーが返されますので、何らかの設定を行うことを推奨します。

戻り値を文字列で設定する際は、戻り値の前後を「”(半角ダブルクォーテーション)」で囲みます。(ex.”検出できませんでした”)

戻り値を空欄のままとする場合は、「“”(半角ダブルクォーテーションを連続で2つ)」をセットします。
一致モード任意検索する際の検索条件が、完全一致か、近似値かを指定します。
設定していない場合は完全一致となります。
検索モード任意検索をする方法を指定します。
設定していない場合は、先頭の項目から検索を実行します。
設定を最適化した場合、検索が高速化する場合があります。

上記の引数で、「2.検索範囲」と「3.戻り範囲」で列の一部を指定した場合、両方の行数が一致していないと、「#VALUE!」エラーとなります。
これを避けるため、上記の2つの引数は、列全体を指定することを推奨します。

XLOOKUP関数は、以下の値を返します。

  • 検索値が検索範囲から見つかった場合:検索範囲で見つかった行の戻り範囲の値を返す。
  • 検索値が検索範囲から見つからなかった場合:上記の「4.見つからない場合」の値を返します。

VLOOKUP関数からの改良点

XLOOKUP関数では、VLOOKUP関数の以下の点が改良されました。

VLOOKUP関数
XLOOKUP関数
  • 検索値が検索範囲から見つからなかった場合、戻り値が「#N/A」エラーとなる。
  • 「3.戻り範囲」は、「2.検索範囲」と同じシートの右側の列しか指定できない。
  • 検索値が検索範囲から見つからなかった場合の戻り値を、任意の値に設定できる。
  • 「2.検索範囲」と「3.戻り範囲」の位置関係は、左右どちらでもOKで、ワークシートやワークブックを跨ってもOK。

この改良により、VLOOKUP関数での以下のような実装は不要となります。

  • 検索値が検索範囲から見つからなかった場合に、戻り値が「#N/A」エラーと帰ってくる場合のエラー処理
  • 「3.戻り範囲」が「2.検索範囲」の同一シートの右側に無かった場合の、このためだけの列のコピー処理

[emalabo式] ワークシート上の数式で使用した場合とExcelVBAで使用した場合の相違点

原因は不明なのですが(もしかしてバグ?)、XLOOKUP関数をワークシート上の数式で使用した場合とExcelVBAで使用した場合で、以下の違いあることが判明しました

XLOOKUP関数の使用条件XLOOKUP関数の戻り値
ワークシート上の数式で使用した場合で、検索値が空欄だった場合数式のあるセルに、数字の0が出力される
ExcelVBAで使用した場合、検索値が空欄だった場合空欄が戻り値となる(想定通り

ワークシート上の数式で使用した場合のイメージ】

ワークシートのXLOOKUP関数

ExcelVBAで使用した場合のイメージ】

ExcelVBAのXLOOKUP関数

上記のイメージの、B3セルがワークシート上の数式でXLOOKUP関数を使用した場合の結果です。

実際のB3セルの数式は以下の通りです。
ワークシート上の数式で使用した場合で、見つからない場合の戻り値をどのように設定しても、上記の結果になるようです。

=XLOOKUP(A3,D:D,E:E,"")

これを解決する(ExcelVBAの結果のように、何も出力しないようにする)ためにはいくつかの方法があるようですが、最もお手軽なのは、数式の最後に「&””」というおまじないを付けると解決します

=XLOOKUP(A3,D:D,E:E,"")&""

この記事を書いた人

某IT企業に勤務。

2年間の休職を経て、一から独学でExcel VBAを習得し、半年でExcel VBA エキスパート資格のスタンダードに一発合格。

社内の非効率的な作業を効率化するExcelマクロの開発を、全行程まるっと一人で請け負い、これまでに約100個のExcelマクロを開発し、現在も増産中。

目次