Excel VBAの「Replace 関数」について解説します。
Replace関数とは
Excel VBA の Replace 関数とは、対象の文字列内にある指定文字列を別の文字列に置き換えた文字列を返す関数です。
対象文字列内のどの位置から検索開始するのかを指定することができ、置換回数も指定することができます。
※ 既定の検索開始位置は先頭です。位置を指定した場合の戻り値は開始位置からの文字列が返ります。
Replace 関数(Visual Basic for Applications リファレンス)
構文(引数と戻り値)
Excel VBAの関数を使いこなすには、関数の構文を正しく理解しておくことが重要です。
構文
Replace(expression, find, replace[, start[, count[, compare]]])
引数
引数 | 説明 |
---|---|
expression | 【必須】置換対象を含む文字列(式)を指定します |
find | 【必須】検索する文字列を指定します |
replace | 【必須】置換する文字列を指定します |
start | 【省略可能】検索開始位置を指定します(既定値1) |
count | 【省略可能】置換する個数を指定します(既定値-1) ※ 省略時の規定値 -1 はすべてを置換します |
compare | 【省略可能】比較モードを指定します(既定値0) |
[compare] 比較モード
定数 | 値 | 説明 |
---|---|---|
vbBinaryCompare | 0 | バイナリモードで比較します。省略時はこのモードです。 大/小文字、全/半角、ひらがな/カタカナを区別します。 |
vbTextCompare | 1 | テキストモードで比較します。 大/小文字、全/半角、ひらがな/カタカナを区別しません。 |
※ vbUseCompareOption(-1)と vbDatabaseCompare(2)という設定もありますが、まず使用することは無いと思いますので説明を省略しています。
戻り値
戻り値 | 説明 |
---|---|
文字列 | start から末尾までの置換が行われた文字列が返ります ※ start 未指定(または1)の場合はすべての文字列が返ります |
※ find の文字列が見つからない場合は expression がそのまま返されます。
※ count 指定が 0 の場合は expression がそのまま返されます。
解説(使用例)
簡単なサンプルコードを作成して使用例を解説していきます。
Replace関数 サンプル
サンプルは、使用する引数を必須と省略可能に分けて順番に見ていきましょう。
必須な引数(expression, find, replace)だけ指定する例
必須の引数(expression,find,replace)だけ指定する例 と 比較モード(compare) の挙動も確認します。
Sub Replace_Sample01()
Dim str As String
'必須の引数(expression,find,replace)だけ指定する
str = Replace("kurumico", "o", "o.com")
Debug.Print (str) 'kurumico.com
'replaceに""指定で検索文字を削除する
str = Replace(str, ".COM", "") '大文字
Debug.Print (str) 'kurumico.com
'既定バイナリモードは文字種相違は置換できない
str = Replace(str, ".com", "") '小文字
Debug.Print (str) 'kurumico
'テキストモードの比較なら文字種は区別しない
str = Replace(str, "O", "o.com", , , 1)
Debug.Print (str) 'kurumico.com
End Sub
実行結果の イミディエイト 画像がこちらです。
・5行目、str = Replace(“kurumico”, “o”, “o.com”) の記述内容は、文字列 “kurumico” から “o” を探して “o.com” に置き換えて返すという意味です。戻り値は、”kurumico.com” になりました。
・9行目、”kurumico.com” から “.COM” を探して削除して返すという意味です。しかし、既定のバイナリモードでは文字種が相違(大文字と小文字)しているので、置換されず “kurumico.com” のまま返されました。
・13行目、”kurumico.com” から “.com” を探して削除して返すという意味です。今度は文字種が同一の小文字なので “.com” は削除されて “kurumico” が返りました。
・17行目、”kurumico” から末尾の “O”(全角大文字)を探して “o.com” に書き換えて返すという意味です。比較モードをテキストモード(1) に設定しているので文字種相違でも “kurumico.com” が返りました。
任意の引数(start, count, compare)設定を確認する
次のサンプルコードで、任意の引数を設定して動作を確認してみましょう
Sub Replace_Sample02()
Dim str As String, rs As String
str = "000-0000-0000"
'count指定で置換回数を指定する
rs = Replace(str, "-", "", , 1) '先頭から1回置換
Debug.Print (rs) '0000000-0000
'start で位置を指定する
rs = Replace(str, "0", "1", 5, 4) '5文字目から4回置換
Debug.Print (rs) '1111-0000
'compareがテキストモードなら文字種は区別しない
rs = Replace(str, "000", "999", , , 1)
Debug.Print (rs) '999-9990-9990
End Sub
実行結果のイミディエイト画像です。
・2行目、expression 用と戻り値用の文字列変数を用意しています。
・3行目、expression 用変数に “000-0000-0000” をセットしています。
・6行目、”000-0000-0000″ の “-” を “” に先頭から1回置き換える設定です。戻り値は “0000000-0000” 最初の “-” だけ削除されました。
・10行目、”000-0000-0000″ の “0” を “1” に5文字目から4回置き換える設定です。戻り値は指定どおり “1111-0000” が返りました。5文字目からなので最初の4文字は消えた値です。
・14行目、テキストモードで全角数字 “000” を “999” に置き換える設定です。戻り値は “999-9990-9990” とゼロが3つ並んでいる部分が “999” に置き換わりました。
セルのデータを書き換える
セル内の文字列からスペースを削除するサンプル
Sub Replace_Sample03()
Dim i As Long
For i = 2 To 10
Cells(i, 5) = Replace(Cells(i, 1), " ", "", , , 1)
Next
End Sub
実行後のシート画像です。
A列の各セルに入力された文字列データからスペースを削除してE列に書き込んでいます。
書き込み先のセルを元のA列にすれば、元データを直接書き換えることになります。
おわりに
VBAの関数一覧はこちらです。
VBAサンプルファイルダウンロードページのご案内
このページで使用したサンプルファイルの登録はありません(^^;
ページ内のコードをコピーしてご利用ください。
ダウンロードページへのリンクは下のカードクリックでジャンプできます。
よろしければご利用ください!
Excel VBA「Replace 関数」で対象文字列内の指定文字列を別の文字列に置き換える方法について解説しました。
スペース(空白文字)の削除については「Trim 関数」や「LTrim 関数」「RTrim 関数」もありますので、状況に応じて使い分けましょう。
以上、この解説が少しでもみなさまのお役に立てたなら幸いです(^^;