Replace
Replace関数は指定した文字列内の全てまたは一部を別の文字列に置換することができます。
指定した文字列内に置換したい文字列が複数ある場合は、まとめて置換することもできます。
Replace関数は引数の内容が空文字列だったりしても、エラーにならずに人間が考えるような都合のよい解釈をした結果を返してくれます。
なお、Excel上での検索と置換ダイアログによる置換を行うReplaceメソッドについては「VBAでセルの置換を行う(Replaceメソッド)」にて紹介しています。
構文
1 2 3 4 5 6 7 8 |
Function Replace( Expression As String, Find As String, Replace As String, [Start As Long = 1], [Count As Long = -1], [Compare As VbCompareMethod = vbBinaryCompare]) As String |
Expression | 置換したい文字列を含む文字列を指定します。 | |||||||||
Find | 置換したい文字列を指定します。 | |||||||||
Replace | 置換後の文字列を指定します。 | |||||||||
Start (省略可) |
引数Expressionから引数Findの検索を開始する位置を指定します。
先頭は1です。省略時は1として処理されます。 |
|||||||||
Count (省略可) |
置換する個数を指定します。
検索して見つかる個所が複数ある場合に引数Countで指定した個数だけが置換されます。 -1を指定した場合は見つかった全ての個所が置換されます。省略時は-1として処理されます。 |
|||||||||
Compare (省略可) |
文字列を引数Findで検索する場合に、バイナリモードとテキストモードのどちらで検索するかをVbCompareMethod列挙型で指定します。
VbCompareMethod列挙型
省略時はバイナリモードで検索されます。 バイナリモードとテキストモードの違いは、大文字と小文字、全角と半角、ひらがなとカタカナを区別するかしないかです。 バイナリモードの場合は区別しますが、テキストモードの場合は区別しません。 |
|||||||||
戻り値 | 置換後の文字列を返します。
置換できなかった場合は元文字列がそのまま返されます。 |
エラーが発生するパターン
Replace関数は普通に使っている場合ではあまりエラーにならないのですが、それでも以下の条件の場合はエラーになります。
- 引数Expressionの元文字列がNullの場合
- 引数Startが0以下(0もエラー)
- 引数Countが-1未満(-1はOK)
ただ、上記のいずれも、普通に使っている場合にはあまり遭遇することは無いと思われます。
エラーチェックが必要な場合は以下のような感じでIsNull関数や値判定を使ってReplace関数処理を回避するなどで対応してください。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
Sub ReplaceNullTest() Dim s Dim sExpression Dim iStart Dim iCount sExpression = Null iStart = 0 iCount = -2 If (IsNull(sExpression) = True) Then Exit Sub End If If iStart <= 0 Then Exit Sub End If If iCount < -1 Then Exit Sub End If s = Replace(sExpression, "a", "A", iStart, iCount) End Sub |
サンプルコード
各引数が未設定の場合などを含めたサンプルコードです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
Sub ReplaceFTest() Dim s '// abcをABCに置換 s = Replace("abc abc", "abc", "ABC") '// "ABC ABC"を返す '// 元文字列が未設定 s = Replace("", "abc", "ABC") '// 元文字列""を返す '// 検索文字列が未設定 s = Replace("abc abc", "", "ABC") '// 元文字列"abc abc"を返す '// 置換後文字列が未設定 s = Replace("abc abc", "abc", "") '// 削除後の" "を返す '// 文字列長よりも検索開始位置が大きい s = Replace("abc abc", "abc", "ABC", 100) '// ""を返す '// 置換個数が0 s = Replace("abc abc", "abc", "ABC", 1, 0) '// 元文字列"abc abc"を返す End Sub |