Excel VBA 逆引き集 | 空白除去

Excel VBA
スポンサーリンク

空白除去

Excelのデータには「前後に余分なスペースが入っている」「全角スペースが混ざっている」などのケースがよくあります。これを放置すると重複判定や検索で誤判定が起きます。そこで 空白除去 の定番テンプレをまとめました。初心者向けに、コード例をかみ砕いて説明します。


基本の考え方

  • Trim関数: 前後の半角スペースを削除。
  • WorksheetFunction.Trim: Excel関数と同じで、文字列中の余分なスペースも削除(ただし全角スペースは対象外)。
  • Replace: 全角スペース " " を半角スペース " " に置換。
  • 正規化関数: これらを組み合わせて「前後空白」「全角スペース」「連続スペース」をまとめて処理。

テンプレ1:セルの前後空白を削除(Trim)

Sub RemoveSpaces_Basic()
    Dim ws As Worksheet: Set ws = Worksheets("Data")
    Dim lastRow As Long: lastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row

    Dim r As Long
    For r = 2 To lastRow
        ws.Cells(r, "A").Value = Trim(ws.Cells(r, "A").Value)
    Next r
End Sub
VB
  • ポイント: Trimは「前後の半角スペース」だけを削除。中間のスペースは残る。

テンプレ2:文字列中の余分なスペースを削除(WorksheetFunction.Trim)

Sub RemoveSpaces_Extra()
    Dim ws As Worksheet: Set ws = Worksheets("Data")
    Dim lastRow As Long: lastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row

    Dim r As Long
    For r = 2 To lastRow
        ws.Cells(r, "A").Value = WorksheetFunction.Trim(ws.Cells(r, "A").Value)
    Next r
End Sub
VB
  • ポイント: Excel関数のTRIMと同じ動き。中間のスペースが1つに整えられる。
  • 注意: 全角スペースは削除されない。

テンプレ3:全角スペースを半角に置換してからTrim

Sub RemoveSpaces_FullWidth()
    Dim ws As Worksheet: Set ws = Worksheets("Data")
    Dim lastRow As Long: lastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row

    Dim r As Long, s As String
    For r = 2 To lastRow
        s = ws.Cells(r, "A").Value
        s = Replace(s, " ", " ") ' 全角スペースを半角に
        s = WorksheetFunction.Trim(s)
        ws.Cells(r, "A").Value = s
    Next r
End Sub
VB
  • ポイント: 日本語データでは全角スペースが混ざることが多いので必須。

テンプレ4:正規化関数を作って一括処理

Function NormalizeText(ByVal s As String) As String
    ' 全角スペースを半角に
    s = Replace(s, " ", " ")
    ' 前後空白を削除
    s = Trim(s)
    ' 連続スペースを1つに
    Do While InStr(s, "  ") > 0
        s = Replace(s, "  ", " ")
    Loop
    NormalizeText = s
End Function

Sub RemoveSpaces_Normalize()
    Dim ws As Worksheet: Set ws = Worksheets("Data")
    Dim lastRow As Long: lastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row

    Dim r As Long
    For r = 2 To lastRow
        ws.Cells(r, "A").Value = NormalizeText(ws.Cells(r, "A").Value)
    Next r
End Sub
VB
  • ポイント: 「全角→半角」「前後空白削除」「連続スペース削除」をまとめて処理。
  • 応用: 重複判定や検索前に必ずこの関数を通すと誤判定が減る。

例題で練習

'例1:前後の半角スペースを削除
Sub Example_Basic()
    RemoveSpaces_Basic
End Sub

'例2:文字列中の余分なスペースを削除
Sub Example_Extra()
    RemoveSpaces_Extra
End Sub

'例3:全角スペースを半角にしてから整形
Sub Example_FullWidth()
    RemoveSpaces_FullWidth
End Sub

'例4:正規化関数で一括処理
Sub Example_Normalize()
    RemoveSpaces_Normalize
End Sub
VB

初心者向けポイント

  • Trimだけでは不十分: 中間スペースや全角スペースは残る。
  • 日本語データは全角スペースに注意: Replace(" "," ")で半角に統一。
  • 連続スペースは1つに: ループで置換するときれいになる。
  • 正規化関数を作る: どの処理でも同じ関数を通すと安心。

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