【VAB】文字列から半角スペースを削除する方法|Trim・Replace・正規表現まで徹底解説

VBAで処理をしていると、「セルの値に余計なスペースが入ってしまい、うまく比較や検索ができない」という場面に出会うことがあります。特に文字列に含まれる 半角スペースは目に見えにくく、思わぬエラーの原因になることも少なくありません

この記事では、VBAで文字列から半角スペースを除去する方法を基本から応用まで徹底的に解説し、目的に合わせて最適なアプローチを選べるように整理しました。

目次

半角スペース削除に使える基本関数とその特徴

Trim, LTrim, RTrim

VBAの文字列操作で最もよく使われるのが Trim 系関数です。

  • Trim(文字列) → 先頭と末尾の 半角スペース を削除します。
  • LTrim(文字列) → 左側(先頭)のみ削除します。
  • RTrim(文字列) → 右側(末尾)のみ削除します。
Sub ExampleTrim()
    Dim txt As String
'    txt = "   Excel VBA   "
    txt = "   山田 太郎 "
    MsgBox "[" & Trim(txt) & "]"   ' [山田 太郎] と表示される
End Sub

ポイント:文字列の途中にあるスペースは削除されません。
単語の間のスペースも整理したい場合は次の方法を使います。

WorksheetFunction.Trim

VBAでExcelのTRIM関数を呼び出す方法です。

Sub ExampleWsTrim()
    Dim txt As String
    txt = "  A   B   C  "
    MsgBox "[" & WorksheetFunction.Trim(txt) & "]" ' "[A B C]" と表示される
End Sub

ポイント:先頭・末尾の全角・半角スペースを削除します。
文字列の途中にある複数スペースを1つにまとめます。

文字列内のスペースをすべて消したい場合の方法

Replace関数を使ってスペースを削除する

文字列中の すべての半角スペース を削除するシンプルな方法です。スペースに限らず、特定の文字列を別の文字列に置換したい場合にも便利です。

Sub RemoveSpaces()
    Dim txt As String
    txt = "A B C"
    txt = Replace(txt, " ", "")
    MsgBox txt   ' "ABC"
End Sub

下記コードは、選択中の(複数)セルに適用する場合の例です。

Sub RemoveSpacesRange()
    Dim cell As Range
    For Each cell In Selection
        cell.Value = Replace(cell.Value, " ", "")
    Next cell
End Sub

Range.Replaceを使ってスペースを削除する

セル範囲全体に対して一括でスペースを削除できます。一括で処理するため、ループ処理に比べて短い処理時間で実行できます。

Sub RemoveSpacesWithRangeReplace()
    Range("A1:A10").Replace What:=" ", Replacement:="", LookAt:=xlPart
End Sub

Split と Join を組み合わせてスペースを削除する

下記コードは配列を活用した方法です。

Sub RemoveSpacesWithSplitJoin()
    Dim txt As String
    txt = "A B C"
    txt = Join(Split(txt, " "), "")
    MsgBox txt   ' "ABC"
End Sub

半角だけでなく全角スペースも処理したい場合

半角だけでなく全角スペースも削除したい場合は、全角スペースの削除の処理を追加するだけでOKです。

Excel関数を活用

  • SUBSTITUTE(セル, " ", "") → 半角スペース除去の場合
  • SUBSTITUTE(セル, " ", "") → 全角スペース除去の場合
  • SUBSTITUTE(SUBSTITUTE(セル, " ", ""), " ", "")→ 半角&全角スペース除去の場合

VBAで実行

Sub RemoveHalfAndFullWidthSpaces()
    Dim txt As String
    txt = "ABC  123"
    txt = Replace(txt, " ", "")
    txt = Replace(txt, " ", "")
    MsgBox txt   ' "ABC123"
End Sub

まとめ

  • 前後のスペースだけを削除Trim
  • 余分なスペースを整理WorksheetFunction.Trim
  • すべてのスペースを削除Replace または Split+Join
  • セル範囲を一括処理Range.Replace
  • 全角も合わせて処理Replace または SUBSTITUTE

用途に応じて使い分ければ、VBAでの文字列処理は格段にスムーズになります。

この記事を書いた人

うつ病により二度の休職を経験。
現在は自動車メーカー勤務で、開発業務改善に従事。
自身の経験を基にしたメンタル改善のための情報や、仕事を楽にするためのVBAのノウハウ発信をしています。

目次