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

【VBA】シート全体のスペースを削除する方法:Trim 関数・Replace 関数

Excel のデータ処理では、セル内の余分なスペースを削除したい場合があります。大量のデータを処理する際に、手動でスペースを削除するのは手間がかかります。

Excel VBA を使用してシート全体のスペースを一括で削除する方法について、基本から活用方法までを解説します。

スペースの種類

Excel で扱うスペースには以下のような種類があります。

  1. 前後のスペース: セル内の文字列の先頭や末尾にあるスペース。
  2. 中間のスペース: 文字列の途中にある余分なスペース。

前後のスペースを削除する

セル内の前後のスペースを削除するには、VBA の Trim 関数を使用します。【VBA】スペースを一括で削除【Replace関数:Trim関数】

【シート全体の前後のスペースを削除】

Sub RemoveLeadingAndTrailingSpaces()

Dim ws As Worksheet
Dim cell As Range

Set ws = ThisWorkbook.Worksheets("Sheet1")

' シート内のすべてのセルをループ
For Each cell In ws.UsedRange

If Not IsEmpty(cell.Value) And VarType(cell.Value) = vbString Then

cell.Value = Trim(cell.Value)

End If

Next cell

MsgBox "前後のスペースを削除しました!"

End Sub

解説

  • Trim 関数は、文字列の前後のスペースを削除します。
  • 空のセルや数値型のセルを処理しないように条件分岐を追加しています。

すべてのスペース(前後および中間)を削除する

セル内のすべてのスペースを削除するには、Replace 関数を使用します。

【シート全体のすべてのスペースを削除】

Sub RemoveAllSpaces()

Dim ws As Worksheet
Dim cell As Range

Set ws = ThisWorkbook.Worksheets("Sheet1")

' シート内のすべてのセルをループ
For Each cell In ws.UsedRange

If Not IsEmpty(cell.Value) And VarType(cell.Value) = vbString Then

cell.Value = Replace(cell.Value, " ", "")

End If

Next cell

MsgBox "すべてのスペースを削除しました!"

End Sub

解説

  • Replace(cell.Value, " ", "") を使用して、セル内のすべてのスペースを空文字に置き換えます。
  • この方法は、前後のスペースだけでなく、中間のスペースも削除します。

特定の範囲内だけでスペースを削除

シート全体ではなく、特定の範囲内でスペースを削除したい場合は、以下のコードを使用します。

【特定の範囲内でスペースを削除】

Sub RemoveSpacesInRange()

Dim ws As Worksheet
Dim targetRange As Range
Dim cell As Range

Set ws = ThisWorkbook.Worksheets("Sheet1")
Set targetRange = ws.Range("A1:C10") ' 対象範囲を指定

' 範囲内のすべてのセルをループ
For Each cell In targetRange

If Not IsEmpty(cell.Value) And VarType(cell.Value) = vbString Then

cell.Value = Replace(cell.Value, " ", "")

End If

Next cell

MsgBox "範囲内のスペースを削除しました!"

End Sub

解説

  • targetRange に対象範囲を指定して、その範囲内だけを処理します。
  • 必要に応じて範囲を変更してください。

半角スペースと全角スペースを両方削除する

日本語のデータでは、半角スペースだけでなく全角スペースも含まれる場合があります。この場合、半角スペースと全角スペースを両方削除する必要があります。

【半角・全角スペースを削除】

Sub RemoveAllSpacesIncludingFullWidth()

Dim ws As Worksheet
Dim cell As Range

Set ws = ThisWorkbook.Worksheets("Sheet1")

' シート内のすべてのセルをループ
For Each cell In ws.UsedRange

If Not IsEmpty(cell.Value) And VarType(cell.Value) = vbString Then

cell.Value = Replace(Replace(cell.Value, " ", ""), " ", "")

End If

Next cell

MsgBox "半角および全角スペースを削除しました!"

End Sub

解説

  • 内側の Replace(cell.Value, " ", "") で半角スペースを削除。
  • 外側の Replace(..., " ", "") で全角スペースを削除。

空白セルを削除する

スペース削除ではなく、空白セルを削除したい場合のコードも紹介します。

【空白セルを削除】

Sub DeleteEmptyCells()

Dim ws As Worksheet
Dim targetRange As Range

Set ws = ThisWorkbook.Worksheets("Sheet1")
Set targetRange = ws.UsedRange

' 空白セルを削除
targetRange.SpecialCells(xlCellTypeBlanks).Delete Shift:=xlUp

MsgBox "空白セルを削除しました!"

End Sub

解説

注意点

  1. 数値や数式が含まれるセルの扱い
    数値や数式が含まれるセルに対してスペース削除処理を行うと、意図しない結果を招く場合があります。適切に条件分岐を使用してください。

  2. データのバックアップ
    VBA でデータを一括処理する場合、データの損失を防ぐために、事前にバックアップを取ることをおすすめします。

  3. パフォーマンスの最適化
    処理対象のデータが多い場合、処理速度が遅くなることがあります。Application.ScreenUpdating = False を使用して画面更新を停止することで処理を高速化できます。【VBA】Application.ScreenUpdatingプロパティの使用方法と特徴

まとめ

Excel VBA を使えば、シート全体のスペースを簡単に削除できます。用途に応じて以下の方法を使い分けましょう。

  1. Trim 関数: 前後のスペースを削除。
  2. Replace 関数: すべてのスペース(半角・全角)を削除。
  3. 特定の範囲のみ処理: 必要な範囲だけを対象に処理。

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