Excel関数 逆引き集 | 別シートから検索 → XLOOKUP

Excel VBA Excel
スポンサーリンク

概要

「商品マスタは別シート」「社員一覧は別シート」
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 を使うのが圧倒的におすすめです。

タイトルとURLをコピーしました