PR

【Excel VBA】Replace関数・Replaceメソッドで文字列を置換(指定範囲を一括置換)

VBA

エクセルVBAでReplace関数・Replaceメソッドで文字列を置換する方法を紹介します。

Replace関数を使用して指定した範囲内をでループ処理で置換する方法と、Replaceメソッドを使用して範囲内を一括置換する方法をご紹介しています。置換する文字は変数に格納したり、部分一致(ワイルドカード)で検索する方法もありますので知りたいところをクリックしてご覧ください。

スポンサーリンク

Replace関数で文字列を置換(範囲内をループ処理で置換)

Replace関数はセルの中の文字列を置換する関数です。

▽Replace関数の書き方
Replace(Range(“A1”), “置換前の文字列“, “置換後の文字列“)

実務で使用する時には1カ所だけを置換するケースはあまりなく、列などの範囲を対象に一気に書き換えたいケースが多いと思います。
Replace関数を使用して範囲内を置換したい場合はループ処理を使用して1セルずつ書き換えていきます。

▽マクロ実行前
 以下のような部署名の表があったとして、「~部」を「~事業部」に書き換えたい場合があったとします。わかりやすくするため、A列の値を置換してB列に書き出したいと思います。

ExcelVBA-Replace関数で置換する前の状態

▽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列へ置換された値が出力されました。

ExcelVBA-Replace関数で置換した後の状態
スポンサーリンク

Replaceメソッドで文字を置換する(ループなし・範囲内を一括置換)

今度はReplaceメソッドを使用して置換する方法です。

▽マクロ実行前
 今度は置換前と置換後の文字はD列で指定しておき、変数を使用して置換します。

ExcelVBA-Replaceメソッドで置換する前の状態

▽VBAコードはこちら
置換前と置換後の文字列を格納する変数(beforeStr , afterStr)を用意しておきます。
 D列の値を変数に格納して、Replaceメソッドを使用してA2~A9までの範囲を置換します。

Range(“A2:A9”).Replace beforeStr, afterStr, xlPart
↑対象の範囲       ↑置換前  ↑置換後 ↑部分一致   

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列の部署名の「部」が「事業部」へ置換されました。

ExcelVBA-Replaceメソッドで置換した後の状態
スポンサーリンク

Replaceメソッド 部分一致・完全一致の使い分け方

引数のLookAtを指定して、部分一致で置換する場合と完全一致で置換する場合の例です。

▽マクロ実行前
 部署名にある「~営業部」の「営業部」を「営業Division」に置換したいケースを想定します。

ExcelVBA-Replaceメソッドで置換する前の状態-完全一致

▽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営業部」はそのまま残っています。

ExcelVBA-Replaceメソッドで置換した後の状態-完全一致

▽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」に置換されました。

ExcelVBA-Replaceメソッドで置換した後の状態-部分一致

このように部分一致か完全一致か、必要に応じて使い分けて使用します。

スポンサーリンク

Replaceを使用して特定の文字を消したい場合

Replaceの使用方法として、特定の文字を置き換えたい場合と、特定の文字を消したい場合があると思います。文字を置き換えたい場合は上記の書き方で置換したい文字を指定します。
特定の文字を消したい場合は置換後の文字列の部分を「””」で空白を指定して置換してください。

例:「部」を削除
   Replace(Range(“A1”), “部”, “”) 

スポンサーリンク

※コードのコピー利用について

・コードのコピーは自由におこなっていただけます。
・気を付けて作成はしていますがコードには誤りがある可能性があります。
・自身の環境で動作確認をしていますが、すべての方の環境で同様に動くことは保証できません。
・データの破損等の責任は負いかねますのでご自身の責任のもとお使いください。

タイトルとURLをコピーしました