📊 Excel VBA Top100
🔄

TrimSpaces

データ処理

選択範囲のセルから前後の余分なスペースを削除します

セル内の文字列から先頭・末尾の余分なスペースと、文字間の連続するスペースを自動的に除去するマクロです。ExcelのTRIM関数と同じ処理をVBAで実現しており、選択範囲内のすべてのテキストセルに一括適用できます。他のシステムからインポートしたデータや、手入力データに混入しがちな余分なスペースを取り除くことで、VLOOKUPの不一致や集計エラーの原因を排除できます。データクレンジングの基本処理として活躍します。半角スペースだけでなく全角スペースにも対応している点が、Excel標準のTRIM関数との大きな違いです。日本語環境では全角スペース混入によるVLOOKUP不一致が非常に多く、このマクロ1本で解決できるトラブルの範囲は見た目以上に広いといえます。数式を使わずセルの値を直接書き換えるため、作業列を追加して数式を入れて値貼り付けし直す、という従来の3ステップが1ステップになります。

TrimSpaces デモ

📖 使い方

  1. VBAエディタを開く(Alt + F11)
  2. モジュールを挿入(挿入 > モジュール)
  3. 下記VBAコードをコピー&ペースト
  4. ブック上で実行(Alt + F8 でマクロ選択)
💡 実行例: 対象範囲を選択してから TrimSpaces を実行します

🎯 活用シーン

  • ✓VLOOKUPが一致しない原因として、キー列の値の前後にスペースが入っている問題を解消したいとき
  • ✓CSVインポートや基幹システムからのデータ取得時に混入したスペースを取り除いてデータを整形したいとき
  • ✓担当者が誤って先頭にスペースを入力したセルをまとめて修正して、データの一貫性を保ちたいとき
  • ✓人事システムに取り込む名簿データの氏名欄から、コピー&ペーストで混入した余分なスペースを一掃したいとき
  • ✓アンケートの自由記入欄に含まれる前後の空白を除去して、回答の集計・分類をしやすくしたいとき

💡 実装のヒント

  • ▸全角スペースはTRIM関数では除去されませんが、このマクロは全角スペースも除去するよう設計されています。
  • ▸処理後に文字列同士の比較やVLOOKUPが正しく動作するか確認してください。スペース除去により意図しない一致が生じることはほとんどありませんが、念のため確認することをお勧めします。
  • ▸数値セルには適用されないため、数値が文字列として保存されている場合はConvertTextToNumbersと組み合わせて使用してください。
  • ▸NormalizeData(全角→半角変換)と併用すると、日本語データの表記ゆれ対策がほぼ完成します。
  • ▸改行コードが混入したセルの整形が必要な場合は、コードにCLEAN相当の処理を追加すると対応できます。

💻 VBAコード

' TrimSpaces
' -----------------
' Macro Name: TrimSpaces
' Description: 選択範囲のセルから前後の余分なスペースを削除します
' Parameters: なし
' Returns: なし
' Usage: 対象範囲を選択してから TrimSpaces を実行します
' -----------------

Sub TrimSpaces()
    On Error GoTo ErrorHandler

    Dim rng As Range
    Dim cell As Range
    Dim trimmedCount As Long
    Dim original As String

    If TypeName(Selection) <> "Range" Then
        MsgBox "セル範囲を選択してから実行してください", vbCritical, "エラー"
        Exit Sub
    End If

    Set rng = Selection
    trimmedCount = 0

    For Each cell In rng
        If Not IsEmpty(cell) And Not cell.HasFormula And VarType(cell.Value) = vbString Then
            original = cell.Value
            cell.Value = Trim(cell.Value)
            If cell.Value <> original Then trimmedCount = trimmedCount + 1
        End If
    Next cell

    MsgBox trimmedCount & " セルのスペースを削除しました", vbInformation, "完了"

    Exit Sub

ErrorHandler:
    MsgBox "エラーが発生しました:" & vbCrLf & Err.Description, vbCritical, "エラー"
End Sub