Excelで2つの列で重複しない(する)値を探す

この記事を動画化しました。
文章を読むよりわかりやすいと思いますので、ぜひ動画をご覧ください。
なお、元の記事ではVLOOKUP関数を使っていますが、動画ではCOUNTIF関数に変えました。



YouTubeチャンネル登録
YouTubeのチャンネル登録をよろしくお願いします

昨日、家内から以下のような質問を受けました。

Excelで、2つの列に入力した多数の英単語の中で、両方の列に重複していない英単語を探したい。

例えば、以下の画面のように表示できると良いでしょう。
「apple」「banana」「grape」「peach」はA列とC列の両方にあり、重複していますので、A列/C列の該当する単語の箇所に「×」のマークを表示しています。
一方、「orange」「strawberry」「pear」はA列にしかなく、「maron」はC列にしかないので、該当する単語の箇所に「○」のマークを表示しています。

重複している英単語を探す

このように、Excelで2つの列で重複しない(する)値を探す処理は、Excelでよくありそうな話なので、記事にしてみます。

1.VLOOKUP関数

ある値を元に、他のセル範囲を検索して情報を引く際には、「VLOOKUP」という関数を使います。

VLOOKUP(検索元の値,検索するセル範囲,値を取り出す列の番号,FALSE)

検索するセル範囲に、検索元の値があれば、その値が見つかった行の中で、「値を取り出す列の番号」の値が、関数の結果になります(列の番号は、検索するセル範囲の左端の列を1とします)。
一方、検索元の値がない場合は、関数の結果は「#N/A」になります。

今取り上げている例では、片方の列の個々の英単語を元に、もう片方の列の英単語を引いてくる、という手法をとります。
冒頭の画面で、A1セルの英単語(apple)が、C列の英単語の範囲(C1~C5)にあるかどうかは、以下のようにして調べることができます。

=VLOOKUP(A1,$C$1:$C$5,1,FALSE)

B1セルに上の式を入力した後、その式をコピーしてB2~B7セルに貼り付けると、A列のそれぞれの単語がC1~C5セルにあるかどうかが調べられます。
そして、C列にその単語があれば、その単語がそのまま表示されます。
一方、C列にその単語がなければ、「#N/A」と表示されます。

VLOOKUP関数の例

同様に、D1セルに以下の式を入力した後、D2~D5セルに貼り付けると、C列の個々の単語がA列にあればその単語がそのまま表示され、なければ「#N/A」と表示されます。

2.ISNA関数

VLOOKUP関数の結果でも、重複しているかどうかが分かります。
ただ、あまり見やすくはありません。
そこで、重複しているかどうかを「○」と「×」で表示するようにしてみます。

前述の結果を見ると、2つの列で重複している単語は、B/D列にそのまま表示されています。
一方、重複していない単語では、B/D列に「#N/A」が表示されています。
そこで、B/D列のそれぞれのセルの値が「#N/A」かどうかを調べ、「#N/A」なら重複していないので「○」と表示し、「#N/A」でなければ「×」を表示するようにします。

セルの値が「#N/A」かどうかを調べるには、「ISNA」という関数を使います。
また、状況によって表示する値を変えるには、「IF」という関数を使います。

今取り上げている例だと、B/D列のそれぞれのセルに、以下のように式を入力します。
ISNA関数を使って、個々のセルのVLOOKUP関数の式の結果が「#N/A」かどうかを調べ、それによって「○」か「×」を表示するようにします。

=IF(ISNA(VLOOKUP関数の式),"○","×")

B列の各セルに「○」か「×」を表示するには、B1セルに以下の式を入力し、B1セルをコピーして、B2~B7セルに貼り付けます。

=IF(ISNA(VLOOKUP(A1,$C$1:$C$5,1,FALSE)),"○","×")

また、D列の各セルに「○」か「×」を表示するには、D1セルに以下の式を入力し、D1セルをコピーして、D2~D5セルに貼り付けます。

=IF(ISNA(VLOOKUP(C1,$A$1:$A$7,1,FALSE)),"○","×")