Excel関数 逆引き集 | 別ブックから検索 → XLOOKUP

Excel VBA Excel
スポンサーリンク

概要

「商品マスタは別ファイル(別ブック)にある」
「社員一覧は共有フォルダの別ブックにある」
Excel では“別ブックのデータを検索して持ってくる”場面が非常に多いです。

そんなときに最強なのが XLOOKUP
別シートと同じ感覚で、ブック名+シート名+範囲を指定するだけで検索できます。

VLOOKUP のように列番号を数える必要もなく、
左方向検索も自由、見つからない場合のメッセージも一発で設定できます。


別ブック参照の基本

別ブックのセル参照の書き方

Excel では、別ブックのセルを参照するときは次の形式になります。

='[ブック名.xlsx]シート名'!セル

例:
Book2.xlsx の Sheet1 の A2 を参照する場合:

='[Book2.xlsx]Sheet1'!A2

範囲なら:

='[Book2.xlsx]Sheet1'!A2:C100

この形式をそのまま XLOOKUP に入れればOKです。


別ブックから検索する XLOOKUP の基本形

商品コードから商品名を別ブックから取得

商品マスタが Book2.xlsx の Sheet1 にあり、構造が次のとおりとします。

Book2.xlsx(Sheet1)
A列:商品コード
B列:商品名

注文シート(Book1.xlsx)で、E2 に商品コードを入力し、
F2 に商品名を表示したい場合:

=XLOOKUP(E2,
         '[Book2.xlsx]Sheet1'!$A$2:$A$100,
         '[Book2.xlsx]Sheet1'!$B$2:$B$100)

意味をかみ砕くと:

  • 「E2 の商品コードを」
  • 「Book2.xlsx の Sheet1 の A2:A100 から探して」
  • 「一致した行の B2:B100(商品名)を返す」

これだけで別ブック検索が完成します。


見つからない場合のメッセージを設定する

XLOOKUP は第4引数で「見つからないときの値」を指定できます。

=XLOOKUP(E2,
         '[Book2.xlsx]Sheet1'!$A$2:$A$100,
         '[Book2.xlsx]Sheet1'!$B$2:$B$100,
         "未登録")

商品コードが存在しない場合は「未登録」と表示されます。


入力が空欄のときは何も表示しない

検索値セル(E2)が空欄のときまで XLOOKUP を走らせると、
「未登録」が並んで見づらくなります。

そんなときは IF と組み合わせます。

=IF(E2="","",
    XLOOKUP(E2,
            '[Book2.xlsx]Sheet1'!$A$2:$A$100,
            '[Book2.xlsx]Sheet1'!$B$2:$B$100,
            "未登録"))

左方向検索も自由(別ブックでもOK)

商品名が A列、商品コードが B列のように、
検索したい列が右側にある場合でも問題ありません。

=XLOOKUP(E2,
         '[Book2.xlsx]Sheet1'!$B$2:$B$100,
         '[Book2.xlsx]Sheet1'!$A$2:$A$100,
         "未登録")

別ブックでも“左方向検索”が簡単にできます。


応用:別ブックの最新データを取得(検索方向 -1)

履歴表が別ブックにあり、
同じIDが複数行ある場合は「最新(最後の一致)」を取りたいことがあります。

その場合は検索モードを -1 にします。

=XLOOKUP(E2,
         '[Book2.xlsx]Sheet1'!$A$2:$A$100,
         '[Book2.xlsx]Sheet1'!$B$2:$B$100,
         "なし",
         0,
         -1)

Book2.xlsx の A列を 下から上へ検索し、
最後に一致した行の B列を返します。


よくあるつまずきと対策

ブック名にスペースがある場合は '[ブック名]' で囲む

例:
ブック名が「商品 マスタ.xlsx」の場合:

='[商品 マスタ.xlsx]Sheet1'!A2:C100

ブックが閉じていても参照できる(ただしパスが付く)

ブックが閉じている場合、Excel が自動でフルパスを付けます。

例:

='C:\Data\[Book2.xlsx]Sheet1'!A2

仕組みは同じなので気にせず使えます。

検索範囲と戻り範囲の行数を必ず揃える

NG例:

  • 検索範囲:A2:A100
  • 戻り範囲:B3:B100(開始行がズレている)

必ず同じ行数・同じ開始行にしてください。

完全一致が標準なので安心

XLOOKUP は一致モードを省略すると「完全一致」になります。
VLOOKUP のように FALSE を書き忘れて事故る心配がありません。


例題

問題1: Book2.xlsx の Sheet1 に商品マスタ(A列=商品コード、B列=商品名)があります。Book1.xlsx の E2 の商品コードに一致する商品名を F2 に表示してください。

=XLOOKUP(E2,
         '[Book2.xlsx]Sheet1'!$A$2:$A$100,
         '[Book2.xlsx]Sheet1'!$B$2:$B$100)

問題2: 問題1の式で、見つからない場合は「未登録」と表示するように G2 に式を書いてください。

=XLOOKUP(E2,
         '[Book2.xlsx]Sheet1'!$A$2:$A$100,
         '[Book2.xlsx]Sheet1'!$B$2:$B$100,
         "未登録")

問題3: Book2.xlsx の B列に商品コード、A列に商品名があります。E2 の商品コードに一致する商品名(左方向)を F2 に表示してください。

=XLOOKUP(E2,
         '[Book2.xlsx]Sheet1'!$B$2:$B$100,
         '[Book2.xlsx]Sheet1'!$A$2:$A$100,
         "未登録")

問題4: E2 が空欄のときは何も表示せず、入力されているときだけ商品名を表示する式を H2 に書いてください。

=IF(E2="","",
    XLOOKUP(E2,
            '[Book2.xlsx]Sheet1'!$A$2:$A$100,
            '[Book2.xlsx]Sheet1'!$B$2:$B$100,
            "未登録"))

問題5: Book2.xlsx の A2:A100 に顧客ID、B2:B100 に取引日があります。E2 の顧客IDに対して、最後に一致した取引日(最新)を F2 に表示してください。

=XLOOKUP(E2,
         '[Book2.xlsx]Sheet1'!$A$2:$A$100,
         '[Book2.xlsx]Sheet1'!$B$2:$B$100,
         "なし",
         0,
         -1)

まとめ

別ブック検索の XLOOKUP は、次の3つを押さえれば完璧です。

  • ='[ブック名.xlsx]シート名'!範囲 をそのまま XLOOKUP に入れる
  • 見つからない場合の値を第4引数で指定できる
  • 左方向検索・最新検索(-1)も自由

別ブックのマスタ参照は XLOOKUP を使うと、
正確・柔軟・壊れにくい検索が一発で作れるようになります。

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