パソコン悪戦苦闘記録

Wordマクロのワイルドカード置換は便利ぃ

 Word文書中のすべての金額の文字色を変えるVBAコードを、前に紹介、解説しました。
 文書中に記述されている、「○○○○円」という金額、つまり半角数字の並びの末尾に「円」が付いている文字列をすべて探し出して、赤色に変換する、というものです。これをマクロで実行するためのコードです。
 
 その記事は、
  こちらをご覧ください。
 
 今回は、文字の書式変更(例えば文字色変更)ではなく、別の文字への置換を紹介します。
 昨日(2022年2月22日)の記事と同じことをマクロで実行するにはどういうコードを書くか、「VBAマクロ版」となります。

 大事なことでもすぐに忘れっちまう、将来の自分への備忘録です。



 

 まず、そのVBAコードを掲載しておきます。

Sub enchikan()
Dim myR As Range
Set myR = ActiveDocument.Range(0, 0)
With myR.Find
  .Text = "([0-9,]{1,})円"
  .MatchWildcards = True
  .Replacement.Font.Color = vbRed
  .Replacement.Text = "¥¥1"
  .Execute Replace:=wdReplaceAll
End With
End Sub

 このマクロを実行すると、
  「○,○○○円」の文字列が、赤色着色すると同時に、
  「¥○,○○○」へと置換されます。
  金額の単位が、円表示から¥表示へ(「金額末尾の円」から「金額冒頭の¥」へ)と変わります。

 .Replacement.Text = "¥¥1" の部分では、円マークが2つ続いていますが、1文字目は全角文字、2文字目は半角文字とする必要があります(理由は、この記事の後ろの方に書いています。)。
 
 上記コード中の要点を解説します。
 
 検索文字列を、半角カッコ()」で囲むと、カッコ内が一塊(ひとかたまり)の集合体となり、式が生成されます。
 そして、その式は出現順に、1、2、3・・・と、式番号が付きます。
 その上で、置換後の文字列において、
  「¥」と式番号の組み合わせ(¥+式番号)
とすることで、式の結果を呼び出すことができます。

 上記コードにおいては、([0-9,]{1,})と、半角数字の羅列を半角カッコで囲んでいます。そうすると、カッコ内が1つの集合体(式)となり、順番に番号が付くから、置換後の文字列を「¥式番号(¥1)」と記述することで、式の結果が利用できています。
 おぉ、こりゃあ、便利だわぁ。
 
 なお、金額表示を漢字の「円」ではなく、円マーク(円記号)に置換する場合は、注意が必要です。
 置換後の文字が「全角」の円マークであれば、キーボード上の「¥」キーをタイプする、通常の入力方法で何ら問題がありません。
 ところが、「半角」の円マークへと置換したいというときは、すんなりとはいきません。キーボード上の半角の円マークをタイプする方法で入力して、そのマクロを実行しようとすると、「置換後の文字列に使用できない文字が使われています。」みたいなエラーメッセージが出て、怒られてしまいます。

 そこで、
  .Replacement.Text = "^92¥1"
とします。
 半角の円マークはワイルドカードなので、特殊記号を入力できる「^」(キャロット)を使います。これで対処できます。

 
 
それでは、また次の記事で
goosyun
名前:
コメント:

※文字化け等の原因になりますので顔文字の投稿はお控えください。

コメント利用規約に同意の上コメント投稿を行ってください。

 

  • Xでシェアする
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

最近の「VBAプログラミング・マクロ」カテゴリーもっと見る

最近の記事
バックナンバー
人気記事