和風スパゲティのレシピ

日本語でコーディングするExcelVBA

文字列を置換する - Replace関数

文字列を置換する、Replace関数の使い方を解説します。

基本構文

Replace(expression, find, replace,start],count],compare ])
Replace(元の文字列, 検索文字列, 置換後の文字列, 開始位置, 置換回数, 比較仕様)

[元の文字列]から[検索文字列]を探して[置換後の文字列]に置き換えます。

[start:開始位置]は注意が必要で、検索を開始する位置という意味ではなく、
返り値を何文字目から始めるかという指定になります。

[count:置換回数]は発見文字列を何個まで置換するかを指定します。
「何個目を」ではなく「何個目まで」の指定のためご注意ください。

[compare:比較仕様]は以下の値を設定できます。

定数 説明
vbUseCompareOption -1 Option Compare の設定に準ずる
※ 指定のない場合はバイナリ比較
vbBinaryCompare 0 バイナリ比較(Aとaを異なる文字とする)
vbTextCompare 1 テキスト比較(Aとaを同じ文字とする)
vbDatabaseCompare 2 データベースに基づいて比較(Accessのみ)

サンプルコード

Dim 置換後の文字列 As String

' 文字列の置換や削除
置換後の文字列 = Replace("ああいいうう", "いい", "ええ") ' ああええうう
置換後の文字列 = Replace("ああいいうう", "いい", "") ' ああうう

' 開始位置は検索位置でなく「文字列の開始位置」のため注意
置換後の文字列 = Replace("ああいいうう", "いい", "ええ", 4) ' いうう
    ' ↑ 元の文字列の4文字目以降を返すようになる。実質Mid関数のような仕様

' 最初のひとつだけを置換する
置換後の文字列 = Replace("あいうあいう", "い", "", , 1) ' あうあいう

' 二つ目だけを置換 はできないため注意
置換後の文字列 = Replace("あいうあいうあいう", "い", "", , 2) ' あうあうあいう
    ' ↑ 引数countは「1個目から○個目までを置換」する仕様

' aとAを区別せずに置換
置換後の文字列 = Replace("ABC", "a", "", , ,vbTextCompare) ' BC

解説

Replace関数を使用することで、文字列を置換することができます。

第3引数まではシート関数「SUBSTITUTE」と同じ仕様の関数ですね。


SUBSTITUTEにはない設定として、start:開始位置, count:置換回数, compare:比較仕様を指定することが可能です。

count:置換回数はSUBSTITUTE関数に似た引数「置換対象」がありますが、

  • VBAのReplace関数[count]は「1個目からn個目まで」を置換
  • ExcelのSUBSTITUTE関数[置換対象]は「n個目」を置換

という違いがありますのでご注意ください。

セル範囲内のテキストを置換する

セル範囲の各セルのテキストを置換する場合は、
以下のコードを実行します。

Dim R As Long
For R = 2 To 100
    Cells(R, 1) = Replace(Cells(R, 1), "あああ", "いい")
Next

 
Replace関数は「文字列を受け取って文字列を返す」関数なので、
セル範囲に実行する場合は「セル値 = Replace(セル値)」というコードを、
For文などのループを使って対応します。


ただし、置換を行うVBAの機能としては、
RangeオブジェクトのReplaceメソッドを使う方法もあります。

Range("A2:A100").Replace "あああ", "いい"

 
こちらはループを書かなくていい分コードがスッキリしますね。

ただし、直前でユーザーが使った置換ダイアログの影響を受けるなど、
Replaceメソッドにもデメリットがいくつかあります。


状況に応じて使い分けてください。

詳しくはこちらをどうぞ。
www.limecode.jp