エクセルで「同じなのに一致しない」。見えない空白の正体と消し方

A君の成長

おはよう、後輩A君。

エクセルで、こんな経験はないかな。

・VLOOKUPで探したのに #N/A になる
・フィルタを開いたら、同じ名前が2つ並んでいる
・「=」で比べたら FALSE が返ってくる

どう見ても同じ文字なんだよね。何度も見比べても、同じなんだ。

でも、エクセルは「違う」と言い張る。こっちが間違っているのかと思えてくるよね。

――たいていの場合、犯人は見えない空白なんだ。今日はその正体と、消し方を書くね。

1. 「同じに見える」は、同じではないんだ

まず、こういうことなんだよ。

A1に 山田
B1に 「山田 」(うしろに半角スペースがひとつ)

=A1=B1 → FALSE

人間の目には、両方とも「山田」に見えるよね。空白は色も形も持っていないから、画面上では何も起きていないように見えるんだ。

でもエクセルにとっては、2文字と3文字なんだよね。だから別物として扱うんだ。

VLOOKUPが見つけられないのも、フィルタに2つ並ぶのも、全部これが理由なんだよ。

2. 空白は、こうやって混ざるんだ

「そんなもの入力した覚えがない」と思うよね。そのとおりなんだ。たいていは自分で打ったものじゃないんだよ。

よくある入り口はこの4つだよ。

他のシステムから出力したCSVを開いた
Webページからコピーして貼り付けた
③ 見た目を整えるためにわざと入れた全角スペース(「山田 太郎」の姓名の間など)
④ セルの中で Alt+Enter して改行した

③は特に多いんだよね。名簿を作るときに姓と名の間に全角スペースを入れる――これ自体は悪いことじゃないんだ。でも、その名簿と別の表を突き合わせるときに問題になるんだよ。

片方が「山田 太郎」で、もう片方が「山田太郎」だと、永遠に一致しないんだよね。

3. まず、数えて確かめようか

疑うより先に、数えるんだ。使うのはLEN関数だよ。「長さ(length)」の略で、文字数を返してくれるんだ。

空いているセルにこう書いてみようか。

=LEN(A1)

「山田」なら2と出るはずだよね。ここで3と出たら、見えない1文字がいるんだ。

2つのセルを比べるなら、こう並べると分かりやすいよ。

=LEN(A1) → 2
=LEN(B1) → 3 ← こっちに何かいる

⚠️ ここが大事なところだよ。目で見て探すのはやめよう。見えないものは、見て探せないんだ。数えれば1秒で分かるんだよね。

これは別の記事でも書いたことなんだけれど、「たぶん大丈夫」より「数えて確かめる」方が、結局は早いんだよ。

4. TRIMで消せるんだよ

空白を消す関数がTRIMだよ。「切りそろえる」という意味の英語だね。

=TRIM(A1)

これだけなんだ。前とうしろの空白が消えるんだよ。

今日はこれ、手元のエクセルで実際に試してみたんだ。結果はこうだったよ。

「山田 」(うしろに半角スペース) 3文字 → TRIM後 2文字 ✅ 消えた
「山田 」(全角スペース) 3文字 → TRIM後 2文字 ✅ 消えた

全角スペースも消えるんだよ。ここ、意外だったんじゃないかな。私も念のため確かめてから書いているよ。

そしてTRIMには、もうひとつ親切なところがあるんだ。

「  山田  太郎  」(前後と間に全角スペースが2つずつ)
↓ TRIM
「山田 太郎」(5文字

気づいたかな。前とうしろは全部消えたのに、間の空白はひとつだけ残っているんだ。

これは仕様なんだよ。単語と単語の区切りは残してくれるんだよね。「山田太郎」とくっついてしまったら困るからね。よくできているんだ。

5. 改行はTRIMでは消えないんだ

ただし、TRIMで消えないものもあるんだよ。セル内の改行がそうなんだ。

これも試してみたよ。

「山田(改行)太郎」 5文字
↓ TRIM → 5文字のまま ❌ 消えない
↓ CLEAN → 4文字 ✅ 消えた

改行を消すのはCLEAN関数なんだ。「掃除する」だね。

=CLEAN(A1)

セルの中で Alt+Enter(Macは option+Enter、機種により control+option+Enter)して2行にしたことがあるなら、それが残っているかもしれないよ。画面では改行に見えるけれど、これも1文字なんだよね。

⚠️ 迷ったら、両方まとめてかけるのが確実だよ。

=TRIM(CLEAN(A1))

内側から順に働くんだ。まずCLEANで改行を消して、そのあとTRIMで空白を消す、という順番だね。

6. それでも消えない空白があるんだ

ここからが、今日いちばん伝えたいところだよ。

TRIMでもCLEANでも消えない空白が存在するんだ。これも実際に試して確かめたよ。

Webからコピーした文字のうしろに付いていた空白
↓ TRIM → 消えない ❌
↓ CLEAN → 消えない ❌

正体は「改行しない空白」と呼ばれる特殊な文字なんだ。Webページの中でよく使われているものだよ。見た目は完全に普通の空白なのに、エクセルにとっては別の文字なんだよね。

これに当たると、本当に途方に暮れるんだ。正しい方法で消しているのに消えないんだからね。

正体を確かめる関数があるよ。UNICODE関数だ。文字に振られた背番号を教えてくれるんだよ。

=UNICODE(MID(A1,3,1))  ← A1の3文字目を調べる

出てくる数字で、犯人が分かるんだ。

32   → 半角スペース  (TRIMで消える)
12288 → 全角スペース  (TRIMで消える)
10   → 改行      (CLEANで消える)
160  → 改行しない空白(TRIMでもCLEANでも消えない)

160が出たら、それが犯人だよ。

7. 160を消す方法だよ

方法は2つあるんだ。

方法① 関数で消す

=SUBSTITUTE(A1,UNICHAR(160),””)

SUBSTITUTE は「置き換える」だね。160番の文字を、何もない状態に置き換えるという意味だよ。これで消えることを確かめたよ。

前の話とまとめて、こう書くのが完成形だね。

=TRIM(CLEAN(SUBSTITUTE(A1,UNICHAR(160),””)))

長く見えるけれど、やっていることは「160を消す → 改行を消す → 空白を消す」だけなんだ。

方法② 置換でまとめて消す

関数を書くのが面倒なら、Ctrl+H(Macは control+H)の置換でもいいんだ。

① 問題の空白をドラッグして選択し、コピーする
② Ctrl+H を押す
③ 「検索する文字列」にそのまま貼り付ける
④ 「置換後の文字列」は空のまま
⑤ すべて置換

これなら正体が何番か分からなくても消せるんだよね。本物をコピーして渡しているんだから、当たり前だけれど確実なんだ。

⚠️ ただし置換は元に戻せないから、並べ替えの話と同じで、先に別名で保存しておこうか。

8. 直したあとの、最後のひと手間

関数で消した場合、忘れがちなことがあるんだ。

TRIMの結果は、まだ関数なんだよ。元のセルを消したり並べ替えたりすると、崩れてしまうんだよね。

だから最後に値に固定するんだ。

① TRIMを書いた列をコピー
② 同じ場所で右クリック
③ 「値の貼り付け」を選ぶ

これで、関数ではなくただの文字になるんだ。ここまでやって完了だよ。

⚠️ 数式のコピーの話でも触れたけれど、数式は「今どこを見ているか」で結果が変わるんだよね。人に渡すファイルなら、値にしてから渡すのが親切なんだ。

9. このシリーズは、今日で8本目だよ

エクセルの困りごとを並べておくね。

① 指数表示になる
② 先頭の0が消える
③ 「1-2」が日付になる
④ 並べ替えたら行がバラバラ
⑤ 数字なのに計算されない
⑥ エラー表示の意味
⑦ コピーしたらズレる
⑧ 見えない空白 ← 今日

今日の⑧は、シリーズの中でもいちばん厄介な種類だと思うんだ。

⑤の「合計が0になる」や⑥の「#N/A」は、エクセルが困っていることを表示してくれたよね。おかしいと気づけるんだ。

でも見えない空白は、何も言ってくれないんだよ。ただ静かに「一致しません」と返してくるだけなんだ。

――だから数えるしかないんだよね。LENで数える。UNICODEで背番号を見る。見えないものは、見ないで確かめるんだ。

結論:見えないものは、数えて確かめようか

今日の話をまとめるとこうだよ。

① 同じに見えるのに一致しないのは、見えない空白が原因
② 目で探さない。LENで文字数を数える
③ 空白は TRIM全角スペースも消える(実際に確認したよ)
④ 前後は全部消えて、単語の間はひとつ残る
⑤ 改行は CLEAN。迷ったら =TRIM(CLEAN(A1))
⑥ それでも消えないなら UNICODE で正体を見る。160なら特殊な空白
⑦ 160は SUBSTITUTE置換(本物をコピーして貼る)で消す
⑧ 最後に値の貼り付けで固定する

この話は、私自身が何度もやられてきたことなんだ。VLOOKUPが動かなくて、数式を疑って、書き直して、それでも動かなくて――原因はうしろの空白ひとつだった、なんてことがあるんだよね。

数式は合っていたんだよ。合っていたからこそ、直しようがなかったんだ。

後輩A君も、突き合わせがうまくいかないときは――まずLENで両方の文字数を数えてみようか。違っていたら、犯人はそこにいるよ。

よくある質問

Q1. TRIMは全角スペースも消えるんですか?

今日、手元のエクセルで確かめたところ消えました。「山田 」(全角スペース付き・3文字)にTRIMをかけて、2文字になることを確認しているよ。ただ環境によって挙動が違う可能性はあるから、大事な作業のときはLENで数えて、本当に消えたか確かめるのが確実だね。この記事で言いたいのは結局そこなんだ。

Q2. 全部の列に一度にかけたいです

空いている列にTRIMを書いて、右下の角をダブルクリックすると下まで一気に埋まるよ。列が複数あるなら、右にも引っ張ればいいんだ。最後に値の貼り付けをして、元の列と入れ替えれば完了だね。

Q3. 見えない空白を、そもそも入れない方法はありますか?

自分が作る表なら姓と名を別の列に分けるのが確実だよ。「山田」と「太郎」を別々に持っておいて、表示のときだけつなぐんだ。空白を入れなければ、空白で悩むこともないからね。ただ他所からもらうデータは選べないから、そのときは受け取った直後にTRIMをかける習慣にしておくといいと思うよ。

Q4. TRIMをかけたのに、まだ一致しません

残っている可能性は3つだよ。①改行が混ざっている(CLEANを足す)②160番の特殊な空白(UNICODEで確認)③全角と半角の違いだね。③は空白じゃないんだ。「ABC」と「ABC」は別物なんだよね。これはASC関数(全角を半角に)でそろえられるよ。どれにしても、まずUNICODEで1文字ずつ背番号を見ると原因にたどり着けるんだ。

【本日のミッション:LENで数えてみようか】

  • ☐ 突き合わせがうまくいかない表があったら、両方のセルに =LEN() をかけてみようか
  • ☐ 数が違っていたら =TRIM(CLEAN(A1)) をかけてみようか
  • ☐ (後輩A君へ)それでも消えなかったら =UNICODE() で背番号を見てみようか。見えないものにも、名前は付いているんだよ

📚 AI活用シリーズ(おすすめ)

▼ シリーズの全記事一覧を見る

コメント

タイトルとURLをコピーしました