Replace関数は文字列を置換する関数です。
標記を統一させたい時などに使用します。
Replace関数の構文
Replace(String, Find, Replace)
Replace(文字列, 検索する文字列, 置換する文字列)
[]内は省略可能です。
Replace(String, Find, Replace, [ start, count, compare])
Replace(文字列, 検索する文字列, 置換する文字列, [ 置換する開始位置 , 置換する回数 , 比較方法 ])
Replace関数の使用例
・Replace関数内に文字列を直接設定
・文字列に検索する文字列が無い場合
・Replace関数内の文字列が空白の場合
・Replace関数内の検索する文字列が空白の場合
・Replace関数内の置換する文字列が空白の場合
・Replace関数で置換する開始位置を設定
・Replace関数で置換する回数を設定
・Replace関数で比較方法を設定
・文字列を変数に設定
・セルから文字列を取得してセルに設定
・繰り返し処理(検索する文字列)
・繰り返し処理(文字列、検索する文字列)
・繰り返し処理(文字列、検索する文字列、置換する文字列)
の内容で説明していきます。
Replace関数内に文字列を直接設定
Sub Replace1()
MsgBox Replace("acbcdcec", "c", "f")
End Sub

“c”が”f”に置換されました。
文字列に検索する文字列が無い場合
Sub Replace2()
MsgBox Replace("acbcdcec", "k", "f")
End Sub

文字列内にkがないのでそのまま表示されます。
Replace関数内の文字列が空白の場合
Sub Replace3()
MsgBox Replace("", "c", "f")
End Sub

文字列が空白なので表示されません。
Replace関数内の検索する文字列が空白の場合
Sub Replace4()
MsgBox Replace("acbcdcec", "", "f")
End Sub

検索する文字列がないためそのまま表示されます。
Replace関数内の置換する文字列が空白の場合
Sub Replace5()
MsgBox Replace("acbcdcec", "c", "")
End Sub

置換する文字を空白に設定しているため”c”が空白になり”abde”が表示されます。
Replace関数で置換する開始位置を設定
Sub Replace6()
MsgBox Replace("acbcdcec", "c", "f", 2)
End Sub

開始位置を2文字目に設定したため先頭の”a”が表示されません。
開始位置を省略した場合は先頭から表示されます。
Replace関数で置換する回数を設定
Sub Replace8()
MsgBox Replace("acbcdcec", "c", "f", , 3)
End Sub

置換する回数を3回に設定したため、末尾の”c”が4回目になるので”c”が置換されません。
置換する回数を設定しない場合は、文字列のすべての候補を置換します。
Replace関数で比較方法を設定
Sub Replace9()
MsgBox Replace("cCcC", "c", "f", , , 0)
End Sub

比較方法を0に設定した場合、先頭の”c”だけが”f”に置換されました。
Sub Replace10()
MsgBox Replace("cCcC", "c", "f", , , 1)
End Sub

比較方法を1に設定した場合、すべて”f”に置換されました。
比較方法が0の場合は大小半角全角文字を判定します。
比較方法が1の場合は大小半角全角文字を判定しません。
比較方法を省略した場合は0が設定されます。
Sub Replace11()
MsgBox Replace("cCcC", "c", "f", , , vbBinaryCompare)
End Sub

Sub Replace12()
MsgBox Replace("cCcC", "c", "f", , , vbTextCompare)
End Sub

比較方法の設定が0と1ではなく、vbBinaryCompareとvbTextCompareの記載も可能です。
問題1
以下の内容を実行したときにメッセージボックスに表示される内容はどの様になりますか。
Sub Replace13()
MsgBox Replace("acbcdcecgc", "c", "f", 3, 3)
End Sub
問題2
以下の内容を実行したときにメッセージボックスに表示される内容はどの様になりますか。
Sub Replace14()
MsgBox Replace("acbcCcCdce", "c", "f", 2, 3, 1)
End Sub
問題1の答え

Replace(“acbcdce”, “c”, “f”, 2, 3)
開始位置が3、置換回数が3のため、先頭の”ac”が表示されず、末尾の”c”が4回目のため置換されていません。
問題2の答え

Replace(“acbcCcCdce”, “c”, “f”, 2, 3, 1)
開始位置が2、置換する回数が3、比較方法が1のため、先頭の”a”が表示されず、置換する回数が3回なので大文字の”C”まで”f”に置換されます。
文字列を変数に設定
Sub Replace15()
Dim str, find, rep As String
str = "あいうえお"
find = "い"
rep = "か"
MsgBox Replace(str, find, rep)
End Sub

“い”が”か”に置換されています。
セルから文字列を取得してセルに設定

Sub Replace16()
Dim str, find, rep As String
str = Cells(2, 2)
find = Cells(2, 3)
rep = Cells(2, 4)
Cells(2, 5) = Replace(str, find, rep)
End Sub

“い”が”か”に置換されました。
繰り返し処理(検索する文字列)

Sub Replace17()
Dim str, rep As String
Dim find() As String
Dim i, retuNum As Integer
str = Cells(2, 2)
rep = Cells(2, 4)
'検索する文字列の列番号を設定します
retuNum = 3
'検索する文字列のリストを設定します
find() = リストの設定(retuNum)
i = 1
'文字列の置換をリスト分繰り返します
For Each Var In find
str = Replace(str, find(i - 1), rep)
i = i + 1
Next
Cells(2, 5) = str
End Sub
今回はFunctionを使用しています。
Functionの内容は検索のリストを作成して返却しています。
Function リストの設定(ByVal retuNum As Integer) As String()
Dim list() As String
Dim i As Integer
Dim kazu As Long
kazu = Cells(1000, retuNum).End(xlUp).Row
ReDim list(kazu - 2)
For i = 2 To kazu
list(i - 2) = Cells(i, retuNum)
Next i
リストの設定 = list()
End Function

複数の記号がすべて”-“に変換されました。
繰り返し処理(文字列、検索する文字列)

Sub Replace18()
Dim rep As String
Dim str() As String
Dim find() As String
Dim i, j, retuNum As Integer
rep = Cells(2, 4)
'文字列の列番号を設定します
retuNum = 2
'検索する文字列のリストを設定します
str() = リストの設定(retuNum)
'検索する文字列の列番号を設定します
retuNum = 3
'検索する文字列のリストを設定します
find() = リストの設定(retuNum)
i = 1
'文字列をリスト分繰り返します
For Each Var In str
j = 1
'文字列の置換をリスト分繰り返します
For Each Var2 In find
str(i - 1) = Replace(str(i - 1), find(j - 1), rep)
j = j + 1
Next
Cells(i + 1, 5) = str(i - 1)
i = i + 1
Next
End Sub
Functionは文字列のリストと検索のリストの内容を返却しています。
Function リストの設定(ByVal retuNum As Integer) As String()
Dim list() As String
Dim i As Integer
Dim kazu As Long
kazu = Cells(1000, retuNum).End(xlUp).Row
ReDim list(kazu - 2)
For i = 2 To kazu
list(i - 2) = Cells(i, retuNum)
Next i
リストの設定 = list()
End Function

置換する文字列が1行毎に置換されました。
繰り返し処理(文字列、検索する文字列、置換する文字列)

検索文字と置換文字は#→a、%→b、$→c、!→d、”→e、&→fという内容で置換します。
Sub Replace19()
Dim str() As String
Dim find() As String
Dim rep() As String
Dim i, j, retuNum As Integer
'文字列の列番号を設定します
retuNum = 2
'検索する文字列のリストを設定します
str() = リストの設定(retuNum)
'検索する文字列の列番号を設定します
retuNum = 3
'検索する文字列のリストを設定します
find() = リストの設定(retuNum)
'置換する文字列の列番号を設定します
retuNum = 4
'置換する文字列のリストを設定します
rep() = リストの設定(retuNum)
i = 1
'文字列をリスト分繰り返します
For Each Var In str
j = 1
'文字列の置換をリスト分繰り返します
For Each Var2 In find
str(i - 1) = Replace(str(i - 1), find(j - 1), rep(j - 1))
j = j + 1
Next
Cells(i + 1, 5) = str(i - 1)
i = i + 1
Next
End Sub
Functionは文字列のリスト、検索のリストと置換のリストの内容を返却しています。
Function リストの設定(ByVal retuNum As Integer) As String()
Dim list() As String
Dim i As Integer
Dim kazu As Long
kazu = Cells(1000, retuNum).End(xlUp).Row
ReDim list(kazu - 2)
For i = 2 To kazu
list(i - 2) = Cells(i, retuNum)
Next i
リストの設定 = list()
End Function

それぞれ対応している文字が置換されました。
str(i – 1) = Replace(str(i – 1), find(j – 1), rep(j – 1))を
str(i – 1) = Replace(str(i – 1), find(j – 1), rep(j – 1), , , 1)に変更すれば大小全角半角を判定せずに置換されます。
今回はReplace関数について記載させて頂きました。
少しでも皆様の参考になれば幸いです。