まず押さえる!XLOOKUPで「複数条件検索」が求められる典型シーン
Excelで検索といえばVLOOKUPの時代が長かったですが、いま実務で頼れるのはXLOOKUP。とはいえ、現場のデータは「社員番号だけで一意に決まる」みたいに都合よくできていません。だからこそ、複数条件での検索が必要になります。
たとえば、次のようなシーンはよくあります。
- 同姓同名がいる名簿:氏名だけだと重複するので、「氏名+部署」や「氏名+入社年」などで特定したい
- 商品マスタのバリエーション:商品名は同じでも「色+サイズ」で別レコード。発注や在庫の照会で詰まりがち
- 売上データの月次集計:「取引先+請求月」で金額を引きたい。取引先だけだと月が混ざる
- 勤怠・シフト:「社員ID+日付」で出勤状況を引く。日付だけ/IDだけでは意味がない
- ログ・申請管理:チケット番号がなく、「申請者+申請日+種別」で探す必要がある
こういうときに「フィルターして目視で探す」「並べ替えて手でコピペする」をやると、時間が溶けるうえに、更新のたびに崩れます。20代のサラリーマンが任されやすい集計・照合・転記では、ここを自動化できるかで生産性が一気に分かれます。
また、複数条件検索が必要な状況には共通点があります。それは検索キーが“単独でユニークじゃない”こと。言い換えると、表の設計上「主キー(ユニークキー)」が一つに定まっていない状態です。現場のExcelではこの状態が普通に起きます。
ただし安心してほしいのは、XLOOKUP自体は基本的に「検索値=検索範囲の一致」で動く関数なので、やることはシンプルです。
- 複数条件を1つの検索キーにまとめる(例:「部署&氏名」)
- 同じルールで表側にもキー列(または計算結果)を用意する
- XLOOKUPでそのキーを検索する
次章では、この「キーをまとめる」部分を&(連結)やCHOOSEを使って作る、実務で一番出番が多い王道パターンを紹介します。ここを押さえるだけで、照合作業のスピードが目に見えて変わります。
基本形を作る:条件列を掛け合わせて検索する王道パターン(&/CHOOSE)
複数条件のXLOOKUPは、結局のところ「複数の条件を1つのキーに見せる」のが基本です。1章で触れた通り、やることはシンプルですが、実務で差が出るのはキーの作り方。ここでは王道の2パターン(&連結/CHOOSE)を押さえます。
パターン1:&で“連結キー”を作って検索(いちばん使う)
たとえば「氏名+部署」で社員を特定し、電話番号を引くケースを考えます。
- 検索したい側:H2=氏名、I2=部署
- マスタ側:A列=氏名、B列=部署、C列=電話
式は次の形が基本です。
=XLOOKUP(H2&"|"&I2, A:A&"|"&B:B, C:C)
ポイントは区切り文字(ここでは「|」)を必ず挟むこと。たとえば「営業」+「1」と「営」+「業1」みたいに、連結した結果が偶然同じになる事故を避けられます(地味ですが実務で効きます)。
また、マスタ側に「キー列」を1本作れるなら、さらに堅く・読みやすくなります。
(D列にキー列)
D2: =A2&"|"&B2
(検索側)
=XLOOKUP(H2&"|"&I2, D:D, C:C)
キー列を作っておくと、式の意図が伝わりやすく、あとで別の人が見ても保守しやすいのがメリットです(引き継ぎが多い部署ほど効きます)。
パターン2:CHOOSEで“2列(複数列)をそのまま条件にする”
連結キーは万能ですが、「区切り文字が必要」「文字列化が入る」などのクセもあります。そこで覚えておくと便利なのがCHOOSEで検索配列を2列にする方法です。
例:同じく「氏名+部署」で電話を引く場合。
=XLOOKUP(1, (A:A=H2)*(B:B=I2), C:C)
これはXLOOKUPの検索値を「1」にして、条件一致した行だけが「1」になる配列を作って探す形です。さらに、条件列が増えるなら掛け算を増やすだけでOK。
=XLOOKUP(1, (A:A=H2)*(B:B=I2)*(E:E=J2), C:C)
そして、この考え方を応用して、列参照をひとまとめにしたいときにCHOOSEが役立ちます。たとえば「検索条件の組み合わせ」を配列として扱いたいとき、
=CHOOSE({1,2}, A:A, B:B)
のように書くと「A列とB列を束ねた配列」を作れます。実務では、条件列や参照先を差し替える場面で式が整理しやすくなります(ただし、この章ではまず“掛け算で条件一致を作る”理解が最優先です)。
どっちを使う?迷ったらこの基準
- 手早く作って横展開したい:&連結(キー列を作れるならなお良い)
- 条件が増減しやすい/文字列化したくない:掛け算(必要に応じてCHOOSEで整理)
次章では、この基本形を実務投入するうえで避けて通れない数値・日付・空白・エラーの崩れをどう防ぐかを、IF/IFERRORで設計していきます。ここを押さえると「動くけどたまに壊れる」状態から卒業できます。
実務で強い応用:数値・日付・空白・エラーを崩さない設計(IF/IFERROR活用)
2章の王道パターン(連結キー/条件掛け算)で「検索できる」状態は作れます。ただ実務で怖いのは、データが常にキレイとは限らないこと。空白が混じる、日付の形式が揺れる、数値なのに文字として入っている、そして見つからない行がある——このあたりで式が崩れると、地味に信用を失います。
1) 入力が揃っていないときは「検索しない」:IFでガード
検索側の条件セル(氏名・部署など)が未入力のままXLOOKUPを走らせると、無駄に計算するうえに、結果が「0」や「#N/A」だらけになりがちです。まずは必要な条件が揃っているときだけ検索する形にします。
=IF(OR(H2="",I2=""),"", XLOOKUP(H2&"|"&I2, A:A&"|"&B:B, C:C))
これだけで「入力途中の行が汚れない」「計算量が減る」という2つのメリットが出ます。条件が3つ以上なら、ORの中身を増やすだけです。
2) “見つからない”は想定内:IFERRORよりXLOOKUPの第4引数が先
現場では、マスタ未登録・入力ミスなどで見つからないことが普通に起きます。そのたびに#N/Aを出すより、メッセージに置き換えた方が運用が回ります。
まずおすすめは、XLOOKUPの第4引数(見つからない場合)を使う方法。
=XLOOKUP(H2&"|"&I2, A:A&"|"&B:B, C:C, "未登録")
そして「見つからない以外のエラー(参照範囲のズレ等)も含めて握りつぶしたい」ならIFERRORを使います。ただしIFERRORは便利な反面、本当に直すべきエラーまで隠すので、使いどころは意識しましょう。
=IFERROR(
XLOOKUP(H2&"|"&I2, A:A&"|"&B:B, C:C),
"要確認"
)
3) 空白の混入でキーがズレる:TRIM/CLEANで“人間の入力”を吸収
複数条件検索が合わない原因で多いのが、見た目は同じなのに余計なスペースが入っているケースです(特にコピペ)。検索キーを作る段階で吸収すると強くなります。
=XLOOKUP(
TRIM(H2)&"|"&TRIM(I2),
TRIM(A:A)&"|"&TRIM(B:B),
C:C,
"未登録"
)
改行などの制御文字が混ざるデータなら、CLEANも候補です(ただし配列計算が増えるので、マスタにキー列を作って前処理できるならその方が軽くて堅いです)。
4) 日付・数値が“文字列扱い”だと一致しない:TEXT/VALUEでルール統一
「日付が一致しない」問題は、データ側がシリアル値(本物の日付)だったり、文字列(”2026/4/1″)だったり混在すると起きます。連結キーでやるなら、日付を必ず同じ書式の文字列に揃えるのが安全です。
=XLOOKUP(
H2&"|"&TEXT(I2,"yyyymmdd"),
A:A&"|"&TEXT(B:B,"yyyymmdd"),
C:C,
"未登録"
)
数値も同じで、「数字に見える文字」が混じると一致しません。必要ならVALUEで数値化してから比較します(掛け算パターンでも有効)。
=XLOOKUP(1, (A:A=H2)*(VALUE(B:B)=VALUE(I2)), C:C, "未登録")
ここまで入れておくと、「普段は動くけど月末だけ壊れる」みたいな事故が激減します。
次章では、こうした堅牢さを維持しつつ、データ行数が増えても重くならないようにするスピード改善(範囲固定、テーブル化、計算量の削減)を詰めていきます。
スピード改善:大きい表でも重くならないコツ(範囲固定・テーブル化・計算量削減)
複数条件XLOOKUPを実務投入すると、次にぶつかるのが「重い」「固まる」「開くだけで待つ」問題です。原因の多くは、式そのものより参照範囲と計算のさせ方。ここを直すだけで体感が一気に変わります。
1) まずやめたい:A:Aみたいな“全列参照”
2〜3章の例では分かりやすさ優先で A:A を使いましたが、行が数万になった瞬間に効いてきます。特に連結キー(A&”|”&B)のような配列計算で全列参照すると、Excelは巨大な計算を毎回作りにいきます。
基本は、必要な行数に範囲を絞ること。
=XLOOKUP(H2&"|"&I2, $A$2:$A$50000&"|"&$B$2:$B$50000, $C$2:$C$50000, "未登録")
範囲の上限は「いまの行数」ではなく、数ヶ月分の増加を見越した現実的な最大にしておくと運用がラクです(それでも全列より圧倒的に軽い)。
2) テーブル化(Ctrl+T)で“自動で伸びる軽い参照”にする
範囲固定は軽い一方、データが増えるたび範囲修正が発生しがち。そこでおすすめがテーブル化です。マスタをテーブルにしておくと、参照範囲が自動で伸びて、式も読みやすくなります。
=XLOOKUP([@氏名]&"|"&[@部署], マスタ[キー], マスタ[電話], "未登録")
さらに強いのが、マスタ側にキー列(前処理)を持たせること。検索のたびに A&"|"&B を作らずに済むので、行数が増えるほど効きます。
- マスタ側:
マスタ[キー]=マスタ[氏名]&"|"&マスタ[部署] - 検索側:
XLOOKUP(氏名&"|"&部署, マスタ[キー], 返したい列)
3) “同じ計算を何回もする”をやめる:ヘルパー列 or LETで削減
重くなる典型は、1つの表で「電話」「社員ID」「上長」…と、同じ条件でXLOOKUPを何本も並べるケースです。検索キー作成(TRIMやTEXTなどの整形)を各セルでやると、同じ前処理が列数分だけ繰り返されます。
対策は2つ。
- 検索側にもキー列を1本作る(ヘルパー列):一番安定して軽い
- LETで式内の重複計算を変数化:シートを汚さず速くできる
LETの例(検索キーを1回だけ作って使い回す):
=LET(
k, TRIM(H2)&"|"&TRIM(I2),
XLOOKUP(k, マスタ[キー], マスタ[電話], "未登録")
)
これだけで「TRIMを何度も回す」みたいなムダが減り、可読性も上がります。
4) 条件掛け算パターンは“範囲の絞り”が生命線
掛け算で一致判定を作る方法((A=H)*(B=I))は便利ですが、配列の比較を行数分だけ走らせます。ここでも全列参照は避け、テーブル列や固定範囲を使いましょう。
=XLOOKUP(1, (マスタ[氏名]=H2)*(マスタ[部署]=I2), マスタ[電話], "未登録")
また、入力条件が揃っていない行まで計算しないよう、3章のIFガード(未入力なら空欄)を入れておくと、計算回数そのものが減って効きます。
次章では、ここまでの内容を「コピペで使える形」に落として、テンプレ化・命名・保守ルールまで含めて運用に乗せます。速くて壊れないだけでなく、引き継げるXLOOKUPに仕上げましょう。
コピペで使える:複数条件XLOOKUPのテンプレ例と運用ルール(命名・保守・注意点)
1〜4章で「複数条件で引ける」「壊れにくい」「重くならない」まで作りました。最後はそれをチームで回せる形(テンプレ+ルール)に落とします。Excelは個人技で終わらせると、更新・引き継ぎで必ず詰まるので、ここが実務の勝ち筋です。
テンプレ1:おすすめ最優先「キー列+テーブル化」版(速い・読みやすい・保守強い)
マスタ(Ctrl+Tでテーブル化)に、あらかじめキー列を作っておきます。
- テーブル名:Master
- 列:[氏名] [部署] [電話] [キー]
Master[キー](マスタ側の列):
=TRIM([@氏名])&"|"&TRIM([@部署])
検索側(例:氏名=H2、部署=I2、電話を返す):
=LET(
k, TRIM($H2)&"|"&TRIM($I2),
IF(OR($H2="",$I2=""),"",
XLOOKUP(k, Master[キー], Master[電話], "未登録")
)
)
ポイント:検索のたびにマスタ側で連結計算をしないので軽い/キーの定義が1か所に集約されるので保守しやすい、が両立します。
テンプレ2:日付入り(社員ID+日付など)でズレない版
日付は「見た目が同じ」でも中身が違うことがあるので、キーにするときはTEXTで固定書式が安全です。
Master[キー]:
=[@社員ID]&"|"&TEXT([@日付],"yyyymmdd")
検索側(社員ID=H2、日付=I2):
=LET(
k, $H2&"|"&TEXT($I2,"yyyymmdd"),
IF(OR($H2="",$I2=""),"",
XLOOKUP(k, Master[キー], Master[出勤状況], "未登録")
)
)
テンプレ3:キー列を作れないときの掛け算版(最小改修で導入)
マスタに列追加できない事情がある場合の逃げ道です。重くなりやすいので、テーブル列参照+IFガードはセットで。
=IF(OR($H2="",$I2=""),"",
XLOOKUP(1,
(Master[氏名]=TRIM($H2))*(Master[部署]=TRIM($I2)),
Master[電話],
"未登録"
)
)
運用ルール(ここだけ決めると一気に回る)
- 区切り文字は固定:基本は「|」。シート内で統一(混ざると事故ります)。
- キーの定義を1か所に寄せる:可能ならマスタにキー列。どうしても無理なら、検索側にキー列(ヘルパー列)を作って使い回す。
- テーブル名・列名をルール化:例)Master、Txn(取引)、[キー]は共通列名。属人化を防げます。
- 「未登録」「要確認」の文言を統一:集計・フィルタがしやすい。表記ゆれが地味に工数を増やします。
- キーは“見た目”ではなく“中身”で揃える:氏名・部署はTRIM、日付はTEXT、数値は必要ならVALUE。揃え方を決めたら変えない。
注意点(ハマりどころだけ先に潰す)
- 重複キーがあると、先頭一致が返る:XLOOKUPは基本的に最初に見つかった行を返します。キーが一意になっているか(同姓同名+部署でもダメなら社員IDを足す等)を最初に確認。
- 区切り文字がデータに含まれると衝突:部署名などに「|」が入り得るなら、区切り文字を変える(例「§」)か、掛け算版に寄せる。
- 全列参照に戻さない:テンプレを使うならテーブル参照が前提。A:Aに戻った瞬間、月末に固まります。
この5章のテンプレをベースに「キーの作り方」と「命名」を固定すると、複数条件XLOOKUPは一発芸ではなく、運用できる武器になります。あとは“どの項目をキーにすると一意になるか”だけ決めれば、照合・転記・集計の作業時間は確実に削れます。


コメント