更新日:、 作成日:
VBA 文字列を置換する
はじめに
Excel VBA マクロで文字列 (String) を置換や削除する方法を紹介します。
「Replace 関数」から、文字列を置換できます。
検索文字に vbCrLf や vbLf を指定して、改行を置換できます。
置換文字に空文字 "" を指定して、検索文字を削除できます。
位置を指定したり、置換回数を指定できます。
先頭や末尾の文字を削除するには「文字列を抽出する」をご覧ください。
文字列を置換する
「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 を _ に置換する
詳しくは「セルを置換する」をご覧ください。