目次
このチュートリアルでは、ExcelでVLOOKUP式を使用して2つの列を比較し、共通の値(一致)を返したり、欠損データ(相違)を見つける方法を紹介します。
2つの異なるリストにデータがある場合、どちらかのリストでどの情報が欠けているか、あるいは両方にどのデータがあるかを確認するために、両者を比較することがよくあります。 比較はさまざまな方法で行うことができ、どの方法を使うかは、まさに何を求めるかによって異なります。
ExcelでVLOOKUPを使用して2つの列を比較する方法
2つのデータ列があり、一方のリストのどのデータポイントがもう一方のリストに存在するかを調べたい場合、VLOOKUP関数を使用してリストの共通値を比較することができます。
VLOOKUP式を基本形として構築するには、次のような方法があります。
- について ルックアップバリュー (第1引数)の場合、リスト1の一番上のセルを使用します。
- について table_array (第2引数)、リスト2全体を供給する。
- について col_index_num (第3引数)の場合、配列の列が1つだけなので、1を使用します。
- について レンジルック (第4引数)の場合、FALSE - 完全一致とする。
A列(リスト1)に参加者の名前、B列(リスト2)に予選を通過した人の名前があるとします。 この2つのリストを比較して、グループAから本戦に進出した参加者を決定したいとします。 これを行うには、次の式を使用します。
=vlookup(a2, $c$2:$c$9, 1, false)
数式はセル E2 に移動し、リスト 1 のアイテムの数だけセルをドラッグダウンします。
にご注目ください。 table_array は絶対参照($C$2:$C$9)でロックされているので、数式を下のセルにコピーしても一定に保たれます。
ご覧の通り、E列に有資格者の名前が表示されています。残りの参加者については、リスト2に名前がないことを示す#N/Aエラーが表示されます。
変装 #N/A エラー
上記のVLOOKUP式は、共通の値を返し、欠落しているデータポイントを特定するという主目的を完全に満たしますが、#N/Aエラーが大量に発生するため、経験の浅いユーザーは、式に何か問題があるのではないかと混乱する可能性があります。
でエラーを置き換えるには 空白セル というように、VLOOKUPとIFNAまたはIFERROR関数を組み合わせて使用します。
=ifna(vlookup(a2, $c$2:$c$9, 1, false), "")
改良されたこの式は、#N/Aの代わりに空文字列("")を返します。 カスタムテキスト 例えば、"Not in List 2"、"Not present"、"Not available "などです。
=IFNA(VLOOKUP(A2, $C$2:$C$9, 1, FALSE), "リスト2にはありません")
これは、Excelで2つの列を比較するための基本的なVLOOKUP式です。 特定のタスクに応じて、さらなる例で示すように変更することができます。
VLOOKUPを使用して異なるExcelシートの2つの列を比較する
現実には、比較する列が同じシートにあるとは限りません。 小さなデータセットでは、2つのシートを並べて表示し、手作業で違いを見つけてみることができます。
別のワークシートやワークブックで数式を検索するには、外部参照を使用する必要があります。 最適な方法は、メインシートで数式の入力を開始し、別のワークシートに切り替えてマウスでリストを選択すると、適切な範囲参照が数式に自動的に追加されます。
のA列にリスト1があると仮定します。 シート1 で、リスト2がA列に シート2 という数式を使えば、2つの列を比較し、一致するものを見つけることができます。
=IFNA(VLOOKUP(A2, Sheet2!$A$2:$A$9, 1, FALSE), "")
詳しくは、こちらをご覧ください。
- 別シートからのVLOOKUP
- 異なるワークブックからのVLOOKUP
2つの列を比較し、共通する値(マッチ)を返す
これまでの例では、VLOOKUP式を最も単純な形で説明しました。
=ifna(vlookup(a2, $c$2:$c$9, 1, false), "")
その式の結果は、両方の列に存在する値のリストと、2列目で利用できない値の代わりに空白のセルが表示されます。
隙間のない共通値のリストを得るには、結果の列にオートフィルタを追加し、空白をフィルタリングすればよい。
動的配列に対応したExcel for Microsoft 365やExcel 2021では、FILTER関数を利用して動的に空白をふるい落とすことができます。 そのためには、FILTERの条件としてIFNAのVLOOKUP式を利用します。
=filter(a2:a14, ifna(vlookup(a2:a14, c2:c9, 1, false), "")"")
この場合、リスト1(A2:A14)をすべて ルックアップバリュー この関数は、各検索値をリスト 2 (C2:C9) と比較し、マッチした値の配列と、値が見つからないことを表す #N/A エラーを返します。 IFNA 関数はエラーを空文字列に置き換え、その結果を FILTER 関数に渡します。
また、ISNA関数を使ってVLOOKUPの結果をチェックし、FALSEと評価される項目、つまり#N/Aエラー以外の値をフィルタリングすることも可能です。
=filter(a2:a14, isna(vlookup(a2:a14, c2:c9, 1, false))=false)です。
XLOOKUP関数でも同じ結果が得られるので、数式はさらにシンプルになります。 XLOOKUPは内部で#N/Aエラーを処理できるため(オプションの if_not_found の引数)、IFNAやISNAのラッパーはなくても大丈夫です。
=filter(a2:a14, xlookup(a2:a14, c2:c9, c2:c9,"")"")
2つの列を比較し、欠損値(差分)を求める
Excelで2つの列を比較して違いを見つけるには、このように進めていきます。
- リスト2($C$2:$C$9)の中からリスト1(A2)の最初の値を検索するコア式を書きなさい。
vlookup(a2, $c$2:$c$9, 1, false)
- VLOOKUPの出力に#N/Aエラーがないか、ISNA関数で上記の式をネストします。 エラーがあった場合、ISNAはTRUEを、それ以外はFALSEを出力します。
isna(vlookup(a2, $c$2:$c$9, 1, false))
- IF関数の論理テストにISNA VLOOKUP式を使用します。 テストの評価がTRUE(#N/Aエラー)の場合、同じ行のリスト1の値を返します。 テストの評価がFALSE(リスト2の一致が見つかった)の場合、空の文字列を返します。
完全な式はこのような形になる。
=if(isna(vlookup(a2, $c$2:$c$9, 1, false)), a2, "")
空白を取り除くには、上の例で示したようにExcelのフィルタを適用してください。
Excel 365やExcel 2021では、結果リストを動的にフィルタリングさせることができます。 そのためには、ISNA VLOOKUP式を 含む の引数を指定します。
=filter(a2:a14, isna(vlookup(a2:a14, c2:c9, 1, false)))
もう一つの方法は、基準に対してXLOOKUPを使用することです。この関数は、欠損データポイントに対して空の文字列("")を返し、リスト1においてXLOOKUPが空の文字列(="")を返した値をフィルタリングするのです。
=filter(a2:a14, xlookup(a2:a14, c2:c9, c2:c9,"")="")
2つの列の一致と相違を識別するためのVLOOKUP式
最初のリストに、2番目のリストで使用できる値と使用できない値を示すテキストラベルを追加したい場合は、VLOOKUP式とIF関数およびISNA/ISERROR関数を使用します。
例えば、A列とD列の両方にある名前と、A列にしかない名前を識別するには、次のような式になります。
=IF(ISNA(VLOOKUP(A2, $D$2:$D$9, 1, FALSE)), "Not qualified", "Qualified", "資格なし")
ここでは、ISNA関数がVLOOKUPで発生した#N/Aエラーをキャッチし、その中間結果をIF関数に渡して、エラーの場合は指定したテキストを、検索に成功した場合は別のテキストを返している。
この例では、サンプルデータセットに適した「Not qualified」/「Qualified」ラベルを使用していますが、「Not in List 2」/「In List 2」、「Not available」/「Available」、その他適切なラベルに置き換えることができます。
この数式は、リスト1に隣接する列に挿入し、リスト内のアイテムの数だけセルにコピーするのが最適です。
もう一つ、2列の一致と相違を識別する方法として、MATCH関数を使用する方法があります。
=IF(ISNA(MATCH(A2, $D$2:$D$9, 0)), "リスト2にはない", "リスト2にはある")
2つの列を比較し、3番目の列の値を返す。
関連するデータを含むテーブルを扱うとき、2つの異なるテーブルの2つの列を比較し、一致する値を別の列から返す必要がある場合があります。 実際、これはVLOOKUP関数の主な用途であり、そのために設計された目的です。
例えば、下の2つの表のA列とD列の名前を比較し、E列の時刻を返すには、次のような式になります。
=vlookup(a3, $d$3:$e$10, 2, false)
N/Aエラーを隠すには、実績のあるIFNA関数を使用します。
=ifna(vlookup(a3, $d$3:$e$10, 2, false), "")
空白の代わりに、欠落したデータ点に対して任意のテキストを返すことができます - 最後の引数にそれを入力するだけです。 例えば
=IFNA(VLOOKUP(A3, $D$3:$E$10, 2, FALSE), "利用不可")
VLOOKUPの他にも、いくつかのルックアップ関数でタスクをこなすことができる。
個人的には、もっと柔軟なINDEX MATCH式に頼りたいですね。
=ifna(index($e$3:$e$10, match(a3, $d$3:$d$10, 0)), "")
また、VLOOKUPの現代的な後継であるXLOOKUP関数は、Excel 365とExcel 2021で利用することができます。
=xlookup(a3, $d$3:$d$10, $e$3:$e$10, "")
Aグループの有資格者の名前とその結果を得るには、B列の空白セルをフィルタリングするだけです。
=filter(a3:b15, b3:b15"")
比較ツール
Excelでファイルやデータの比較を頻繁に行う場合、Ultimate Suiteに含まれるこれらのスマートなツールは、あなたの時間を大幅に節約します。
テーブルの比較 - カラム、リスト、テーブルなど、任意の2つのデータセットにおける重複(一致)および一意の値(相違)をすばやく見つけることができます。
2つのシートを比較する - 2つのワークシートの違いを見つけてハイライトします。
複数シートの比較 - 複数シートの差分を一度に検索し、ハイライト表示します。
練習用ワークブック(ダウンロード
ExcelでVLOOKUPを使用して列を比較する - 例 (.xlsx ファイル)