Excelで文字列内の空白を削除しようとして、置換機能で半角スペースを削除したはずなのに、まだスペースが残ってしまうことがあります。

これは、全角スペースと半角スペースが混在していたり、見えない視認しづらい状況などが原因です。
特に外部データを取り込んだ際によく発生します。
そこで本記事では、どんなパターンのスペースでも確実に削除できる方法を紹介します。
なお、対策の項目は以下の通りです。
→ 置換機能で全角・半角スペースを個別に削除する基本的な方法。エクセルで文字列内の空白が削除できない時の対策2【スペース】
→ SUBSTITUTE関数で全角・半角スペースを一括削除する方法。エクセルで文字列内の空白が削除できない時の対策3【スペース】
→ TRIM関数で余分なスペースを削除する方法。
それでは一つ一つ見ていきましょう。
エクセルで文字列内の空白が一括削除できない時の対策1【置換:スペース】
まずは、置換機能を使って、全角スペースと半角スペースを個別に削除する方法です。
次のように、様々なパターンでスペースが入っているセルがあり、これらのスペースを削除したい状況に対処したいとします。

手順1:スペースを削除したい範囲を選択します。

手順2:Ctrl+Hのショートカットを使って、「置換」のウインドウを表示します。

手順3:検索する文字列に「半角スペース」を一つ入力し、「すべて置換」を選択します。

工程終了後:

エクセルで文字列内の空白が削除できない時の対策2【スペース】
続いては、SUBSTITUTE関数を使って、全角・半角スペースを一括で削除する方法です。
先ほどの方法では、「置換」することから一度削除してしまうと元のデータが残らないのに対して、この方法では関数を使って元データを参照し、別セルでスペースを削除した表示をすることから、処理前後の内容が確認できる利点があります。
先ほどと同様のサンプルを使用します。
今回は、空きスペースのC列を活用していきます。

関数を使用するため、各セルに対して設定していきます。
下記の例では、C1セルに対して「=SUBSTITUTE(B1,” ”,””)」を設定しています。
解説すると、SUBSTITUTE関数を用いて、B1セルに対して、「” ”」(全角スペース)を探し出します。そして「” ”」(全角スペース)があれば「””」(何もなし)にするという内容となります。
つまり、全角スペースがあれば全角スペースを取り除いて表示するという意味です。
ちなみに、もし全角スペースが見つからない場合は、B1の内容をそのまま表示することになります(「山田 太郎)。

続いて、設定した関数を一番下までオートフィルを使ってコピーしてあげます。
ただし、下記で確認できる通り、スペースが消えているものとそうでないものがあるのがわかります。

これは、先ほどの置換のときには、半角スペースも全角スペースも同一視されていたのに対して、関数の場合には別の内容として扱われます。
そのため、今回変化が起きたのは「” ”」(全角スペース)が「””」に置き換わったのみで、半角スペースは残ったままとなっています。

とはいえ、毎回半角スペースか全角スペースのどちらかをセルに応じて設定するのは非常に手間ですし、設定するだけ関数が持つ効率化の性質を活かすことができません。
そこで、下記のような工夫をすることで、解決ができます。
このようにSUBSTITUTE関数にSUBSTITUTE関数を重ねることで、二つの検索の意味を付与することができます。
具体的にはまず、内側のSUBSTITUTE関数から見ていきます。
内側:SUBSTITUTE(B1,” “,””) →「” “」(半角スペース)→「””」へ置換
外側: SUBSTITUTE(内側,” ”,””) →内側の置換した内容に対して「” ”」(全角スペース)→「””」へ置換
と二つの工程を処理することができます。
実質的に、半角スペース + 全角スペースを「””」へ置換する処理を行ったこととなります。
この関数を設定することで、下記のように、どちらが入っていてもすべてスペースが除かれた内容へと置換ができます。

このように、入れ子構造にすることを、「ネストする」と表現したりします。
エクセルで文字列内の空白が削除できない時の対策3【スペース】
続いては、TRIM関数を使って、余分なスペースを削除する方法についてです。
TRIM関数は、下記のようにスペースがあちこちに入ってしまっているデータを扱う場合に、簡単にスッキリした内容へと変換してくれる関数です。

TRIM関数はどのセルに対してスペースを削除するのかを選択するだけの非常にシンプルな関数です。
C1には「=TRIM(B1)」と入れるのみです。

上の画像のとおり、すべてのスペースを完全に取り除く処理がされたわけではありません。
TRIM関数について整理しておくと、以下のような性質を持っています。
TRIM関数の動作
・文字列の先頭と末尾のスペースを削除
・単語間の連続するスペースを1つにまとめる
この2つ目の性質が、上の画像のC3セル(「佐藤 次郎」)のように表現されたわけです。
ただし、TRIM関数は半角スペースのみに対応しており、全角スペースは削除できません。
全角スペースも削除したい場合は、対策2のSUBSTITUTE関数も併用してみてください。
まとめ エクセルで空白(スペース)が削除できない(置換等)時の解決策【文字列:一括】
対策1(置換) → 全角・半角スペースを個別に手動削除
対策2(SUBSTITUTE関数) → 全角・半角スペースを数式で一括削除
対策3(TRIM関数) → 余分なスペースを削除(半角のみ対応)
データの状況に応じて使い分けることで、確実にスペースを削除することができます。


コメント