VBAのReplaceメソッドで文字を置換~全角スペースを半角に置換
Replaceメソッド 3行マクロ 66回
文字を置換する
名簿などで半角と全角のスペースが混在していたり、電話番号の区切りがまちまちだったりと、Excelで置換が必要なケースは結構あります。
今回は、名簿に限らず、セル範囲内から特定の文字を一括置換するかんたんなReplaceメソッドを使ったミニマクロを紹介します。
(サンプルファイルは、こちらから 3行マクロ66回サンプルデータ)
Excelバージョン:
半角全角バラバラなスペースを統一したい
名簿の文字列を姓と名に分けるというような場合、通常はワークシート関数を使うことが多いです。
ただし、名簿の形式が統一されていない場合などでは、予め、名簿の原本を関数が使えるように加工してやる必要があります。
下処理のしていない名簿を扱うときは、マクロの方が便利です。
例えば、上記の例のように、全角スペースを半角スペースに統一したい場合には、RangeオブジェクトのReplaceメソッドやReplace関数を使うことができます。
ここではReplaceメソッドの例を紹介しましょう。
例えば、上記の例のように、全角スペースを半角スペースに統一したい場合には、RangeオブジェクトのReplaceメソッドやReplace関数を使うことができます。
ここではReplaceメソッドの例を紹介しましょう。
Replace メソッド
Range.Replace メソッド (Excel)パラメーター
.Replace メソッドには引数が多いので確認しておきましょう。
.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実行すると、下図のように名簿の下処理が完了します。
汎用的に使うには 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
コードを実行すると、インプットボックスが表示されるので、ユーザーが置換前文字列と置換後文字列を入力する事ができます。