セルの文字列を置換するReplaceメソッド
Replaceメソッドはセルの文字列を別の文字列に置換します。
Excelの「検索と置換」ダイアログと同じ動作になります。
VBAの文字列の置換を処理を行うReplace関数については「VBAで文字列を別の文字列に置換する(Replace)」をご参照ください。
なお、Replaceメソッドを利用する際には注意点があります。
それはExcel上の検索と置換ダイアログの条件とVBAのFindメソッドの各引数の条件がお互い影響しあう特性がある点です。
簡単に言うと、VBAでReplaceメソッドを実行すると、そのときに設定した内容がExcel上での検索と置換ダイアログにも引き継がれてしまいます。詳細は後述しています。
構文
1 2 3 4 5 6 7 8 9 |
Function Range.Replace( What, Replacement, [LookAt], [SearchOrder], [MatchCase], [MatchByte], [SearchFormat], [ReplaceFormat]) As Boolean |
親オブジェクト | Rangeオブジェクトを指定します。
Excelの検索機能はシート全体が対象になりますが、同じようにする場合は「Cells」と指定します。 |
|||||||||
What | 検索したい文字列(置換前の文字列)を指定します。 | |||||||||
Replacement | 置換したい文字列(置換後の文字列)を指定します。 | |||||||||
LookAt (省略可) |
Whatで指定した値と完全一致するものを検索するかどうかをXlLookAt列挙型で指定します。
XlLookAt列挙型
省略時は前回検索時(Excelでの検索含む)の内容が設定されます。 |
|||||||||
SearchOrder (省略可) |
検索方向が行か列かをXlSearchOrder列挙型で指定します。
XlSearchOrder列挙型
省略時は前回検索時(Excelでの検索含む)の内容が設定されます。 |
|||||||||
MatchCase (省略可) |
大文字と小文字を区別するかを指定します。区別する場合はTrue、区別しない場合はFalseを指定します。
省略時は前回検索時(Excelでの検索含む)の内容が設定されます。 |
|||||||||
MatchByte (省略可) |
全角と半角を区別するかを指定します。区別する場合はTrue、区別しない場合はFalseを指定します。
省略時は前回検索時(Excelでの検索含む)の内容が設定されます。 |
|||||||||
SearchFormat (省略可) |
検索するセルの書式を指定します。書式を指定しない場合はFalseを指定します。 | |||||||||
ReplaceFormat (省略可) |
置換するセルの書式を指定します。書式を指定しない場合はFalseを指定します。 | |||||||||
戻り値Boolean | 常にTrueを返します。 |
一部引数の設定はExcelの検索と置換ダイアログにも影響する
Replaceメソッドの以下の各引数はReplaceメソッドを実行する度にその設定内容がExcelとVBAのどちらからも参照する内容として保存されます。
- LookAt(完全一致)
- SearchOrder(行、列)
- MatchCase(大文字、小文字)
- MatchByte(全角、半角)
そのため、Excel上での検索を行う際の「検索と置換」ダイアログにもVBAでのReplaceメソッドの設定内容が反映されます。
また逆に、Excel上での検索条件もVBAのReplaceメソッドに反映されるため引数省略時は前回の条件が適用されます。
検索条件を前回の条件に左右されたくない場合は、Replaceメソッドの上記引数は省略せずにきちんと設定するようにしてください。
数式の結果の値はReplace対象にはならない
セルには数式を入れて値を表示させることが可能ですが、Replaceメソッドはその数式は置換対象としますが数式の結果で表示されている内容は置換対象とはなりません。
例えばセルに数式で「=”a”&”b”&”c”」という”abc”を表示する設定がされているとします。
その場合、ReplaceメソッドのWhat引数に1文字”a”を指定すれば検索対象になりますが、数式の結果である”abc”と設定しても検索対象にはなりません。
どうしても置換したい場合は、数式の結果をセルのValue値として設定しなおすことで検索対象となります。
具体的にはReplaceメソッドの直前に、「ActiveCell.Value = ActiveCell.Value」として左辺の数式を右辺の数式結果として書き換えてしまう方法です。
この方法であれば置換は出来ますが、数式ではなくなる欠点があります。
なお、「Cell.Value = Cells.Value」のようなセル範囲が大きいコードを書くと、「メモリが不足しています」のエラーが出ることがあります。
サンプルコード
シートの全セル(Cells)から”aaa”という文字列を”bbb”に置換するサンプルです。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
Sub ReplaceTest() Dim bResult As Boolean bResult = Cells.Replace( _ What:="aaa", _ Replacement:="bbb", _ LookAt:=xlPart, _ SearchOrder:=xlByRows, _ MatchCase:=False, _ MatchByte:=False, _ SearchFormat:=False, _ ReplaceFormat:=False) End Sub |