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
関連の記事