文字列を置換する、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