VBAのReplaceメソッドで文字を置換~全角スペースを半角に置換
Replaceメソッド 3行マクロ 66回
文字を置換する
名簿などで半角と全角のスペースが混在していたり、電話番号の区切りがまちまちだったりと、Excelで置換が必要なケースは結構あります。
今回は、名簿に限らず、セル範囲内から特定の文字を一括置換するかんたんなマクロを紹介します。
(サンプルファイルは、こちらから 3行マクロ66回サンプルデータ)
Excelバージョン:
半角全角バラバラなスペースを統一したい
名簿の文字列を姓と名に分けるというような場合、通常はワークシート関数を使うことが多いです。
ただし、名簿の形式が統一されていない場合などでは、予め、名簿の原本を関数が使えるように加工してやる必要があります。


下処理のしていない名簿を扱うときは、マクロの方が便利です。
例えば、上記の例のように、全角スペースを半角スペースに統一したい場合には、RangeオブジェクトのReplaceメソッドやReplace関数を使うことができます。
ここではReplaceメソッドの例を紹介しましょう。
例えば、上記の例のように、全角スペースを半角スペースに統一したい場合には、RangeオブジェクトのReplaceメソッドやReplace関数を使うことができます。
ここではReplaceメソッドの例を紹介しましょう。
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実行すると、下図のように名簿の下処理が完了します。

汎用的に使うには 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

コードを実行すると、インプットボックスが表示されるので、ユーザーが置換前文字列と置換後文字列を入力する事ができます。

