Excelに2つの行があり、その行が全く同じであるか調べたい場合はよくあるかと思います。プログラムでEXCELを作成する処理などで、改修前後の影響を比較したりする場合などです。
具体的な例えを出すと、以下のような2つの表があり、「2つ表の行に相違があるかを調べたい」といった場合です。

この時、どんな方法で比較するのがわかりやすいでしょうか?
私が、よく実施する3つの方法を紹介したいと思います。
各セルの値をIF文などの関数式で比較する
愚直に対応する方法になりますが、各セルの値を比較する式を別のセルに埋め込めばいいかと思います。

=if(B3=H3,"一致","不一致")
上記をオートフィルしてセルの範囲を広げると…

このような形になり、それぞれのセルの値が同一であるかが一目で分かるようになります。
この方法は圧倒的に簡単な方法なので、「体裁にこだわる必要はない。とりあえず調べたい。」という時にはよく使う方法です。
単純にTRUE、FLASEを返すだけでもいいかもしれません。
=B3=H3
しかし、表が大きくなってくると比較するためのセルの数も増えてしまいます。
個人の作業で比較をするのであればよいかもしれませんが、他人への報告に使う資料であると見た目がよろしくないかと思います。
その場合は、後述する行単位で一括で比較する方法が望ましいと思います。
配列関数を使用して行単位を比較する
見た目を重視するのであれば、配列関数を使用して行自体を比較するのが良いかと思います。
具体的にはセルに以下の式を設定します。

=AND(EXACT(B3:F3,H3:L3))
EXACTの引数には、比較対象の行を範囲指定します。上記の例であれば、B3:F3の範囲とH3:L3の範囲を比較しています。
そして、「CTRL+SHIFT+ENTER」を押して式を決定すると、以下のような配列関数に変換されます。
{=AND(EXACT(B3:F3,H3:L3))}
行に存在するセルの値をそれぞれ比較して、1つでも相違があればFALSE、すべて一致すればTRUEが返却されます。
↓一致しないセルがあるとFALSEが返却される

この配列関数を使用することで、行の比較結果がかなり見やすくなるかと思います。
冒頭でも記載いたしましたが、私は提出資料にはこの形で比較結果を乗せることが多いですね。
この方法の欠点としては、どのセルが異なっているのかということがわからないということです。
ですので「全部一致しています」ということを表すときには有効ですが、不一致のセルが多い時には使いにくい方法になります。
条件付き書式を使用して比較する
もう一つの比較結果を作成する方法として、条件付き書式を使用して比較するというものがあります。
手順について説明を記載いたします。
1.比較対象のセルを選択した状態で「ホーム→条件付き書式」を選択します。

2.「新しいルール」を選択します。

3.「数式を使用して、書式設定するセルを決定」を選択して、以下のように値を設定します。

↑比較したいセルをイコールでつなぎNOT関数の引数とする。書式から塗りつぶしで赤色などを選択する。
上記を実施することにより、値が異なっているセルが赤字で表示されます。

そもそも行数が異なる場合の比較について
上記3つの方法については、比較する表の行数は一致している前提です。行数が異なる場合には比較することが難しいです。
もしくは行数は同じなのですが、比較する2つの表で行の並びが一致していない場合です。これを前述した3つの方法で比較することはできません。
↓以下のように、行がずれている個所から下が全て不一致になってしまう

その場合は、まずはキーになる列を決める必要があるかと思います。このセルの値が同じであれば、同じ行とみなすという列のことです。
上記の画像の表でいうと、商品の列が同じであれば同一の行とみなすことにします。その場合の比較式は以下になります。
{=AND(EXACT(C4:F4,INDIRECT("I"&MATCH(C4,$I$1:$I$6,0)&":L"&MATCH(C4,$I$1:$I$6,0))))}

MATCH関数を使用することで、その商品の列がどの位置にあるのかを返却します。(行番号を返却する)
上に例で出した式で言うと、C4の”みかん”でI列を検索し、行数を返却します。”みかん”は上から5行目なので、5が返却されます。
↓MATCH関数からの戻り値を計算すると以下のようになる。
{=AND(EXACT(C4:F4,INDIRECT("I" & 5 & ":L" & 5 )))}
そしてそれをINDIRECT関数を使用することでアドレスに変換します。
↓INDIRECT関数を計算すると以下のようになる。
{=AND(EXACT(C4:F4,I5:L5)))}
比較先の表に存在しない行は、エラーとなってしまうので、それを避けたい場合にはIFERROR関数などを使用して、エラー時の表示値を設定すればよいかと思います。
まとめ
Excelを行単位で比較する作業においては以下の方法をとるのが良いかと思います
- 個人作業の調査であり、他人に見せる必要がない場合→各セルの値をIF文などの関数式で比較する
- 見た目を重視し、セル単位で不一致箇所を表示することが不要な場合→配列関数を使用して行単位を比較する
- 見た目を重視し、セル単位で不一致箇所を表示することが必要な場合→条件付き書式を使用して比較する
また、行数が一致しない場合や行の並びがバラバラな表を比較する際には工夫が必要です。
「そもそも行数が異なる場合の比較について」に書いた通り、MATCH関数を使用して行数を取得する処理が必要になるかと思います。
コメントを残す