HOME > 即効テクニック > Excel VBA > セル操作関連のテクニック > セルの内容を置き換える(Replaceメソッド)

即効テクニック

セル操作関連のテクニック

セルの内容を置き換える(Replaceメソッド)

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