ExcelのCLEAN関数の使い方|制御文字を一括削除する方法

スポンサーリンク

CSVや外部システムから取り込んだデータに、目に見えない文字が混ざっていたことはありませんか? 文字化けのような記号が表示されたり、VLOOKUPが一致しなかったり。手作業で探すのは大変ですし、そもそも見えない文字は目視では見つかりません。

CLEAN関数を使えば、こうした印刷できない制御文字をまとめて削除できます。この記事では基本の書き方から実務の活用パターンまで紹介します。

この記事は次のような人におすすめ

  • CSVや他システムから取り込んだデータの文字化けを解消したい
  • 印刷できない制御文字を一括で削除したい
  • CLEAN関数とTRIM関数の違いを知りたい

CLEAN関数とは?

CLEAN(クリーン)関数は、文字列からASCII制御文字を削除する関数です。英語の「clean」は「きれいにする」という意味で、データを浄化するための関数です。

ここでいう「制御文字」とは、文字コード0〜31の印刷できない文字のことです。改行コード(CHAR(10))やタブ(CHAR(9))、キャリッジリターン(CHAR(13))などが該当します。

これらの文字は画面上では見えないか、四角い記号として表示されます。外部データを取り込んだときに紛れ込むことが多いです。VLOOKUPの不一致やセル内改行の崩れなど、厄介なトラブルの原因になります。

NOTE

CLEAN関数が削除するのはASCII制御文字(コード0〜31)のみです。通常のスペースや全角スペースは削除しません。スペースの整理にはTRIM関数を使います。

CLEAN関数の書き方(構文と引数)

基本構文

=CLEAN(文字列)

引数の説明

引数必須/省略可説明
文字列必須制御文字を削除したいテキスト、またはセル参照

引数は「文字列」の1つだけです。セル参照のほか、ダブルクォーテーションで囲んだ文字列を直接指定することもできます。

CLEAN関数の基本的な使い方

制御文字を削除する基本例

セルA1に改行コード付きの文字列が入っている場合です。

=CLEAN(A1)

CLEAN関数を適用すると、改行やタブなどの制御文字がすべて削除されます。見た目がおかしいデータも、この一手で綺麗になります。

セル参照で一括処理する

データが大量にある場合は、作業列を使って一括処理するのが効率的です。

=CLEAN(A2)

この数式を下方向にコピーして、整形後のデータを「値として貼り付け」で元の列に上書きすれば完了です。

文字列を直接指定する

セル参照ではなく、数式内に文字列を直接書くこともできます。

=CLEAN("テスト" & CHAR(10) & "データ")

CHAR(10)は改行コードです。CLEAN関数が改行を除去して、「テストデータ」と表示されます。

CLEAN関数の実務活用パターン

CLEAN+TRIMで外部データを整形する

外部データには制御文字とスペースの両方が混ざっていることがよくあります。CLEAN関数とTRIM関数を組み合わせれば、両方を一度に処理できます。

=TRIM(CLEAN(A2))

まずCLEAN関数で制御文字を除去し、次にTRIM関数で余分なスペースを整理します。CSVや他システムからのデータ取り込み後は、このセットで処理しておくと安心です。

CLEAN+SUBSTITUTE+TRIMの3点セットで完全クレンジング

Webページからコピーしたデータには、ノーブレークスペース(CHAR(160))が含まれることがあります。この文字はCLEAN関数でもTRIM関数でも削除できません。

SUBSTITUTE関数を加えた3点セットなら、ほぼすべての不要文字を除去できます。

=TRIM(CLEAN(SUBSTITUTE(A2,CHAR(160)," ")))

処理の流れは次のとおりです。

  1. SUBSTITUTE関数でノーブレークスペースを半角スペースに変換
  2. CLEAN関数で制御文字を除去
  3. TRIM関数で余分なスペースを整理

この3点セットは外部データのクレンジングで最も頼りになる定番パターンです。迷ったらまずこの数式を試してみてください。

CLEANで除去できない文字をCHAR+SUBSTITUTEで対処する

CLEAN関数はASCII制御文字(コード0〜31)だけを削除します。コード128以上のUnicode制御文字やNBSP(CHAR(160))は対象外です。

こうした文字はCODE関数で文字コードを特定し、CHAR関数とSUBSTITUTE関数で個別に削除します。

=CODE(MID(A1,1,1))

まずCODE関数でセル内の先頭文字の文字コードを調べます。正体がわかったら、SUBSTITUTE関数で削除しましょう。

=SUBSTITUTE(A1,CHAR(127),"")

たとえば文字コード127(DEL文字)が混入していた場合、上の数式で削除できます。CLEAN関数の対象外の文字に遭遇したら、この手順で対処してください。

NOTE

ノーブレークスペースの詳細と対策はノーブレークスペースの解説記事を参照してください。

CLEAN関数のよくあるエラーと対処法

CLEAN関数自体はエラーが出にくい関数です。ただし意図した結果にならないケースがあります。

症状原因対処法
文字化けが消えないUnicode制御文字(コード128以上)CODE関数で文字コードを特定し、SUBSTITUTE+CHARで削除
スペースが残るCLEAN関数はスペースを削除しないTRIM関数で余分なスペースを除去
見えない文字が残るノーブレークスペース(CHAR(160))=SUBSTITUTE(A1,CHAR(160),"") で削除
#VALUE!エラー引数が指定されていない文字列の引数は必須。セル参照か文字列を指定してください
VLOOKUPが一致しないCLEAN後もまだ不一致ASC関数で全角英数字を半角に統一してみてください

TIP

CLEAN関数で文字化けが消えないときは、=CODE(MID(A1,1,1)) で1文字ずつ文字コードを確認してみましょう。0〜31以外の値が返ってきたら、CLEAN関数の対象外の文字です。

似た関数との違い・使い分け

CLEAN関数とよく比較される関数の違いを整理します。

項目CLEAN関数TRIM関数SUBSTITUTE関数
削除対象制御文字(コード0〜31)余分な半角スペース指定した文字列
改行の削除できるできないCHAR(10)を指定すればできる
スペースの処理できない前後削除+内部を1つに圧縮指定すれば削除可能
NBSP(CHAR(160))できないできないCHAR(160)を指定すれば削除可能
引数の数1つ(文字列のみ)1つ(文字列のみ)3〜4つ(文字列、検索文字列、置換文字列、[置換対象])
使う場面外部データの制御文字除去スペースの整理特定の文字を狙って置換・削除

使い分けのポイントは「何を消したいか」です。

  • 制御文字を一括で消したい → CLEAN関数
  • 余分なスペースを整理したい → TRIM関数
  • 特定の文字を狙って消したい → SUBSTITUTE関数
  • 全部まとめて整形したい → =TRIM(CLEAN(SUBSTITUTE(A1,CHAR(160)," "))) の3点セット

まとめ

CLEAN関数は「文字列からASCII制御文字を一括削除する」ための関数です。

  • ASCII制御文字(コード0〜31)の改行・タブ・CRなどを削除する
  • 引数は「文字列」の1つだけでシンプル
  • =TRIM(CLEAN(A2)) でスペース整理と制御文字除去を同時に処理できる
  • ノーブレークスペース(CHAR(160))はCLEAN対象外。SUBSTITUTE関数で対処する
  • 3点セット =TRIM(CLEAN(SUBSTITUTE(A1,CHAR(160)," "))) が最強のクレンジング数式

外部データの取り込みでおかしな文字が混ざっていたら、まずCLEAN関数を試してみてください。TRIM関数やSUBSTITUTE関数と組み合わせれば、ほとんどのクレンジングに対応できます。

関連記事

関数一覧

Excel関数の一覧は下記の記事で確認できます。

エラー値が表示される場合は、下記の記事も参考にしてみてください。

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