概要
「商品マスタは別ファイル(別ブック)にある」
「社員一覧は共有フォルダの別ブックにある」
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 を使うと、
正確・柔軟・壊れにくい検索が一発で作れるようになります。
