概要
「商品マスタは別シート」「社員一覧は別シート」
Excel では“別シートにあるデータを検索して持ってくる”のが日常です。
そんなときに最強なのが XLOOKUP。
シート名を付けて範囲を指定するだけで、
別シートのデータを簡単・正確に検索できます。
VLOOKUP のように列番号を数える必要もなく、
左方向検索も自由、見つからない場合のメッセージも一発で設定できます。
基本の考え方(別シート参照の書き方)
別シートのセル参照の基本
Excel では、別シートのセルを参照するときは
=シート名!セル
と書きます。
例:
Sheet2 の A2 を参照 → =Sheet2!A2
Sheet2 の A2:C100 を参照 → =Sheet2!A2:C100
このルールをそのまま XLOOKUP に入れるだけでOKです。
別シートから検索する XLOOKUP の基本形
商品コードから商品名を別シートから取得
商品マスタが Sheet2 にあり、構造が次のとおりとします。
Sheet2
A列:商品コード
B列:商品名
注文シート(Sheet1)で、E2 に商品コードを入力し、
F2 に商品名を表示したい場合:
=XLOOKUP(E2, Sheet2!$A$2:$A$100, Sheet2!$B$2:$B$100)
意味をかみ砕くと:
- 「E2 の商品コードを」
- 「Sheet2 の A2:A100 から探して」
- 「一致した行の B2:B100(商品名)を返す」
これだけで別シート検索が完成します。
見つからない場合のメッセージを設定する
XLOOKUP は第4引数で「見つからないときの値」を指定できます。
=XLOOKUP(E2, Sheet2!$A$2:$A$100, Sheet2!$B$2:$B$100, "未登録")
商品コードが存在しない場合は「未登録」と表示されます。
入力が空欄のときは何も表示しない
検索値セル(E2)が空欄のときまで XLOOKUP を走らせると、
「未登録」が並んで見づらくなります。
そんなときは IF と組み合わせます。
=IF(E2="","",
XLOOKUP(E2,Sheet2!$A$2:$A$100,Sheet2!$B$2:$B$100,"未登録"))
左方向検索も自由(別シートでもOK)
商品名が A列、商品コードが B列のように、
検索したい列が右側にある場合でも問題ありません。
=XLOOKUP(E2, Sheet2!$B$2:$B$100, Sheet2!$A$2:$A$100, "未登録")
Sheet2 の B列を検索し、A列を返す“左方向検索”が簡単にできます。
応用:別シートの最新データを取得(検索方向 -1)
履歴表が別シートにあり、
同じIDが複数行ある場合は「最新(最後の一致)」を取りたいことがあります。
その場合は検索モードを -1 にします。
=XLOOKUP(E2, Sheet2!$A$2:$A$100, Sheet2!$B$2:$B$100, "なし", 0, -1)
Sheet2 の A列を 下から上へ検索し、
最後に一致した行の B列を返します。
よくあるつまずきと対策
シート名にスペースがある場合は 'シート名'!A1 と書く
例:
シート名が「商品 マスタ」の場合:
='商品 マスタ'!A2:C100
シングルクォーテーションで囲む必要があります。
検索範囲と戻り範囲の行数を必ず揃える
NG例:
- 検索範囲:Sheet2!A2:A100
- 戻り範囲:Sheet2!B3:B100(開始行がズレている)
必ず同じ行数・同じ開始行にしてください。
完全一致が標準なので安心
XLOOKUP は一致モードを省略すると「完全一致」になります。
VLOOKUP のように FALSE を書き忘れて事故る心配がありません。
例題
問題1: Sheet2 の A2:A100 に商品コード、B2:B100 に商品名があります。Sheet1 の E2 の商品コードに一致する商品名を F2 に表示してください。
=XLOOKUP(E2, Sheet2!$A$2:$A$100, Sheet2!$B$2:$B$100)
問題2: 問題1の式で、見つからない場合は「未登録」と表示するように G2 に式を書いてください。
=XLOOKUP(E2, Sheet2!$A$2:$A$100, Sheet2!$B$2:$B$100, "未登録")
問題3: Sheet2 の B列に商品コード、A列に商品名があります。Sheet1 の E2 の商品コードに一致する商品名(左方向)を F2 に表示してください。
=XLOOKUP(E2, Sheet2!$B$2:$B$100, Sheet2!$A$2:$A$100, "未登録")
問題4: E2 が空欄のときは何も表示せず、入力されているときだけ商品名を表示する式を H2 に書いてください。
=IF(E2="","",
XLOOKUP(E2,Sheet2!$A$2:$A$100,Sheet2!$B$2:$B$100,"未登録"))
問題5: Sheet2 の A2:A100 に顧客ID、B2:B100 に取引日があります。E2 の顧客IDに対して、最後に一致した取引日(最新)を F2 に表示してください。
=XLOOKUP(E2, Sheet2!$A$2:$A$100, Sheet2!$B$2:$B$100, "なし", 0, -1)
まとめ
別シート検索の XLOOKUP は、次の3つを押さえれば完璧です。
シート名!範囲をそのまま XLOOKUP に入れる- 見つからない場合の値を第4引数で指定できる
- 左方向検索・最新検索(-1)も自由
VLOOKUP より柔軟で壊れにくいので、
別シートのマスタ参照は XLOOKUP を使うのが圧倒的におすすめです。
