エクセルを使っていると、異なるセルに入力されている文字が同じものか、数字が同じものかを知りたい場合があります。
いざ、IF関数などで判定させてみると、どう見ても同じ文字、同じ数字のはずなのに『一致していない』となってしまうことがあるんですよね。
実は見た目は同じように見えても、一致しない原因が片方の文字列や数値に隠されているんです。
この記事では『どうして一致しないのか』という点を中心に、以下の内容でまとめてみました。
- 文字列の比較で『一致しない』になる原因と、その解決策。
- 数値(数字)の比較で『一致しない』になる原因と、その解決策。
一致しない原因はすぐにわからない場合が多いので、ぜひここで紹介する原因と解決策を参考にしてもらえればと思います。
文字列比較で一致しない原因と解決策
文字が一致しない原因としては、2つの事が考えられます。
片方の文字に空白文字(スペース)が含まれている
文字が一致しない原因としてまず考えられるのが、『片方の文字に余計な空白が含まれている』というもの。
例えば、以下の画像ではB5、C5とも同じ文字(あいうえお)に見えますが、『一致しない』という判定結果になっていますね。
実は、下の画像のように文字を選択してみると、文字の後ろに空白(スペース)文字が付いていることがわかります。
空白文字は見えないけどれっきとした文字なので、この余分な空白のぶんだけ一致しないと判定されるわけです。
文字と文字の間に空白文字がある場合はすぐに違いはわかりますが、この例のように後ろに空白文字がある場合は、見ただけでは空白文字が入っていることはなかなか気づきません。
文字列に空白文字が含まれている場合の解決策
空白文字がある時の解決策は、空白文字を取り除くTRIM関数を使うのが一番。
試しに、D6のセルにTRIM関数を使った判定式を書いたところ、『一致する』という結果になりました。
使い方は、空白を取り除く(トリムする)文字の位置を指定するだけ。
=IF(TRIM(B6)=TRIM(C6), "一致する", "一致しない")
TRIM(B6)は、B6の『あいうえお』の前後にある空白を取り除いた結果を返しますが、ここは元々空白はないので『あいうえお』がそのまま返ってきます。
たいして、TRIM(C6)は、C6の『あいうえお 』から後ろの空白を取り除いた『あいうえお』を返します。
その結果、どちらも同じ『あいうえお』となるので、判定結果はめでたく『一致する』となりました。
文字列に制御コード(ゴミ)が含まれている
文字が『一致しない』もう一つの原因が、制御コードと呼ばれるこれも目に見えない文字(コード)が含まれている場合。
下の画像は、C列のAとBの間には制御コードが含まれているので、一致しないとなっています。
B列とC列は同じように見えても、目に見えない制御コードがあるので一致しないわけです。
制御コードというのは、改行やタブなどのように『文字とは異なるコード』のことで、コードで書くと、00~31(16進だと0x00~0x1F)が制御コードと呼ばれているものです。
上の画像では『文字の詳細』の列に書いているように、制御コードの9, 10, 13, 28, 29, 30, 31がAとBの間に含まれていますが、見ての通り何もないように見えます。
だから、なぜ一致しないのかなかなかわからないんですけどね^^
ではなぜ、制御コードなんていうコードが文字列に含まれるのか?
よくありがちなパターンとして、エクセルとは関係のない他のアプリからセルにコピーしてきたり、データをエクセル全体にガバッとインポートした時に、文字列の中に制御コードが混入される場合が多いです。
文字列に制御コードが含まれている場合の解決策
制御コードの問題を解決するには、制御コードを取り除くCLEAN関数を使うことです。
CLEAN関数は制御コードをきれいに取り除いてくれます。
=IF(B5=CLEAN(C5), "一致する", "一致しない")
制御コードが含まれているC列の文字に対してCLEAN(C5)などと書けば、制御コードが取り除かれた文字列が返ってきます。
あとは、そのまま判定すればいいだけです。
もし、どちらの文字に制御コードが含まれているかわからない場合は、両方の文字にCLEAN関数を指定すれば間違いなく一致します。
CLEAN関数はセル内改行を一括で削除したい場合などにも活躍します。次の記事が参考になると思います。
数値比較で一致しない原因と解決策
次に数値が一致しない場合。
数値が一致しない原因にも、いくつか考えられるものがあります。
片方の数値が実は文字列になっている
数値が一致しない時に、一番考えられるのが『片方が文字列になってしまっている』ということです。
『セルに数字を入力したつもりが、いつの間にか文字列になっていた』というパターンですね。
この例のC列の数値は、実は文字列です。
左上の角に緑の三角マークが表示されていますよね。
この三角マークをクリックするとびっくりマークが表示されるので、その右にある小さい三角マークをさらにクリックすると、以下のように表示されます。
一番上の『数値が文字列として保存されています』と表示されているように、数値だったものが何故か文字列になっていることを示しています。
つまり、緑の三角マークは警告のマークで、『本当に文字列のままでいいですか?』と聞いているわけです。
数値を入力したのにいつの間にか文字列になってしまうことはよくあるので、数値が一致しないという判定になった場合は、左上に緑の三角マークが表示されていない確認してください。
データの揃えで数値か文字列か一目瞭然!
エクセルの仕様の話です。
セルに入力されているデータが右に揃っている場合は、そのデータは数値として扱われます。
逆に左に揃っている場合は『文字列』になります。
エクセルの右揃えと左揃えの仕様を理解していない人は、意外と多いです。
この仕様を知っているか知らないかで、問題解決までの時間に差が出るので、必ずこの仕様を理解しましょう!
例えば、合計などの計算は対象のデータが数値であることが前提ですが、数値のつもりが文字列になっていると当然計算してくれません。
その時にエクセルの揃えの仕様を知らないと、原因がわかるまでに時間がかかったりします。
なので、セルの中の揃えの仕様を理解することは本当に大事ですよ。
数値比較で一致しない場合の解決策
解決策は、文字列になっているのを数値に戻してあげるだけです。
これで、一致するという判定になりました。
文字が一致しない場合の原因究明のヒントはLEN関数
文字の見た目が全く一緒なのに一致しないという判定の場合は、まずはLEN関数を使ってみましょう。
LEN関数は文字の長さを調べてくれます。
LEN(A1)などのように、セルの位置を指定するとそのセルに入力されている文字の長さを返してくれます。
このLEN関数を使うことで、余計な空白文字や制御コードが含まれていることがわかるので、問題解決として重宝できる関数です。
文字が一致しない場合は、まずLEN関数で文字の長さを確認してください。