更新日:、 作成日:

VBA 文字列を置換する

はじめに

Excel VBA マクロで文字列 (String) を置換や削除する方法を紹介します。

Replace 関数」から、文字列を置換できます。

検索文字に vbCrLfvbLf を指定して、改行を置換できます。

置換文字に空文字 "" を指定して、検索文字を削除できます。

位置を指定したり、置換回数を指定できます。

先頭や末尾の文字を削除するには「文字列を抽出する」をご覧ください。

文字列を置換する

Replace 関数」を使用して、文字列を置換できます。

引数には (文字列, 検索文字, 置換文字) を指定します。

Dim s As String
s = Replace("123456789", "456", "あ") ' 456 を あ に置換する
Debug.Print(s) ' 123あ789
Dim s As String
s = Range("A1").Value    ' Abc、セルの値を取得
s = Replace(s, "A", "a") ' A を a に置換する
Debug.Print(s) ' abc

文字や改行を削除

検索文字に vbCrLf 定数を指定すると、改行を置換できます。

検索文字に vbLf 定数を指定すると、セル内の改行を置換できます。

置換文字に空文字 "" を指定すると削除できます。

Dim s As String
s = Replace("123456789", "456", "") ' 456 を削除する
Debug.Print(s) ' 123789

s = Replace("一行目" & vbCrLf & "二行目", vbCrLf, "") ' 改行 を削除する
Debug.Print(s) ' 123789

s = Replace(Range("A1").Value, vbLf, "") ' セル内の改行 を削除する
Debug.Print(s)

位置を指定

第 4 引数で、置換を開始する位置を指定できます。最初の位置は 1 からスタートします。置換開始位置の前の文字は削除されます。

Dim 置換後 As String
置換後 = Replace("001122", "1", "5", 4) ' 4 文字目から置換する
Debug.Print(置換後) ' 522

置換位置より前の文字を削除したくないときは「Left 関数」を使用します。

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

回数を指定

第 5 引数で、置換する回数を指定できます。すべて置換するには -1 を指定します。

Dim s As String
s = Replace("00000", "0", "1", 1, 2)  ' 0 を 1 に 2 回置換する
Debug.Print(s) ' 11000

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

大文字と小文字を区別

第 6 引数で、「大文字と小文字」、「半角と全角」、「ひらがなとカタカナ」を区別するか指定できます。

  • vbBinaryCompare (既定):区別する
  • vbTextCompare:区別しない
Dim s As String
s = Replace("abcABC", "abc", "123", 1, -1, vbBinaryCompare) ' 区別する
Debug.Print(s) ' 123ABC

s = Replace("abcABC", "abc", "123", 1, -1, vbTextCompare)   ' 区別しない
Debug.Print(s) ' 123123

セルの値を置換する

Range.Replace メソッドから、セルの値や書式を置換できます。

セルの範囲「A1」~「A2」の B_ に置換するには Range("A1:A2").Replace("B", "_") を入力します。

Call Range("A1:A2").Replace("B", "_") ' B を _ に置換する
Call Range("A1:A2").Replace("B", "_", xlPart, xlByRows, False, False, False, False, False) ' B を _ に置換する
詳しくは「セルを置換する」をご覧ください。