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での文字列処理は格段にスムーズになります。