【VBA】Replaceメソッドは書式置換しないので注意
投稿日: 2010/10/18 更新日: 2017/11/04
VBA Excel
セルの値を置換する場合、色々な方法があります。
例えば、
- Replace関数を使う
- Replaceメソッドを使う
- Replaceワークシート関数を使う
などが挙げられます。
その中のReplaceメソッドについて、押さえておきたい点を紹介します。
Replaceメソッドとは、Rangeオブジェクトのメンバで、セルの値を置換することができるメソッドです。
このメソッドは、親のオブジェクト(指定したセル)に対して置換を行ってくれるので、 『全置換が楽に実装できる』、『For文でセルを回すより処理速度が早い』というメリットがあります。
しかし、置換を行うのはあくまで セルの値 であり、
『書式の置換まではやってくれない』のです。
以下に、例を示します。
■ 図1
■ サンプルソース1
Sub Replaceのテスト()
Range("A1").Replace What:="青", Replacement:="緑", LookAt:=xlPart, _
MatchCase:=False, MatchByte:=False
End Sub
セル[A1]の値を、「青」から「緑」に置換するサンプルです。
これを実行すると、図2になります。
■ 図2
なんということでしょう。
信号機の色がすべて「黒」になってしまいました(笑)
とまぁ、冗談はおいといて、
本来やりたかったことは、「赤」「黄」「青」のフォントカラーを残しつつ、
「青」を「緑」に置換ですよね。
これは、Replaceメソッドの仕様によるもので、
『実行後のフォントは、すべて一文字目のフォントとする』
試しに、一文字目のフォントカラーだけを紫色にしてみてください。すべて紫色になるはずです。
試しに、一文字目のフォントだけを行書体にしてみてください。すべて行書体になるはずです。
試しに、一文字目のフォントサイズだけを36にしてみてください。すべて36になるはずです。
セルの一部のフォントを変えているシートに対しては、Replaceメソッドは不向きである。
ということが言えそうです。
以上のことを解消するには、フォントの状態を保持しておくのが良さそうです。
具体的な方法については次回で紹介しますのでご覧になってください。