Replace関数の使い方と注意点
Replace関数は、文字列の中で検索文字列を置換文字列に置き換える関数です。
構文
Replace(文字列, 検索文字列, 置換文字列[, 開始位置[, 置換回数[, 比較方法]]])
- 文字列 : 置換処理を行う文字列
- 検索文字列 : 検索する文字列
- 置換文字列 : 置換後の文字列
- 開始位置 : 出力開始位置(省略時は1:先頭から)
- 置換回数 : 置換回数(省略時は-1:全て)
- 比較方法 : 比較方法(省略時は0)0:バイナリ、1:テキスト
- 戻り値 : 置換後の文字列
一般的には開始位置と置換回数と比較方法を省略した形が良く使われます。
Replace( 文字列, 検索文字列, 置換文字列)
使用例
開始位置と置換回数と比較方法を省略した場合
こちらの例ではExcel
という文字列のE
をA
に置き換えています。
Sub Sample()
Dim mystring1 As String
mystring1 = "Abcd"
Debug.Print "半角英字 : " & Replace(mystring1, "c", "e")
Dim mystring2 As String
mystring2 = "Abcd"
Debug.Print "全角英字 : " & Replace(mystring2, "c", "e")
Dim mystring3 As String
mystring3 = "あいうえ"
Debug.Print "ひらがな : " & Replace(mystring3, "う", "お")
Dim mystring4 As String
mystring4 = "亜伊宇江"
Debug.Print "漢字 : " & Replace(mystring4, "宇", "御")
Dim mystring5 As String
mystring5 = "!?#/"
Debug.Print "半角記号 : " & Replace(mystring5, "#", "@")
Dim mystring6 As String
mystring6 = "!?#/"
Debug.Print "全角記号 : " & Replace(mystring6, "#", "@")
Dim mystring7 As String
mystring7 = "1234"
Debug.Print "半角数字 : " & Replace(mystring7, "3", "5")
Dim mystring8 As String
mystring8 = "1234"
Debug.Print "全角数字 : " & Replace(mystring8, "3", "5")
Dim mystring9 As String
mystring9 = "A b C" ' Aとbの間に半角スペース、bとcの間に全角スペース
Debug.Print "スペース : [" & Replace(mystring9, "b", "d") & "]"
End Sub
▶ 出力結果
半角英字 : Abed
全角英字 : Abed
ひらがな : あいおえ
漢字 : 亜伊御江
半角記号 : !?@/
全角記号 : !?@/
半角数字 : 1254
全角数字 : 1254
スペース : [A d C]
開始位置を指定する場合
こちらの例では"abc1abc2abc3abc4abc5
という文字列のa
をA
に置き換えています。
また開始位置に5
を指定しています。
Sub Sample()
Dim mystring As String
mystring = "abc1abc2abc3abc4abc5"
Debug.Print Replace(mystring, "a", "A", 5)
End Sub
▶ 出力結果
Abc2Abc3Abc4Abc5
開始位置が5
のため先頭のabc1
を含まず、以降の部分に対して置換が行われています。
置換回数を指定する場合
こちらの例ではa
をA
に置き換えることに加え、置換回数に2
を指定しています。
Sub Sample()
Dim mystring As String
mystring = "abc1abc2abc3abc4abc5"
Debug.Print Replace(mystring, "a", "A", , 2)
End Sub
▶ 出力結果
Abc1Abc2abc3abc4abc5
置換回数が2
のため1つ目と2つ目のa
のみ置換が行われています。
比較方法を指定する場合
比較方法の指定には0
,1
または、それぞれを表す定数
を使用します。
値 | 定数 | 内容 |
---|---|---|
0 | vbBinaryCompare | バイナリ比較 |
1 | vbTextCompare | テキスト比較 |
省略 | Option Compare の設定に従う |
バイナリ比較とテキスト比較
バイナリ比較とテキスト比較の違いは主に英字の大文字と小文字を区別するかにあります。
比較対象 | vbBinaryCompare | vbTextCompare |
---|---|---|
英字の大文字と小文字 | 区別する | 区別しない |
ひらがなとカタカナ | 区別する | 区別する |
全角と半角 | 区別する | 区別する |
Sub Sample()
Dim mystring As String
mystring = "abc1abc2abc3ABC4ABC5"
Debug.Print "バイナリ : " & Replace(mystring, "a", "X", , , 0)
Debug.Print "テキスト : " & Replace(mystring, "a", "X", , , 1)
End Sub
▶ 出力結果
バイナリ : Xbc1Xbc2Xbc3ABC4ABC5
テキスト : Xbc1Xbc2Xbc3XBC4XBC5
バイナリ比較が大文字小文字を区別するためa
のみX
と置換されるのに対し、
テキスト比較は大文字小文字を区別しないためa
とA
がX
と置換されます。
比較方法を省略した場合
比較方法を省略した場合、Option Compare
の設定に従います。(設定していない場合はバイナリ比較)
Option CompareにはText
またはBinary
をしていします。
例えば以下の例ではOption Compare
の設定をBinary
にしています。
Option Compare Binary
Sub Sample()
Dim mystring As String
mystring = "Excel"
Debug.Print Replace(mystring, "e", "a")
End Sub
▶ 出力結果
Replaceではバイナリ比較が行われるため、
1文字目のE
はヒットせず、4文字目のe
がヒットします。
Excal
また、Option Compare
を設定している場合でも、引数の入力により個別に比較方法を変えることもできます。
Option Compare Binary
Sub Sample()
Dim mystring As String
mystring = "Excel"
Debug.Print "Replace1 : " & Replace(mystring, "e", "a")
Debug.Print "Replace2 : " & Replace(mystring, "e", "a", , , 1)
End Sub
▶ 出力結果
Replace1 : Excal
Replace2 : axcal
⚠️注意
半角スペースと全角スペースは別物
Replace関数において半角スペースと全角スペースは別のものとして扱われます。
こちらの例では Excel
(先頭に半角スペース、末尾に全角スペース)という文字列に対し、
半角スペースまたは全角スペースを空文字にして出力するようにしています。
Sub Sample()
Dim mystring As String
mystring = " Excel "
Debug.Print "半角削除 : [" & Replace(mystring, " ", "") & "]" '置換文字列に半角スペース
Debug.Print "全角削除 : [" & Replace(mystring, " ", "") & "]" '置換文字列に全角スペース
End Sub
▶ 出力結果
半角削除 : [Excel ]
全角削除 : [ Excel]
どちらも対象のスペースのみが空文字に置換されています。
戻り値は文字列(String)型
Replace関数の戻り値は文字列型です。
Sub Sample()
Dim myinteger As Integer
myinteger = 12345
Debug.Print Replace(myinteger, "2", "6")
Debug.Print TypeName(Replace(myinteger, "2", "6")) ' Replace関数の戻り値の型を出力
End Sub
▶ 出力結果
16345
String
その他のVBA関数
【Excel VBA】VBAでよく使う関数一覧&基本の使い方