VBA Replace 文字列を置換する

VBAのReplace関数で、文字列を置換するサンプルです。Excel、Accessとも同じです。

目次

サンプル Replace関数とは
  全ての文字を置換する
  一部文字を置換する
  指定した文字や空白を削除する
  正規表現で文字を置き換える

Replace関数とは

Replace(1.文字列,2.置換前の文字,3.置換後の文字,[4.開始位置,[5.置換の回数,[6.比較の種類]])
  • 1つ目の文字列に対して、2つ目の引数の文にマッチした文字を、3つ目の引数の文字に置換えます。
  • 4つ目以降の引数は省略可能です。
  • 4の開始位置を省略した場合は1になります。
  • 5の置換の回数を省略した場合は、-1になります。-1はすべて置換します。
  • 以下は、MicrosoftのReplace関数のリンクです。
    https://docs.microsoft.com/ja-jp/office/vba/language/reference/user-interface-help/replace-function

全ての文字を置換する

Sub test1()
    Dim str1, str2 As String
    str1 = "あああーあああ"
    
    str2 = Replace(str1, "あ", "A")
    Debug.Print str2 'AAAーAAA
End Sub

5行目のReplace関数は、2つめの文字を3つ目の文字で全て置き換えます。

一部の文字を置換する

4つめの引数は開始位置で、5つめの引数は置換する回数です。

Sub test1()
    Dim str1, str2 As String
    str1 = "あああーあああ"
    
    str2 = Replace(str1, "あ", "A", 1, 1)
    Debug.Print str2 'Aああーあああ
    
    str2 = Replace(str1, "あ", "A", 1, 2)
    Debug.Print str2 'AAあーあああ
    
    str2 = Replace(str1, "あ", "A", 2, 1)
    Debug.Print str2 'Aあーあああ
    
    str2 = Replace(str1, "あ", "A", 2, 2)
    Debug.Print str2 'AAーあああ
End Sub

 

指定した文字や空白を削除する

Replaceの2つめの引数に空文字を指定することで文字の削除に使用できます。

Sub test1()
    Dim str1, str2 As String
    ' 指定の文字(う)を削除する
    str1 = "あいうえお"
    str2 = Replace(str1, "う", "")
    Debug.Print str2 'あいえお
    
    ' 半角空白を削除する(△あ△い△う△ +1△△)
    str1 = " あ い う +1  "
    str2 = Replace(str1, " ", "")
    Debug.Print str2 'あいう+1
End Sub

 

正規表現で文字を置き換える

正規表現を行う場合は3行目のようにVBScript.RegExpオブジェクトを生成します。

Sub test1()
    Dim reg1 As Object
    Set reg1 = CreateObject("VBScript.RegExp")
    Dim str1, str2 As String
    
    str1 = "あいうーあいう"
    
    With reg1
        .Pattern = "[あう]"      '正規表現 「あ」または「う」
        .IgnoreCase = False     '大文字と小文字を区別しない(False)
        .Global = True          '文字全体を検索する(True)
    End With
    
    str2 = reg1.Replace(str1, "a") '「あ」または「う」をaに置換
    Debug.Print str2 'aいaーaいa
    
    ' 2つめのサンプル-------------
    str1 = "--12345--"
        
    With reg1
        .Pattern = "[0-9]{5}"   '正規表現 0から9の5桁
    End With
    
    str2 = reg1.Replace(str1, "*****") '数値5桁を*に置換
    Debug.Print str2 '--*****--
    
    ' 3つめのサンプル-------------
    str1 = "--123451--" '数値が6桁
        
    With reg1
        .Pattern = "[0-9]{5}"   '正規表現 0から9の5桁
    End With
    
    str2 = reg1.Replace(str1, "*****") '数値5桁を*に置換
    Debug.Print str2 '--*****1--
    
    ' 4つめのサンプル-------------
    str1 = "--1234512345--" '2回マッチするので注意
        
    With reg1
        .Pattern = "[0-9]{5}"   '正規表現 0から9の5桁
    End With
    
    str2 = reg1.Replace(str1, "*****") '数値5桁を*に置換
    Debug.Print str2 '--**********--
End Sub

関連の記事

Excel VBA 文字列を切り出す(Left/Mid/Right)

△上に戻る