XLOOKUP関数を利用していますでしょうか?
この関数はOffice2021(Office365)・Web版で利用可能な関数です
この関数は、ある程度関数を知っている人にはVLOOKUP関数等のLOOKUP関数系であることはイメージできると思います
VLOOKUPでもHLOOKUPでも無く、XLOOKUPが存在します
この関数は引数の配列内から検索して、その配列と同じ順番にあるデータを返す関数です
ただこれだけだと、あまり既存の関数と差があるとは思わないかもしれません
決定的に違うのは、前述の検索対象が「配列」であることです
これは意外に今までの関数ではあまり無い考え方になります
というのも、VLOOKUP関数等は引数に指定するデータは「セル範囲」であることが前提です
このデータの取得の行い方で全く動作と利便性が変化します
今までのLOOKUP関数は、セル範囲の中で検索を行う、見つかったセルと同じ行・列の指定した行数・列数を移動させたセルのデータを取得します
そのため、制限として「検索個所と取得個所が連続したセル範囲であること」「取得セルは検索セルより、左の列・上の行は指定できない」という大きな点がありました
そのため、LOOKUP関数を利用するために、本来別のシートやブックにあるデータを1つのシートにコピペしてデータを結合して検索可能な表を作成する必要がありました
これはセルという概念が前提であることが理由でした
しかし、XLOOKUP関数はセルではなく配列データから検索・取得を行うため
上記の制限が全くありません
つまり、「検索するデータ範囲と取得するデータ範囲が連続していなくていい」「取得するデータが検索データよりセルの位置が上でも左でもいい」ということになります
特に大きい利便性向上につながるのが、1点目の連続していない範囲でよくなった点です
要するに、同じシートである必要もなくなり、なんならブックを超えた検証を行うことも可能となりました
そのため、検証作業が非常に簡単になります
さらに地味にありがたいのが、見つからない場合の返し値を指定できる点です
LOOKUP関数系では見つからない場合エラーとなってしまうため、そのデータを参照した関数は連鎖的に全てエラー表示となってしまいます
そのため、LOOKUP関数をIFERROR関数でネストさせて見つからない場合は特定の値を返すように関数を組んでいることが多々あります
これが必要なくなりますので、作り込みによってはすさまじくネスト数を減らすことも可能となります
関数の書式
引数(太字は必須引数)
(検索値, 検索範囲, 戻り範囲, [見つからない場合], [一致モード], [検索モード])
「検索値」は検索対象のデータです
これはLOOKUP関数系と差は無いと思いますので、特に解説不要と思います
「検索範囲」は検索対象の配列データです
配列データですが、基本的にExcel上ではセル範囲で指定します
「戻り範囲」は取得対象の配列データです
検索対象で見つかった配列のデータ番号と同じ順番のデータが返されます
基本的に列を指定している場合は、同じ行数のデータになります
「[見つからない場合]」は検索配列に検索対象が見つからなかった場合に返す値の設定です
数値の0を指定したり「””」(空白)を設定したり、なんでも指定できます
「[一致モード]」は検証方法です、基本的には完全一致が条件です
ですが、なんとここでワイルドカードを指定することができる様に設定できます
ワイルドカードまで対応しているなんて、なんてことをしてくれるんでしょうか
ワイルドカードが分からない人にはピンと来ないかもしれませんが、本記事では割愛します
ワイルドカードが利用可能、という点が認知できていれば十分です
「[検索モード]」は検索方向の設定です
末尾から検索したいとき程度に利用しますが、あまり頻度は高くないと思います
実際の使用例
![検証を行うデータテーブル](https://vbanobuhinko.com/wp-content/uploads/2021/02/XLOOKUP_1.png)
こちらのテーブルデータをもとに検証を行う場面を想定してみます
実務となると検証対象が数百件以上となることもあると思います
今回はとりあえず20件で検索を行います
このデータの中で存在するデータと、そうではないデータを検証します
![作成した関数](https://vbanobuhinko.com/wp-content/uploads/2021/02/XLOOKUP_2.png)
=XLOOKUP(B2,Sheet1!A:A,B:B,"×")
上記のような関数を作成しました
この関数では、関数のセルの左にある入力値をSheet1のA列データから検索して、見つかったデータと同じ行数のSheet2のB列から取得を行います
見つからない場合は「×」を返します
そのため、取得が行えているデータの場合は条件セルと関数セルが同じ内容が表示されます
上記の画像でも同じものが2列に並んでいることが確認できます
![検証結果の画像](https://vbanobuhinko.com/wp-content/uploads/2021/02/XLOOKUP_3.png)
このまま条件の行数分に関数をオートフィルで作成を行います
この画像の入力値は前提としてマスターデータと考えてください
登録すべきデータ自体は過不足なくここのリストにあります
最初に見せたデータテーブルに、このマスターデータの内容がちゃんと存在しているかを確認するための検証作業です
この画像の様にマスターデータを元に検証を行うことで、データの検証を行えます
実際画像を確認して分かるように、「kkk012」が入力テーブルには存在していないことが分かります
これでこのデータが入力漏れ等のミスが発生していることを発見することが出来ます
XLOOKUP関数は、別のシート、別のブックも可能なのが強みだと思います
また配列データなので、セルの行数が同じでなくてもセルの個数さえ一致していれば検証と取得を行えますので、非常に柔軟にセルデータに対して対応を行えます
VBAで検証処理を作成するのも良いのですが、やはり関数が利用しやすい場合は利用するべきですね
今後、この関数がExcelを席捲していくこと間違い無しです