🚀The world's best VBA AI has evolved. ExcelMaster is now an autonomous Agent.Read more →
Back to Blog

Excel の TRIM と CLEAN — 照合を狂わせる「見えないゴミ」を取り除く

|

Excel の TRIM と CLEAN — 照合を狂わせる「見えないゴミ」を取り除く

要点 — どちらも目に見えない文字を削除しますが、狙う獲物が違います。 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 人いる

TRIMCLEAN は、担当範囲がはっきり分かれた 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"=A2FALSE を返します。末尾のスペース のせいで別の文字列になるからです。
  • VLOOKUPXLOOKUP は、「そこにあるはず」の値に対して #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 して取り除きます。当て推量は午後をまるまる無駄にしますが、 CODEUNICODE なら数式 1 本で教えてくれます。

判断のポイント: あちこちではなく、境界でクリーニングする

ついやりがちなアンチパターンは、テキスト列に触れるすべての数式(すべての VLOOKUP、すべての比較、すべての連結)の中に TRIM を振りかけることです。動くには 動きますが、これは危険な兆候です。データが汚れていて、再計算のたびに、しかも永遠に、 再クリーニングのコストを払い続けているということだからです。

プロの手さばきは、取り込みの境界で一度だけクリーニングすることです。生の列を 取り込んだら、=TRIM(CLEAN(SUBSTITUTE(A2,CHAR(160)," "))) の作業列を 1 つ追加し、 それを値として貼り戻して、生データを削除します。それ以降データはきれいなままで、 下流のすべての数式はシンプルに保てます。データを定期的に取り込むなら、Power Query の トリミングクリーン変換が同じことを繰り返し可能なステップとして実現します。 それが繰り返しのクリーニングにふさわしい置き場所です。単発なら数式に、パイプラインなら Power Query に手を伸ばしましょう。

ExcelMaster の活用

「この VLOOKUP がなぜ一致しないのか。値は同じに見えるのに」は、最もよく寄せられる 質問の 1 つで、その答えはほぼ必ず目に見えない空白です。ExcelMaster はまさに それをチェックします。末尾のスペースや CHAR(160) を見つけ出し、どの文字が犯人かを 教え、列全体を直す TRIMCLEANSUBSTITUTE の組み合わせを書き上げます。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