Excelのクロス抽出|XLOOKUP・INDEX+MATCHで商品×倉庫を検索

Excelのクロス抽出|XLOOKUP・INDEX+MATCHで商品×倉庫を検索

Excelのクロス抽出は、行見出しと列見出しが交差するセルを取り出す方法です。商品と倉庫で在庫数を調べる場合などに使います。XLOOKUPの入れ子、またはINDEX+MATCHで求められます。

練習用Excelファイル(無料ダウンロード)
XLOOKUP・INDEXとMATCH・複数条件の3シート入り。複数条件シートの「カモミール/2100/倉庫B」は21です。黄色い検索条件を変更して試せます。ボタンをクリック/タップして保存し、Excelで開いてください。
Excelファイル(.xlsx)/登録不要/数式・練習データ入り
目次

商品×倉庫のクロス表から数量を取り出す

サンプルではA3に「倉庫B」、B3に「ペパーミント」を指定し、C3に数量40を表示します。B5:D5が倉庫の見出し、A6:A9が商品名、B6:D9が数量です。

まず動かしてみよう|この記事のサンプルをその場で試せます

練習用ファイルをダウンロードしなくても、記事と同じデータ・同じセル番地のサンプルをここで動かせます。黄色いセルを書き換えると、結果がその場で変わります。各解説の最後にある「▶ この式を試す」を押すと、このツールの該当セルへ移動します。

XLOOKUPでクロス抽出する数式

C3に次の式を入力します。

C3に入力:XLOOKUPの入れ子でクロス抽出(倉庫の列×商品の行)
数式=XLOOKUP(A3,$B$5:$D$5,XLOOKUP(B3,$A$6:$A$9,$B$6:$D$9))
ひとことで内側で商品の「行」を選び、外側でその行の倉庫の「列」を選ぶ
A3
外側の検索値です。倉庫名(列見出し)で探す条件で、サンプルは「倉庫B」です
$B$5:$D$5
外側の検索範囲です。横に並ぶ倉庫の見出し(倉庫A・B・C)です
XLOOKUP(B3,$A$6:$A$9,$B$6:$D$9)
外側の戻り範囲として、内側のXLOOKUPが返す「選んだ商品の行(3つの数量)」を渡します。数量の範囲には見出しを含めません
データの流れ
① 内側:商品「ペパーミント」の行を選ぶ(黄色の3つ)
B720C740D710
▼
② 外側:倉庫「倉庫B」の列を選ぶ
倉庫A20倉庫B40倉庫C10
▼
③ 交点の数量が返る結果
C340

内側はペパーミントの行を取り出し、外側はその行から倉庫Bの列を選びます。数量の戻り範囲には見出しを含めません。数式を下へコピーしても元の表が動かないよう、検索範囲に $ を付けています。

商品×倉庫の交点の数量を取り出す(XLOOKUPの入れ子)式 =XLOOKUP(A3,$B$5:$D$5,XLOOKUP(B3,$A$6:$A$9,$B$6:$D$9)) の解説図。C3に入力する
C3に =XLOOKUP(A3,$B$5:$D$5,XLOOKUP(B3,$A$6:$A$9,$B$6:$D$9)) を入力。内側:ペパーミントの行 外側:倉庫B の列 → 交わる 40

INDEX+MATCHで同じ結果を求める

C3に入力:INDEX+MATCHでクロス抽出(Excel 2019・2016向け)
数式=INDEX($B$6:$D$9,MATCH(B3,$A$6:$A$9,0),MATCH(A3,$B$5:$D$5,0))
ひとことでMATCHで行番号と列番号を求め、INDEXで交点の数量を返す
$B$6:$D$9
数量の表です。見出しを含めない範囲にします
MATCH(B3,$A$6:$A$9,0)
行番号です。B3の商品が、商品名の何行目かを返します。最後の 0 は完全一致の指定です
MATCH(A3,$B$5:$D$5,0)
列番号です。A3の倉庫が、倉庫名の何列目かを返します
データの流れ
① 行番号と列番号をMATCHで求める
行番号2列番号2
▼
② 数量の表の、その行と列の交点を返す結果
C340
ポイント1つ目のMATCHは商品が何行目か、2つ目は倉庫が何列目かを調べます。両方の末尾を0にして完全一致にします。INDEXの範囲は数量だけなので、行番号・列番号はその範囲を基準に数えます。
対応バージョンXLOOKUPはMicrosoft 365・Excel 2024・2021、INDEX+MATCHはExcel 2019・2016でも利用できます。
練習用Excelファイル(無料ダウンロード)
XLOOKUP・INDEX+MATCH・複数条件の3シートが入っています倉庫と商品を書き換えて、交点の数量が変わるのを確認できます。商品名・単価・倉庫の複数条件のシートも入っています。
Excelファイル(.xlsx)/登録不要/数式・練習データ入り

商品名と単価の2条件で行を選び、倉庫で列を選ぶ

応用の表では、A6:A11に商品名、B6:B11に単価、C5:E5に倉庫名、C6:E11に数量を置きます。検索条件はA3=倉庫、B3=商品名、C3=単価です。D3へ次の式を入力します。

D3(またはD14)に入力:商品名と単価の2条件で行を選ぶ
数式=XLOOKUP(A3,$C$5:$E$5,XLOOKUP(1,($A$6:$A$11=B3)*($B$6:$B$11=C3),$C$6:$E$11))
ひとことで商品名と単価の両方が合う行を選び、そこから倉庫の列を選ぶ
A3
外側の検索値です。倉庫名で探す条件で、サンプルは「倉庫B」です
$C$5:$E$5
外側の検索範囲です。倉庫の見出しです(単価のB列は含めません)
XLOOKUP(1,($A$6:$A$11=B3)*($B$6:$B$11=C3),$C$6:$E$11)
内側は、商品名がB3、かつ単価がC3の行だけを 1 にして、その行の数量(3つ)を返します
データの流れ
① 商品名と単価の両方が合う行を探す(黄色)
6〜10行カモミール/200011行カモミール/2100
▼
② 倉庫Bの列を選ぶ
倉庫A40倉庫B21倉庫C35
▼
③ 交点の数量が返る結果
D1421
ポイント2つの行条件が両方一致した場所だけ1になります。単価列を数量の戻り範囲に含めないことが大切です。C5:E5とC6:E11の列位置をそろえます。

古いExcelでは検索用の補助列を作る

F6に次の式を入力し、F11までコピーします。区切り文字「/」が商品名などに含まれないことを前提にしています。

F6に入力(F11までコピー):検索用の補助キーを作る
数式=A6&"/"&B6
ひとことで商品名と単価を「/」でつないだ文字を作る
A6
商品名です
"/"
区切りの文字です。区切りを入れると、別の組み合わせが同じ文字になる事故を減らせます
B6
単価です
補足例:レモングラス/2000 → レモングラス/2000。区切り文字「/」が商品名などに含まれないことが前提です。

D3では補助列から行番号を探します。

D3に入力:補助列を使って行を選ぶ(Excel 2019・2016向け)
数式=INDEX($C$6:$E$11,MATCH(B3&"/"&C3,$F$6:$F$11,0),MATCH(A3,$C$5:$E$5,0))
ひとことで補助キーから行番号を、倉庫名から列番号を求めて、交点を返す
$C$6:$E$11
数量の表です。単価のB列と補助キーのF列は含めません
MATCH(B3&"/"&C3,$F$6:$F$11,0)
行番号です。B3とC3を「/」でつないだ文字を、補助キーの中から探します
MATCH(A3,$C$5:$E$5,0)
列番号です。A3の倉庫が、倉庫名の何列目かを返します
データの流れ
① 補助キーから、行を探す
F11カモミール/2100
▼
② 倉庫Bの列と交差する数量が返る結果
D321
注意単純に文字をつなげると別の組み合わせが同じ文字列になることがあります。区切りを入れる方法でも、区切り文字が元データに含まれていないかを確認してください。
練習用Excelファイル(無料ダウンロード)
倉庫や商品を、表にない名前に変えて、エラーの出方も試せます。XLOOKUP対応のMicrosoft 365・Excel 2024・2021で開いてください。
Excelファイル(.xlsx)/登録不要/数式・練習データ入り

クロス抽出ができない・エラーになるときの確認表

症状見直す場所
#N/A商品名・倉庫名・単価が存在するか、型や空白が一致するか
#VALUE!XLOOKUPの検索範囲と戻り範囲の行数・列数
隣の倉庫の数量が出る見出し行と数量表の開始列が同じか
同じ条件なのに値が違う商品名や条件の組み合わせが重複していないか
ポイント未登録時の表示だけを変えたい場合は、完成した検索式をIFNA(検索式,"該当なし")で囲めます。元の数量セルの#N/Aも置き換わるため、初めは元の式で原因を確認します。

クロス検索と複数行の抽出は違う

ポイントこの方法は1つの交点を返します。条件に合う明細をすべて並べるときはFILTERの複数条件抽出、行と列の選び方から学ぶときはXLOOKUPの入れ子を順に分解する解説をご覧ください。
練習用Excelファイル(無料ダウンロード)
XLOOKUP・INDEXとMATCH・複数条件の3シート入り。複数条件シートの「カモミール/2100/倉庫B」は21です。黄色い検索条件を変更して試せます。ボタンをクリック/タップして保存し、Excelで開いてください。
Excelファイル(.xlsx)/登録不要/数式・練習データ入り

仕様の確認:Microsoft公式・XLOOKUP関数

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

コメント

コメントする

目次