要点 — どちらも目に見えない文字を削除しますが、狙う獲物が違います。
TRIM(文字列)は先頭・末尾・そして余分なスペースを削除します (連続分は 1 個にまとめます)が、対象は通常のスペース、ASCII 32 だけです。CLEAN(文字列)は印刷されない制御文字、コード 0〜31(改行や、壊れた エクスポート由来のタブなど)を削除します。誰もがはまる落とし穴はこれです。 Web ページや PDF から貼り付けたテキストには、たいてい改行なしスペースCHAR(160)が紛れ込んでいて、TRIM も CLEAN もどちらもこれに手を出しません。 すべてを一括で片づける修正は、たった 1 本の数式です。
=TRIM(" Apple Inc. ") ' -> "Apple Inc." (両端 + 内側の連続を処理)
=CLEAN("Line1"&CHAR(10)&"Line2") ' -> "Line1Line2" (改行を除去)
=TRIM(CLEAN(SUBSTITUTE(A2,CHAR(160)," "))) ' 万能クリーナー
末尾のスペースや紛れ込んだ制御文字は、まさに「目に見えない」がゆえに、
スプレッドシートで最も厄介なバグになります。照合が空振りし、SUM の合計が
合わず、「Apple」と「Apple 」がピボットの別々の行に分かれる。それなのにセルは
見た目が同じなのです。TRIM と CLEAN は、そこにあるものを見えているものに
一致させるための手段です。
この記事で学べること
- 役割分担:
TRIMはスペース、CLEANは制御文字を対象にする TRIMが単語間のスペースを 1 個残す理由(除去ではなく圧縮だから)- 両方をすり抜ける
CHAR(160)改行なしスペースと、その 1 行修正 - 目に見えない空白が
=・VLOOKUP・重複排除を静かに壊す仕組み - 判断のポイント: あらゆる数式ではなく、取り込みの境界で一度だけクリーニングする
考え方: 掃除担当が 2 人いる
TRIM と CLEAN は、担当範囲がはっきり分かれた 2 人の掃除係だと考えてください。
TRIM は空白担当です。文字列をたどって先頭と末尾のスペースをすべて削除し、
内側の連続したスペースは 1 個にまとめます。この「内側の連続をまとめる」動作こそ、
みんなが忘れがちな点です。TRIM は「すべてのスペースを削除」ではなく、
「単語間のスペースを 1 個に正規化する」処理なのです。
CLEAN は制御文字担当です。メールやデータベースのエクスポート、改行コードが
おかしいテキストファイルからコピー&ペーストしたときに紛れ込む、コード 0〜31 の
低位・印刷されない文字を削除します。典型例は CHAR(10)、つまりセルの中に入り込んだ
改行で、データが 1 行に見えて実際は 2 行のように振る舞う原因になります。
この 2 つは守備範囲が重ならず、競合もしません。ゴミがスペースなら TRIM、
奇妙な不可視文字や改行なら CLEAN です。実際に取り込んだデータは両方を抱えている
ことが多く、だからこそ =TRIM(CLEAN(A2)) のように入れ子で使う場面をよく見かけます。
すべてを解決する鉄則: 見えないスペースの正体はたいてい CHAR(160)
TRIM に関する最も多いサポート質問は、これです。そしてその答えこそ、この記事を
読む一番の理由です。「TRIM を実行したのに、スペースがまだ残っている」
そのうち 9 割は、その「スペース」が ASCII 32 ではありません。正体は改行なし
スペース、CHAR(160)(HTML の )で、Web ページ・PDF・整形されたレポート
から貼り付けたときに必ずと言っていいほど紛れ込みます。TRIM は ASCII 32 しか
知らないので、160 の横をそのまま素通りします。CLEAN も 0〜31 しか削除しないので、
160 はそちらもすり抜けます。文字は目に見えず、掃除係 2 人とも無視するので、
一致してくれないセルとにらめっこするはめになるわけです。
' 確かめてみましょう。これは 32 ではなく 160 を返します:
=CODE(RIGHT(A2, 1)) ' -> 160 (「なるほど、改行なしスペースか」)
' まず 160 を通常のスペースに変換し、そのうえで TRIM:
=TRIM(SUBSTITUTE(A2, CHAR(160), " "))
' 本当に汚い取り込みデータ向けの、念には念を入れたクリーナー:
=TRIM(CLEAN(SUBSTITUTE(A2, CHAR(160), " ")))
SUBSTITUTE(A2, CHAR(160), " ") はすべての改行なしスペースを本物のスペースに
置き換え、そのあとで TRIM が仕事をできるようにします。このパターンは丸暗記して
ください。「TRIM は壊れている」という悩みを、あなたのキャリアの残りずっと解決済みの
問題に変えてくれます。
なぜ重要か: 見えないゴミは見た目だけでなく照合も壊す
余分なスペースは見た目だけの問題ではありません。等価性を壊します。そして 照合・重複排除・グループ化は、すべてこの等価性の上に成り立っています。
A2が"Apple "のとき、="Apple"=A2は FALSE を返します。末尾のスペース のせいで別の文字列になるからです。VLOOKUPやXLOOKUPは、「そこにあるはず」の値に対して#N/Aを 返します。片方の表のキーに、もう片方にはない余計なスペースが付いているからです。- ピボットテーブルや
UNIQUEは"North"と"North "を 2 行に分け、地域別 合計が静かに二重計上されます。
これらはどれもグリッド上では目に見えず、だからこそ厄介でコストがかかります。
結合キーに TRIM をかける、あるいはもっと良いのは取り込み時に列全体に TRIM を
かけることで、これは Excel で最も安上がりな保険です。
CLEAN の死角(そして TRIM の死角)
CLEAN は ASCII 制御文字の範囲、0〜31 のために設計されました。埋め込まれた
CHAR(10) 改行を取り除くには本当に役立ちますが、その限界には正直になりましょう。
CHAR(160) は削除しませんし、最近の Web コピーが持ち込むゼロ幅スペース
(CHAR(8203))のような高位の厄介者にも手を出しません。それらには
SUBSTITUTE(A2, CHAR(8203), "") に立ち返るしかありません。
いま相手にしている文字を突き止める確実な方法は、CODE(先頭文字)または
UNICODE(255 より大きい文字向け)です。疑わしい文字を包んでその番号を読み取り、
その番号で SUBSTITUTE して取り除きます。当て推量は午後をまるまる無駄にしますが、
CODE/UNICODE なら数式 1 本で教えてくれます。
判断のポイント: あちこちではなく、境界でクリーニングする
ついやりがちなアンチパターンは、テキスト列に触れるすべての数式(すべての
VLOOKUP、すべての比較、すべての連結)の中に TRIM を振りかけることです。動くには
動きますが、これは危険な兆候です。データが汚れていて、再計算のたびに、しかも永遠に、
再クリーニングのコストを払い続けているということだからです。
プロの手さばきは、取り込みの境界で一度だけクリーニングすることです。生の列を
取り込んだら、=TRIM(CLEAN(SUBSTITUTE(A2,CHAR(160)," "))) の作業列を 1 つ追加し、
それを値として貼り戻して、生データを削除します。それ以降データはきれいなままで、
下流のすべての数式はシンプルに保てます。データを定期的に取り込むなら、Power Query の
トリミング・クリーン変換が同じことを繰り返し可能なステップとして実現します。
それが繰り返しのクリーニングにふさわしい置き場所です。単発なら数式に、パイプラインなら
Power Query に手を伸ばしましょう。
ExcelMaster の活用
「この VLOOKUP がなぜ一致しないのか。値は同じに見えるのに」は、最もよく寄せられる
質問の 1 つで、その答えはほぼ必ず目に見えない空白です。ExcelMaster はまさに
それをチェックします。末尾のスペースや CHAR(160) を見つけ出し、どの文字が犯人かを
教え、列全体を直す TRIM/CLEAN/SUBSTITUTE の組み合わせを書き上げます。1 本の
数式にばんそうこうを巻くような対症療法ではありません。症状(「照合がずっと失敗する」)
を伝えれば、あなたに見えないゴミを見つけ出してくれます。
よくある質問
Excel の TRIM と CLEAN の違いは何ですか?
TRIM は余分なスペース(先頭・末尾・繰り返しの内側スペース)を削除しますが
(連続分は 1 個にまとめます)、対象は通常のスペース文字(ASCII 32)だけです。
CLEAN は印刷されない制御文字(コード 0〜31)、たとえばセルに埋め込まれた改行
などを削除します。スペースには TRIM、紛れ込んだ不可視文字には CLEAN を使い、両方を
片づけたいときは TRIM(CLEAN(A2)) と入れ子にします。
なぜ TRIM でセルのスペースが消えないのですか?
おそらく通常のスペースではないからです。Web や PDF から貼り付けたテキストには、
TRIM が無視する改行なしスペース、CHAR(160) がよく含まれます。
=CODE(RIGHT(A2,1)) で確認し、160 が返ってきたら
=TRIM(SUBSTITUTE(A2, CHAR(160), " ")) で修正します。
TRIM は単語間のスペースをすべて削除しますか?
いいえ。TRIM は単語間のスペースを 1 個残し、余分なぶんだけ削除します。加えて
先頭と末尾のものはすべて削除します。TRIM("a b") は "ab" ではなく "a b" を
返します。すべてのスペースを削除したい場合は、代わりに SUBSTITUTE(A2, " ", "") を
使います。
セルから改行を削除するには?
CLEAN を使います。これは CHAR(10) 改行文字を取り除きます。=CLEAN(A2)。改行が
別の文字として挿入されていた場合や、スペースに置き換えたい場合は
=SUBSTITUTE(A2, CHAR(10), " ") を使います。
余分なスペースと印刷されない文字を一度に削除するには?
3 つのツールをすべて入れ子にします。=TRIM(CLEAN(SUBSTITUTE(A2, CHAR(160), " ")))。
SUBSTITUTE が改行なしスペースを通常のスペースに変換し、CLEAN が制御文字を取り除き、
TRIM が残ったスペースをまとめます。
Tested in
検証環境: Excel 365 (Windows 11) — 最終確認 2026-07-06。
関連ガイド: Excel SUBSTITUTE と REPLACE · Excel LEN · Excel UPPER・LOWER・PROPER · Excel VALUE と NUMBERVALUE
