つれづれ電脳記(日くらしPCに向かひて)

つれづれなるままに、日くらしPCに向かひて、その悪戦苦闘ぶりをそこはかとなく書き付くるおじさん。たまに雑談[管理人:goosyun]

つれづれなるままに、日くらしPCに向かひて、デジタル関係の悪戦苦闘ぶりをそこはかとなく書き付くるおじさんです。
たまに雑談してます。連絡・問い合わせフォームは、ページ最下部に置いています。[著者(運営人):goosyun]

(当ブログには本文中に広告リンクが含まれています。)

Wordマクロの単純な置換にはwdReplaceAll

 先日の記事において、
  文書中の金額表示をすべて赤色文字に変換するWordマクロを紹介しました。
 
 「金額赤色変換マクロ」の記事は、
   ⇒ こちらをご覧ください。
   
 先日の記事にも掲載していますが、マクロコードは次のとおりです。

Sub Kingaku()

Dim myR As Range
Set myR = ActiveDocument.Range(0, 0)

With myR.Find
  .Text = "[0-9,]{1,}円"
  .MatchWildcards = True
  Do While .Execute
   myR.Font.Color = vbRed
   myR.Collapse wdCollapseEnd
  Loop
End With

End Sub




 
 このコードでも、何ら問題はありません。
 ただ、このコードを改めて眺めていたら、少しですが、簡略化できることに気づきました。
 
 「Do While ~Loop」の箇所です。
 このDo構文は、条件が真の間、ループ内の処理を繰り返します。VBAの基本構文です。
 
 文書先頭から一つづつ検索して、検索される都度、複雑な処理を実行するならば、この構文で対処します。
 ですが、検索箇所のすべてに同一の置換処理をするだけであれば、「Do While ~Loop」構文までは不要です。単純置換ならば、コード1行で済みます。

 FindのExecuteメソッドの名前付き引数「Replace」に、wdReplaceAllを設定するのです。
   .Execute Replace:=wdReplaceAll 
と、これだけでOKです。この1行だけで、検索された箇所のすべてが、一括置換されます。
 こちらの書き方の方が、一般的と思われます。

 念のため、その方式で書き換えたコードの全文を掲載しておきます。
 
Sub Kingaku()

Dim myR As Range
Set myR = ActiveDocument.Range(0, 0)

With myR.Find
  .Text = "[0-9,]{1,}円"
  .MatchWildcards = True
  .Replacement.Font.Color = vbRed
  .Execute Replace:=wdReplaceAll
End With

End Sub

 Wordマクロによる置換処理に関しては、もう少し、記事にして紹介したいことがあります。
 よって、この続編を構想中です。


 
 
それでは、また次の記事で
goosyun