エクセルVBAでReplace関数・Replaceメソッドで文字列を置換する方法を紹介します。
Replace関数を使用して指定した範囲内をでループ処理で置換する方法と、Replaceメソッドを使用して範囲内を一括置換する方法をご紹介しています。置換する文字は変数に格納したり、部分一致(ワイルドカード)で検索する方法もありますので見出しから知りたいところをクリックしてご覧ください。
Replace関数とReplaceメソッドの違いについて
Replace関数とReplaceメソッドは両方とも文字列を置換するときに使用しますが少し特徴が異なります。
Replace関数の特徴
・範囲内を置換したいときはループ処理で1つずつ置換する必要がある
Replaceメソッドの特徴
・ワイルドカードが使用できる
・範囲を指定することができる
Replaceメソッドの方が良いように見えますが、使用する上での注意点もあります。
Replaceメソッドの注意点
・非表示のセルは置換されない(オートフィルタや行・列の非表示設定)
・引数をきちんと設定しないと前回手動で置換したときの設定を引き継いでしまう
※「検索と置換」ウィンドウ内の各チェックボックスの設定
・「大文字と小文字を区別する」
・「セル内容が完全に同一であるものを検索する」
・「半角と全角を区別する」
Replace関数で文字列を置換(範囲内をループ処理で置換)
Replace関数の書き方は下のように書きます。
実務で使用する時には1カ所だけを置換するケースはあまりなく、列などの範囲を対象に一気に書き換えたいケースが多いと思います。
Replace関数を使用して範囲内を置換したい場合はループ処理を使用して1セルずつ書き換えていきます。
▽マクロ実行前
以下のような部署名の表があったとして、「~部」を「~事業部」に書き換えたい場合があったとします。わかりやすくするため、A列の値を置換してB列に書き出したいと思います。
▽VBAコードはこちら
2行目~9行目までループを回して、A列のセルの値の「部」という文字を「事業部」という文字に置換し、B列に書き出していきます。
Sub Sample_1()
Dim i As Integer
'A列の2行目~9行目まで繰り返し
For i = 2 To 9
'A列の「部」⇒「事業部」に変換してB列に出力
Cells(i, 2) = Replace(Cells(i, 1), "部", "事業部")
Next
End Sub
上の例では最終列を9行目までとして「For i = 2 To 9」と指定していますが、実際は何行目まであるかわからないデータに対して最終行まで行いたいケースが多いため、その場合は最終行をその場で取得して指定する方法を使用してください。
「For i = 2 To Cells(Rows.Count, 1).End(xlUp).Row」
※1列目の最終行までを繰り返す
▽マクロ実行後
A列→B列へ置換された値が出力されました。
Replaceメソッドで文字を置換する(ループなし・範囲内を一括置換)
今度はReplaceメソッドを使用して範囲内を一括置換する方法です。
▽マクロ実行前
今度は置換前と置換後の文字はD列で指定しておき、変数を使用して置換します。
▽VBAコードはこちら
置換前と置換後の文字列を格納する変数(beforeStr , afterStr)を用意しておきます。
D列の値を変数に格納して、Replaceメソッドを使用してA2~A9までの範囲を置換します。
Sub Sample_2()
'変数を宣言する
Dim beforeStr As String
Dim afterStr As String
'変数に値を入れる 置換前「部」
beforeStr = Range("D1").Value
'変数に値を入れる 置換後「事業部」
afterStr = Range("D2").Value
'A2~A9の範囲を指定し、置換を実行(部分一致)
Range("A2:A9").Replace beforeStr, afterStr, xlPart
End Sub
▽マクロ実行後
A列の部署名の「部」が「事業部」へ置換されました。
Replaceメソッド:部分一致(ワイルドカード)・完全一致の使い分け方
引数のLookAtを指定して、部分一致で置換する場合と完全一致で置換する場合の例です。
▽マクロ実行前
部署名にある「~営業部」の「営業部」を「営業Division」に置換したいケースを想定します。
▽VBAコード(完全一致)
完全一致するものだけを置換したい場合はReplaceメソッドのうしろに完全一致を表す「xlWhole」を記述します。この場合は完全に一致する4行目の「営業部」だけが「営業Division」に置換されます。
Sub Sample_3()
'変数を宣言する
Dim beforeStr As String
Dim afterStr As String
'変数に値を入れる 置換前「営業部」
beforeStr = Range("D1").Value
'変数に値を入れる 置換後「営業Division」
afterStr = Range("D2").Value
'A2~A9の範囲を指定し、置換を実行(セル完全一致)
Range("A2:A9").Replace beforeStr, afterStr, xlWhole
End Sub
▽マクロ実行後(完全一致)
4行目の「営業部」だけが「営業Division」に置換されました。「第1営業部」「第2営業部」はそのまま残っています。
▽VBAコード(部分一致)
次は部分一致するものだけを置換したいので引数を「xlPart」に変更します。
Sub Sample_4()
'変数を宣言する
Dim beforeStr As String
Dim afterStr As String
'変数に値を入れる 置換前「営業部」
beforeStr = Range("D1").Value
'変数に値を入れる 置換後「営業Division」
afterStr = Range("D2").Value
'A2~A9の範囲を指定し、置換を実行(部分一致)
Range("A2:A9").Replace beforeStr, afterStr, xlPart
End Sub
▽マクロ実行後(部分一致)
部分一致で実行した場合は「営業部」の文字が含まれるものすべてが「営業Division」に置換されました。
このように部分一致か完全一致か、必要に応じて使い分けて使用します。
Replaceを使用して特定の文字を削除する方法
Replaceの使用方法として、特定の文字を置き換えたい場合と、特定の文字を削除したい場合があると思います。文字を置き換えたい場合は上記の書き方で置換したい文字を指定します。
特定の文字を消したい場合は置換後の文字列の部分を「””」で空白を指定して置換してください。
例:「部」を削除
Replace(Range(“A1”), “部”, “”)
※コードのコピー利用について
・コードのコピーは自由におこなっていただけます。
・気を付けて作成はしていますがコードには誤りがある可能性があります。
・自身の環境で動作確認をしていますが、すべての方の環境で同様に動くことは保証できません。
・データの破損等の責任は負いかねますのでご自身の責任のもとお使いください。