VBA Replace 関数:文字列を置換する

はじめに

Excel VBA マクロの Replace 関数から文字列を置換する方法を紹介します。

Replace 関数は、文字列を別の文字に置換します。

1231231_ に置換するなら _23_23 を返します。

大文字と小文字などを区別するか選択できます。

文字列の一部を置換や削除したいときに使用します。

文字列を置換するには「文字列を置換する」をご覧ください。
  • 目次
    • Replace 関数
    • 解説
    • 使用例

Replace 関数

Replace(文字列, 検索文字, 置換文字)
文字列検索文字置換文字に置換します。

Replace(文字列, 検索文字, 置換文字, 開始位置, 置換回数, 比較モード)
置換する開始位置を指定できます。複数の検索文字が見つかったときの置換回数を指定できます。比較モードで大文字と小文字を区別するか指定できます。

引数「文字列」置換元の文字列を指定します。
引数「検索文字」検索する文字列を指定します。
引数「置換文字」置換する文字列を指定します。
引数「開始位置」省略できます。何文字目から置換するか指定します。
引数「置換回数」省略できます。引数「検索文字」が複数見つかったときに、何個置換するか指定します。
引数「比較モード」省略できます。大文字と小文字を区別して検索するかを指定します。
戻り値の型文字列型 (String)

引数「比較モード」

単位 説明
vbBinaryCompare (既定)「大文字と小文字」、「半角と全角」、「ひらがなとカタカナ」を区別する。
vbTextCompare区別しない。

解説

引数「検索文字」が見つからないときは、引数「文字列」を返します。

引数「置換文字」が空文字 "" なら、引数「検索文字」を削除できます。

引数「開始位置」を省略すると 1 文字目から置換します。これは 1 を指定したときと同じです。

引数「開始位置」を指定すると、それより前の文字は削除されます。123456 のときに 3 なら 3456 から置換して返します。

開始位置より前の文字を残すには「Left 関数」を使用します。

引数「開始位置」が引数「文字列」の文字数を超えるときは、空文字 "" を返します。

引数「置換回数」を省略すると、すべての引数「検索文字」を置換します。これは -1 を指定したときと同じです。

セルの値を置換するには「セルを置換する」をご覧ください。

使用例

文字列を置換する。

Dim s As String
s = Replace("123123", "1", "_")
Debug.Print(s) ' _23_23

s = Replace("123123", "A", "_") ' 検索文字が見つからない
Debug.Print(s) ' 123123

s = Replace("123123", "1", "")  ' 検索文字を削除する
Debug.Print(s) ' 2323

s = Replace(" A B C ", " ", "", compare:=vbTextCompare) ' 半角と全角スペースを削除
Debug.Print(s) ' ABC

Dim 文字列 As String
文字列 = "一" & vbCrLf & "二"
s = Replace(文字列, vbCrLf, "") ' 改行を削除する
Debug.Print(s) ' 一二

文字列 = "一" & vbLf & "二"
s = Replace(文字列, vbLf, "")   ' セル内の改行を削除する
Debug.Print(s) ' 一二

位置を指定して置換する。

Left 関数」を使用して、置換位置より前の文字を残して置換できます。

Dim s As String
s = Replace("123456", "5", "_", 3) ' 3 文字目から置換する
Debug.Print(s) ' 34_6

s = Replace("001122", "1", "_", 4) ' 4 文字目から置換する
Debug.Print(s) ' _22

Dim 前の文字 As String
前の文字 = Left("001122", 3) ' 001、前の文字を取得する
Debug.Print(前の文字 & s)   ' 001_22、前の文字と置換後の文字を結合

置換回数を指定して置換する。

Dim s As String
s = Replace("00000", "0", "1", Count:=1)  ' 1 回置換する
Debug.Print(s) ' 10000

s = Replace("00000", "0", "1", Count:=2)  ' 2 回置換する
Debug.Print(s) ' 11000

s = Replace("00000", "0", "1", Count:=-1) ' すべて置換する
Debug.Print(s) ' 11111

大文字と小文字を区別しないで置換する。

Dim s As String
s = Replace("abcABC", "a", "_", compare:=vbBinaryCompare)        ' 区別する
Debug.Print(s) ' _bcABC

s = Replace("abcABC", "a", "_", compare:=vbTextCompare)          ' 区別しない
Debug.Print(s) ' _bc_BC

s = Replace("アイウアイウ", "ア", "_", compare:=vbBinaryCompare)    ' 区別する
Debug.Print(s) ' アイウ_イウ

s = Replace("アイウアイウ", "ア", "_", compare:=vbTextCompare)      ' 区別しない
Debug.Print(s) ' _イウ_イウ

s = Replace("あいうアイウ", "ア", "_", compare:=vbBinaryCompare) ' 区別する
Debug.Print(s) ' あいう_イウ

s = Replace("あいうアイウ", "ア", "_", compare:=vbTextCompare)   ' 区別しない
Debug.Print(s) ' _いう_イウ