Excel関数でリストから合致した値のみ反映する方法をお探しですね。
広告
別シートのリストから一致するデータだけを表示する方法【Excel関数で自動化】
Excelで「別シートにあるリストと一致したデータだけを表示したい」「商品コードや社員番号が合う行だけ反映したい」って場面、よくありますよね。
手作業で照合すると見落としや入力ミスが起きやすいし、データ量が増えるほど確認に時間がかかってしまいます。
この記事では、別シートのリストから合致した値だけを反映・抽出するために使える関数の組み合わせを、目的別にわかりやすく解説していきます。
1. 別シートのリストから合致した値だけを反映する基本の考え方
Excelで別シートのリストを参照して値を反映するとき、まず整理したいのは「1つの検索値に対して対応する値を返したいのか」「条件に合う行をまとめて抽出したいのか」という点です。
例えば、Sheet1に入力した商品コードをもとに、Sheet2の商品マスタから商品名や価格を表示したい場合は、**XLOOKUP関数**や**VLOOKUP関数**が向いています。
一方、Sheet2にあるリストと一致するデータだけを一覧として抜き出したい場合は、**FILTER関数**や**COUNTIF関数**を組み合わせる方法が便利です。
別シート参照の基本ルール
別シート参照の基本は、シート名の後ろに「**!**」を付けて範囲を指定することです。
例えば、Sheet2のA列を参照するなら「**Sheet2!A:A**」のように書きます。
シート名に空白や記号が含まれる場合は、「**’商品 マスタ’!A:A**」のようにシングルクォーテーションで囲む必要があります。
この指定を正しく理解しておくと、どの関数を使う場合でも応用しやすくなりますよ。
完全一致と部分一致の違い
また、「合致した値のみ」といっても、完全一致で探すのか、部分一致で探すのかによって式は変わります。
業務でよく使う社員番号、商品コード、顧客IDのようなキー項目は、基本的に**完全一致で検索するのが安全**です。
近似一致を使うと意図しない値が返ることがあるので注意が必要です。
まずはキー項目を決めて、検索範囲と返したい範囲を分けて考えることが、正確な抽出の第一歩になります。
2. XLOOKUPで別シートの一致データを反映する方法
Excel 2021やMicrosoft 365など、**XLOOKUP関数**が使える環境なら、これが最も扱いやすい方法です。
XLOOKUPは「検索値」「検索範囲」「戻り範囲」を分けて指定できるので、VLOOKUPのように検索列が左端にある必要がありません。
右から左への検索にも対応していて、表の列構成を大きく変えずに使える点が便利です。
基本的な使い方
例えば、Sheet1のA2セルに商品コードがあって、Sheet2の商品マスタでA列に商品コード、B列に商品名、C列に価格が入っているとします。
このとき、Sheet1のB2に商品名を反映したい場合は、次のように入力します。
“`excel
=XLOOKUP(A2,Sheet2!A:A,Sheet2!B:B,””)
“`
この式は、Sheet1のA2にある商品コードをSheet2のA列から探して、一致した行のB列の商品名を返します。
最後の「**””**」は、見つからなかった場合に空白を表示する指定です。
エラー表示のままだと表が見づらくなるので、実務ではこのように見つからない場合の表示をあらかじめ決めておくと扱いやすくなります。
価格を反映したい場合は、戻り範囲を**Sheet2!C:C**に変更すれば同じ考え方で対応できます。
複数列をまとめて反映する方法
複数の列をまとめて反映したい場合も、XLOOKUPなら簡単です。
Microsoft 365などの動的配列に対応したExcelでは、戻り範囲に複数列を指定できます。
例えば商品名と価格を同時に返したい場合は、次のように入力します。
“`excel
=XLOOKUP(A2,Sheet2!A:A,Sheet2!B:C,””)
“`
この式を入力すると、一致した商品コードに対応するB列からC列の値が横方向に展開されます。
従来は商品名用、価格用と式を分ける必要がありましたが、XLOOKUPなら1つの式で複数項目を反映できるんです。
ただし、展開先のセルに既存データがあると結果が表示されないので、数式を入れる周辺に空きセルがあるか確認しておきましょう。
3. VLOOKUP・INDEX+MATCHで別シートの一致値を取り出す方法
XLOOKUPが使えないExcel 2016やExcel 2019の一部環境では、**VLOOKUP関数**が基本になります。
VLOOKUPの基本的な使い方
VLOOKUPは指定範囲の左端列で検索して、同じ行の指定した列番号の値を返す関数です。
例えば、Sheet1のA2に商品コードがあって、Sheet2のA列からC列に商品マスタがある場合、B列の商品名を反映する式は次のようになります。
“`excel
=VLOOKUP(A2,Sheet2!A:C,2,FALSE)
“`
この式では、A2の値をSheet2のA列で探して、指定範囲の左から2列目、つまりB列の値を返します。
最後の**FALSE**は完全一致を意味します。
VLOOKUPではこの指定を省略すると近似一致として扱われる場合があって、商品コードやIDの照合では誤った値が返る原因になります。
そのため、別シートのリストから合致した値のみを反映したいときは、基本的に**FALSE**を入れると覚えておくと安全です。
VLOOKUPの制限とINDEX+MATCHの活用
ただし、VLOOKUPには「**検索する列が指定範囲の一番左にないと使えない**」という制限があります。
例えば、Sheet2で商品名がA列、商品コードがC列にあって、商品コードから商品名を返したい場合、VLOOKUPだけでは扱いづらくなります。
このようなときは、**INDEX関数とMATCH関数を組み合わせる**方法が有効です。
MATCHで一致する位置を調べて、INDEXでその位置にある値を返す、という役割分担で考えると理解しやすくなります。
“`excel
=INDEX(Sheet2!A:A,MATCH(A2,Sheet2!C:C,0))
“`
この式では、Sheet1のA2にある商品コードをSheet2のC列から完全一致で探して、その行番号に対応するSheet2のA列の商品名を返します。
MATCH関数の第3引数「**0**」は完全一致を意味します。
INDEX+MATCHは、検索列と戻り列の位置関係に縛られないので、列の並びが変わりやすい表や、左側の列に値を返したい場面で特に役立ちます。
XLOOKUPが使えるならXLOOKUPが簡単ですが、古いExcel環境ではINDEX+MATCHを覚えておくと対応できる範囲が広がりますよ。
4. FILTER・COUNTIFで「一致した行だけ」を別シートから抽出する方法
ここまでのXLOOKUPやVLOOKUPは、基本的に「検索値に対応する1件の値を返す」方法でした。
一方で、別シートにある照合用リストと一致する行だけをまとめて抽出したい場合は、**FILTER関数とCOUNTIF関数の組み合わせ**が便利です。
FILTER関数を使った抽出方法
例えば、Sheet1に売上一覧があって、A列に商品コード、B列に商品名、C列に売上金額が入っているとします。
Sheet2のA列に抽出対象の商品コードリストがある場合、Sheet1から対象コードに一致する行だけを抜き出すには次のように入力します。
“`excel
=FILTER(Sheet1!A:C,COUNTIF(Sheet2!A:A,Sheet1!A:A)>0,”該当なし”)
“`
この式では、COUNTIFでSheet1の各商品コードがSheet2の抽出対象リストに存在するかを判定して、存在する行だけをFILTERで表示します。
「**>0**」は、リスト内に1回以上見つかったものを対象にするという意味です。
最後の「**該当なし**」は、条件に合うデータがない場合に表示する文字列です。
手作業でフィルターをかける方法と違って、参照元のデータや抽出対象リストが更新されると結果も自動で変わるので、定期的な集計や確認作業に向いています。
FILTER関数が使えない場合の代替方法
FILTER関数が使えないExcel環境では、作業列を使ってCOUNTIFで一致判定を行って、その結果をもとにフィルターや並べ替えを使う方法が現実的です。
例えば、Sheet1のD2に次の式を入れると、A2の商品コードがSheet2のリストに存在するかを判定できます。
“`excel
=IF(COUNTIF(Sheet2!A:A,A2)>0,”一致”,””)
“`
この式を下方向にコピーして、「**一致**」と表示された行だけをフィルターで抽出すれば、別シートのリストに合致した値だけを確認できます。
関数だけで完全に自動抽出したい場合はFILTERが便利ですが、古いExcelでもCOUNTIFとIFを組み合わせれば、同じ目的に近い処理は可能です。
うまくいかないときのチェックポイント
実務では、合致しない原因が数式ではなくデータ側にあるケースも少なくありません。
よくある原因は次のようなものです。
– 全角と半角の違い
– 前後の余分なスペース
– 数値と文字列の混在
– シート名の入力ミス
特に商品コードや社員番号は、見た目が同じでも「**001**」と「**1**」が別物として扱われることがあります。
うまく反映されない場合は、関数を疑う前に、検索値と参照先のデータ形式がそろっているか確認すると解決しやすくなります。
まとめ:目的に合わせて関数を使い分けよう
別シートのリストから合致した値だけを反映・抽出する関数の組み合わせは、目的によって使い分けるのが基本です。
– **1件ずつ対応する値を返す**なら→ XLOOKUP
– **古いExcel**なら→ VLOOKUPまたはINDEX+MATCH
– **条件に合う行をまとめて抽出する**なら→ FILTER+COUNTIF
これらを使い分けられるようになると、照合作業や転記作業を大幅に減らせます。
まずは自分の表が「値を反映したい」のか「行を抽出したい」のかを判断して、最適な関数を選んでみてください。
慣れてくれば、きっと作業がグッと楽になりますよ!
広告
