VBAで自動化 VBA一覧 データ整形・分割 空白:削除

【VBA】シート全体のスペースを削除する方法|全角・半角・改行まで実務で完全対策

 

Excelでデータを扱っていると、「見た目は同じなのに一致しない」「検索やフィルターでヒットしない」「VLOOKUPやXLOOKUPがうまく動かない」といった不可解なトラブルに直面することがあります。
こうした問題の原因として、非常に多いのがセル内に含まれる余計なスペース(空白文字)です。

特に厄介なのは、
半角スペース・全角スペース・改行・タブ・見えない制御文字が混在しているケースです。
目視では判別できず、「なぜ合わないのか分からない」状態に陥りがちです。

この記事では、Excel VBAを使ってシート全体のスペースを安全かつ確実に削除する方法を、
単なるサンプルではなく 実務で壊れにくい設計視点 とともに解説します。
「とりあえずTRIM」から卒業したい方は、ぜひ最後までご覧ください。

✅ なぜシート全体のスペース削除が必要なのか

※この章を飛ばすと、「なぜここまで徹底するのか」が分からなくなります。
スペースは見えないため、問題が起きるまで気づかれません。
しかも原因特定が難しく、調査コストが非常に高いトラブルです。
実務では「事後対応」ではなく、「事前に潰す設計」が求められます。
この章では、スペースが業務に与える影響を整理します。

シート内に余計なスペースがあると、次のような問題が発生します。

  • VLOOKUP / XLOOKUP が一致しない
  • COUNTIF / SUMIF の集計結果がズレる
  • フィルター検索に引っかからない
  • CSV出力後、別システムでエラーになる

これらの多くは、スペースが原因だと気づきにくいことが最大の問題です。


✅ Excelで発生するスペースの種類を整理する

※ここを理解していないと、削除漏れや事故が必ず起こります。
「スペース」と一括りにして処理すると、意図しない文字まで消してしまいます。
実務では、削除対象を明確にすることが最重要です。
この章では、Excelで遭遇しやすい空白文字を整理します。

Excelでよく出てくるスペースは次の通りです。

  • 半角スペース(ASCII 32)
  • 全角スペース(Unicode 12288)
  • 改行(vbCrLf / vbLf)
  • タブ文字(vbTab)
  • ノーブレークスペース(Chr(160))

特に Chr(160) はTRIM関数では消えないため、実務で非常に厄介です。


✅ VBAでシート全体のスペースを削除する基本方針

※いきなりコードを書き始めると、データ破壊の原因になります。
スペース削除は便利ですが、やり方を誤ると意味のある空白まで消してしまう危険があります。
この章では、安全に処理するための前提ルールを整理します。

実務での基本方針は以下です。

  • 数値セルは原則対象外
  • 文字列セルのみ処理する
  • 先頭・末尾のみ削除するか、全削除するかを明確にする
  • 元データのバックアップを取る

「全部消す」よりも、「何を消すかを決める」ことが重要です。


✅ シート全体の先頭・末尾スペースを削除する方法(基本)

※最も使用頻度が高く、安全性の高い方法です。
まずはこのパターンを確実に押さえてください。
実務では「まずここまでやる」だけでもトラブルは激減します。
この章では、基本となるTRIM処理を解説します。

・基本的なVBAコード

Sub TrimSheetCells()

    Dim ws As Worksheet
    Set ws = ActiveSheet

    Dim rng As Range
    For Each rng In ws.UsedRange.Cells

        If VarType(rng.Value) = vbString Then
            rng.Value = Trim(rng.Value)
        End If

    Next rng

End Sub

解説(実務視点)

  • UsedRange を使うことで不要なセル走査を防止
  • vbString 判定により数値セルを誤って文字列化しない
  • Trim先頭・末尾のみ を削除する安全な関数

👉
氏名・コード・商品名など、「中のスペースは残したい」ケースに最適です。

参考:【VBA】文字列の置換を正規表現で行う方法|Replaceでは対応できない実務パターン完全解説




✅ 全角スペースも含めて削除する方法

※日本語データでは必須の対応です。
半角スペースだけ消しても、全角が残っていると問題は解消しません。
この章では、全角スペースを対象にした削除方法を解説します。

Sub RemoveFullWidthSpace()

    Dim ws As Worksheet
    Set ws = ActiveSheet

    Dim c As Range
    For Each c In ws.UsedRange.Cells

        If VarType(c.Value) = vbString Then
            c.Value = Replace(c.Value, " ", "")
        End If

    Next c

End Sub

解説(実務視点)

  • " " は全角スペース
  • 文字列中の全角スペースを すべて削除
  • 氏名・住所などでは要件確認が必須

👉
「コード値」「ID」「分類コード」など、
空白が意味を持たないデータ向けの処理です。


✅ 半角・全角スペースを両方削除する実務向けコード

※実務で最もよく使われるパターンです。
データクレンジング用途では、この形が基本になります。

Sub RemoveAllSpaces()

    Dim ws As Worksheet
    Set ws = ActiveSheet

    Dim c As Range
    For Each c In ws.UsedRange.Cells

        If VarType(c.Value) = vbString Then
            c.Value = Replace(c.Value, " ", "")
            c.Value = Replace(c.Value, " ", "")
        End If

    Next c

End Sub

解説(実務視点)

  • 半角・全角を区別せず削除
  • 見た目は同じでも一致しない問題を根本解決
  • マスタデータやコード表の正規化に最適

✅ 改行・タブなど見えない文字も削除する方法

※CSV連携・RPA連携では特に重要です。
見た目では分からず、後工程で問題になります。
この章では制御文字対策を解説します。

Sub RemoveControlChars()

    Dim ws As Worksheet
    Set ws = ActiveSheet

    Dim c As Range
    For Each c In ws.UsedRange.Cells

        If VarType(c.Value) = vbString Then
            c.Value = Replace(c.Value, vbCrLf, "")
            c.Value = Replace(c.Value, vbLf, "")
            c.Value = Replace(c.Value, vbTab, "")
        End If

    Next c

End Sub

解説(実務視点)


✅ TRIMでは消えないChr(160)を削除する方法

※ここを知らないと「消したはずなのに一致しない」状態になります。
Web・CSV由来のデータで非常に多いパターンです。

Sub RemoveChar160()

    Dim ws As Worksheet
    Set ws = ActiveSheet

    Dim c As Range
    For Each c In ws.UsedRange.Cells

        If VarType(c.Value) = vbString Then
            c.Value = Replace(c.Value, Chr(160), "")
        End If

    Next c

End Sub

解説(実務視点)


✅ すべてをまとめた実務用スペース削除マクロ

※実務では「1本で確実」が最も安全です。

Sub CleanSheetSpaces()

    Dim ws As Worksheet
    Set ws = ActiveSheet

    Dim c As Range
    For Each c In ws.UsedRange.Cells

        If VarType(c.Value) = vbString Then

            c.Value = Replace(c.Value, Chr(160), "")
            c.Value = Replace(c.Value, " ", "")
            c.Value = Replace(c.Value, " ", "")
            c.Value = Replace(c.Value, vbCrLf, "")
            c.Value = Replace(c.Value, vbLf, "")
            c.Value = Replace(c.Value, vbTab, "")

        End If

    Next c

End Sub

解説(実務視点)

  • あらゆる空白・制御文字を一括除去
  • データ正規化の入口処理として最適
  • CSV出力・RPA前処理と相性が良い

✅ 処理速度を意識したシート全体スペース削除

※データ量が多い場合は必須です。
速度対策なしでは実務投入できません。

Sub CleanSheetSpacesFast()

    Application.ScreenUpdating = False
    Application.Calculation = xlCalculationManual

    Call CleanSheetSpaces

    Application.Calculation = xlCalculationAutomatic
    Application.ScreenUpdating = True

End Sub

解説(実務視点)

  • 画面更新・再計算を停止
  • 数万行以上のデータで効果大
  • 実務マクロでは必須の書き方



✅ まとめ:シート全体のスペース削除は「正規化処理」

  • スペースは見えないが影響は大きい
  • 種類ごとに対策が必要
  • TRIMだけでは不十分
  • VBAで一括処理すると安定
  • 実務では速度・安全性が重要

シート全体のスペース削除は、
単なる掃除ではなく データ正規化の重要工程 です。

参考:ChatGPTで正規表現(RegExp)を使うVBA作成|複雑な文字処理をAIで自動化する方法

    -VBAで自動化, VBA一覧, データ整形・分割, 空白:削除