VBAのReplaceメソッドで文字を置換~全角スペースを半角に置換

半角全角バラバラなスペースを置換で統一

Replaceメソッド 3行マクロ 66回

文字を置換する

名簿などで半角と全角のスペースが混在していたり、電話番号の区切りがまちまちだったりと、Excelで置換が必要なケースは結構あります。
今回は、名簿に限らず、セル範囲内から特定の文字を一括置換するかんたんなReplaceメソッドを使ったミニマクロを紹介します。

(サンプルファイルは、こちらから 3行マクロ66回サンプルデータ
Excelバージョン:Excel2016201320102007

半角全角バラバラなスペースを統一したい

名簿の文字列を姓と名に分けるというような場合、通常はワークシート関数を使うことが多いです。 ただし、名簿の形式が統一されていない場合などでは、予め、名簿の原本を関数が使えるように加工してやる必要があります。
半角スペースと全角スペースが混在
下処理のしていない名簿を扱うときは、マクロの方が便利です。
例えば、上記の例のように、全角スペースを半角スペースに統一したい場合には、RangeオブジェクトのReplaceメソッドやReplace関数を使うことができます。
ここではReplaceメソッドの例を紹介しましょう。
Replace メソッド
Replace メソッド
Range.Replace メソッド (Excel)パラメーター
.Replace メソッドには引数が多いので確認しておきましょう。
名前 説明
What Excel で検索する文字列。
Replacement 置き換える文字列を指定。
LookAt xlPart:検索テキストの一部を検索します。 xlWhole:検索テキスト全体を検索します。
SearchOrder xlByColumns:列を下方向に検索してから、次の列に移動します。 xlByRows:行を横方向に検索してから、次の行に移動します。
MatchCase 大文字と小文字を区別して検索するには、True を指定します。
MatchByte この引数は、Microsoft Excel で 2 バイト言語サポートを選択またはインストールした場合にのみ使用します。 2 バイト文字が 2 バイト文字とだけ一致するようにする場合は、True?を指定します。 2 バイト文字が同等の 1 バイト文字とも一致するようにする場合は、False?を指定します。
SearchFormat メソッドの検索書式を指定します。
ReplaceFormat メソッドの置換書式を指定します。
Sub 半角に区切りを統一() 'Replaceメソッド
  Range("B2:B21").Replace " ", " ", xlPart
End Sub
このように、Replaceメソッドの場合は置換したい範囲を指定すればいいので、上記のようにコードが簡潔になります。 また、もし、区切りに"/"などが使用されている氏名が混在していても、1行追加するだけで済みますね。
Sub 半角に区切りを統一2() 'Replaceメソッド
  Range("B2:B21").Replace " ", " ", xlPart
  Range("B2:B21").Replace "/", " ", xlPart
End Sub
実行すると、下図のように名簿の下処理が完了します。
文字列を抽出するマクロ6

汎用的に使うには Selection

範囲を限定せずに、汎用的に使いたい場合は、Range("B2:B21")の部分をSelectionとすることで選択範囲の文字の置換ができます。 (選択されているセル範囲はSelectionで表せるので、セル範囲を選択してからマクロを実行する。)
Sub 半角に区切りを統一3() 'Selectionを使って
  Selection.Replace " ", " ", xlPart
End Sub

UsedRangeを使う

長い表などで、セル範囲が選択しづらければ、UsedRangeを使う事もできます。 ただし、この場合は、使用されていた表全体が対象となるので注意が必要です。
Sub 文字列置換区切りを統一4()
  With ActiveSheet.UsedRange
  .Replace " ", " ", xlPart
  End With
End Sub

置換したい文字列をユーザーが入力

置換したい文字列をユーザーがInputBoxで入力できるようにすると、使い勝手がさらに良くなります。 3行マクロとしては、ちょっと長いですが、紹介しましょう。
Sub 置換したい文字列をユーザーが入力() 
Dim 探す As String, 結果 As String
探す = InputBox(Prompt:="置換前文字列を入力してね")
結果 = InputBox(Prompt:="置換後の文字列を入力してね")
  With ActiveSheet.UsedRange
  .Replace 探す, 結果, xlPart
  End With
End Sub
全角スペースを半角に置換マクロ1
コードを実行すると、インプットボックスが表示されるので、ユーザーが置換前文字列と置換後文字列を入力する事ができます。
全角スペースを半角に置換マクロ2

こちらもおすすめ