おはよう、後輩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活用シリーズ(おすすめ)

コメント