即効テクニック |
セル範囲内の値として入力されている文字列、数式として入力されている文字列を対象に、指定した文字列を別の文字列に置き換えます。引数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が使用されていると、せっかく置き換えた内容をさらに置き換えてしまう、ということがありますので注意してください。