セル範囲内の値として入力されている文字列、数式として入力されている文字列を対象に、指定した文字列を別の文字列に置き換えます。引数LookAt, SearchOrder, MatchCase, MatchByteで指定する内容は、Findメソッドと同じ内容ですのでペアで理解しておくと良いでしょう。
構文 Object.Replace(What, Replacement, LookAt, SearchOrder, MatchCase,
MatchByte)
設定項目 内容
Object Rangeオブジェクト
What 検索するデータを指定します [省略不可]
Replacement 検索したデータを置き換える文字列を指定します [省略不可]
LookAt 完全に同一なセルだけを検索(xlWhole)、
一部分でも一致するセルの検索(xlPart)[省略可能]
SeachOrder 検索方向を指定します。列方向に検索する(xlByColumns)、
行方向に検索する(xlByRows)[省略可能]
MatchCase 大文字と小文字を区別する(True)、区別しない(False)[省略可能]
MatchByte 半角と全角を区別する(True)、区別しない(False)[省略可能]
次のサンプルは、セルに入力された数値を対応する文字列に置き換えます。
●サンプル1●
Sub ReplaceSamp1()
Range("A1:A6").Select'--置き換え対象範囲を選択します
With Selection '--複数回実行する場合 Withステートメントを使うと便利
.Replace What:=1, Replacement:="1:北海道", _
LookAt:=xlWhole '---完全に一致するものだけ置き換えます
.Replace What:=2, Replacement:="2:青森県" '-2回目以降はLookAtには
.Replace What:=3, Replacement:="3:秋田県" ' 前回と同じものが使用される
.Replace What:=4, Replacement:="4:岩手県" ' ため、省略が可能です
End With
End Sub
このようにあるコードを文字列に置き換える場合には、置き換えの数だけ処理を繰り返します。Findメソッドと同じく、引数LookAt, SearchOrder, MatchCase, MatchByteは前回使用した値が使用されるため、2回目以降の処理では省略が可能です。ただし、1回目の処理で省略した場合には、前回の別処理での条件がそのまま使われるため、意図した結果にならないことがあります。必要な引数の指定は絶対に省略しないでください。
なお、置き換え対象には数式を指定することも可能です。次のサンプルは、数式中のシート名を置き換えることで、シートの参照先を別シートの同アドレスのセルに変更します。
●サンプル2●
Sub ReplaceSamp2()
On Error Resume Next '----(1)
With ActiveSheet.UsedRange.SpecialCells(xlCellTypeFormulas)
.Replace What:="Sheet1!", Replacement:="Sheet2!", _
LookAt:=xlPart '---一部でも一致すれば置き換えます
End With
End Sub
(1)のステートメントでエラー処理を入れているのは、アクティブシートに数式の入力されたセルが1つもない場合に、Withステートメントがエラーとなるためです。
シート名に限らず、数式中の文字列は全て置き換えが可能ですので、例えば「シート中のSUM関数を全てAVERAGE関数に置き換える」といったことも可能です。
●注意●
LookAtにxPartを指定して「あいまい検索で置き換え」をn回行う場合、n回目までに引数Replacementに使用している文字列の中にn回目の引数Whatが使用されていると、せっかく置き換えた内容をさらに置き換えてしまう、ということがありますので注意してください。