XLOOKUP(エックスルックアップ)とSPILL(スピル)
XLOOKUP(エックスルックアップ)は、指定した列から検索して同じ行にある値を呼び出します
またSPILL(スピル)で複数の行の範囲を取得することができます
XLOOKUP関数は検索列の左側も取得でき、エラー時の指定もできるので
VLOOKUP関数にINDEX関数やMATCH関数、ISERROR関数、IFERROR関数を含めた検索ができます
・関数 | XLOOKUP(読み方 - エックスルックアップ) | |
・書式 | =XLOOKUP(検索値,検索範囲,戻り範囲,無い場合,一致モード,検索の型) | |
・内容 | 指定された範囲の列で特定の値を検索し、指定した列の範囲の対応するセルの値を返します。 | |
使い方(VLOOKUPと同じ結果
=XLOOKUP(
B2,
B5:B16,
C5:C16)
エクセル表サンプル
|
A |
B |
C |
D |
E |
F |
1 |
|
本日の担当者 |
|
|
|
|
2 |
|
11月21日 |
高橋 |
6789 |
10:00~19:00 |
|
3 |
|
|
|
|
|
|
4 |
|
日時 |
担当 |
内線 |
受付 |
|
5 |
|
11月19日 |
鈴木 |
1234 |
9:00~18:00 |
|
6 |
|
11月20日 |
佐藤 |
5678 |
10:00~19:00 |
|
7 |
|
11月21日 |
高橋 |
6789 |
10:00~19:00 |
|
8 |
|
11月22日 |
鈴木 |
1234 |
9:00~18:00 |
|
9 |
|
11月23日 |
鈴木 |
1234 |
9:00~18:00 |
|
10 |
|
11月24日 |
高橋 |
6789 |
9:00~18:00 |
|
11 |
|
11月25日 |
鈴木 |
1234 |
9:00~18:00 |
|
12 |
|
11月26日 |
鈴木 |
1234 |
9:00~18:00 |
|
13 |
|
11月27日 |
佐藤 |
5678 |
10:00~19:00 |
|
14 |
|
11月28日 |
佐藤 |
5678 |
10:00~19:00 |
|
15 |
|
11月29日 |
高橋 |
6789 |
9:00~18:00 |
|
16 |
|
11月30日 |
小林 |
3456 |
9:00~18:00 |
|
17 |
|
|
|
|
|
|
日時から担当者を検索する場合
=XLOOKUP(
B2,
B5:B16,
C5:C16)
見つからない場合エラーになるのでエラー時に
「0」を表示
=XLOOKUP(
B2,
B5:B16,
C5:C16,0)
見つからない場合エラーになるのでエラー時に
「見つかりません」と表示
=XLOOKUP(
B2,
B5:B16,
C5:C16,"見つかりません")
(空白にする場合は""、指定しないと見つからないときは#N/Aエラーになります)
見つからない場合に次に大きい
近似値を取得
=XLOOKUP(
B2,
B5:B16,
C5:C16,0,1)
0:完全一致
1:見つからない場合に次に大きい近似値を取得
-1:見つからない場合に次に小さい近似値を取得
2:ワイルドカード文字と一致
検索方向上から(VLOOKUP)、または右から(HLOOKUP)
=XLOOKUP(
B2,
B5:B16,
C5:C16,0,1,1)
1:先頭から末尾まで検索
-1:末尾から先頭へ検索
VLOOKUPと大きな違い
戻り範囲を複数列選択すると複数列取得することができます(スピル機能)
日時から担当者を検索する場合の戻り値を「
C5:E16」とすることでD列とE列も取得します
=XLOOKUP(
B2,
B5:B16,
C5:E16)
※
結果がエラーになる、日時を呼び出せない場合
3通りが考えられます
・指定日時の担当を呼び出す場合
=XLOOKUP(
検索値,
検索範囲,
戻り範囲,
検索の型)
=XLOOKUP(
"8月18日",
B5:B16,
C5:C16,
0)
1つ目:
範囲の日時が文字列で入力されている場合
検索値は「"8月18日"」と直接指定した場合「8月18日」という数字と漢字の文字列を探します
範囲の日時も文字列で入力されていれば呼び出せますが、通常セルにある日時はシリアル値として認識されます
範囲の日時:「8月18日」シリアル値「43695」
検索値:「"8月18日"」文字列
文字列の「8月18日」を探してもシリアル値「43695」とは一致しません
対応策:
検索値の8月18日をシリアル値に変換します
=XLOOKUP(
VALUE("8月18日"),
B5:B16,
C5:C16,
0)
※(検索値の年号を省略すると今年になります)
2つ目:日時をセルで指定した場合はシリアル値になりますが
何かの表や去年から使いまわして日付をコピーした場合
「8月18日」が実は「2017年8月18日」など今年ではない時は見た目は一緒でも中身は「2017年8月18日」と「2018年8月18日」なので一致しません
対応策:セルをクリックして見ると年号も表示されるので今年に直します
また検索している関数がTODAYやNOWの場合
TODAYもNOWも表示を日付にすれば「11月21日」ですが
シリアル値が違うので一致しません
=NOW() 45617.652719907
=TODAY() 45617
NOW()は小数点以下に時間を表示しています
今日を検索するにはNOW()ではなくTODAY()を使います
3つ目:スピルの結果範囲内に何かが入力されている
この場合セルに「#SPILL!」と表示されます
上記のサンプルで
セルB2
=XLOOKUP(
B2,
B5:B16,
C5:E16)
とした場合
戻り値の範囲が「
C5:E16」とC列~E列を指定しているのでセルD2とE2には自動で数式が入ります
「#SPILL!」と表示されている場合は
戻り範囲に何か入力されていないか、入力されていれば削除するかそのセルに含まないように
戻り範囲を変更します
検索範囲と
戻り範囲を横を指定することでHLOOKUPと同じ使い方もできます
「XLOOKUP」の登場で「VLOOKUP」「HLOOKUP」を使うことは少なくなるでしょう
表からの抽出などで「SEARCH」「INDEX」「MATCH」「ISERROR」「IFERROR」などを組み合わせなくても「XLOOKUP」1つで簡単に抽出できるようになりました
「XLOOKUP」はかなり役に立つ関数なので使いこなせるようになると便利になります
XLOOKUP関数とよく使うエクセル関数