【Word VBA】選択範囲内の半角数字を全て下付き文字にするWordマクロ

2013年10月21日

セミナーを受講された方から、数字を下付き文字に変更したいとのご要望をいただきました。

化学式を扱われているそうで、数字の一つ一つを手で選択して下付きにされていたそうです。

この手のことはマクロが得意です。お試しください。

このマクロでできること

選択範囲内にある半角数字を下付きにします。

文字列が選択されていない場合には、カーソル位置の単語を選択し、その単語内の半角数字を下付きにします。

マクロの解説

文字列が選択されているかどうかの判定は、Selection.Type プロパティ にて行います。

選択されていない場合には、カーソルが文字の入力個所(Insertion Point)に対応します。これが、wdSelectionIP というわけです。

If Selection.Type = wdSelectionIP Then と記載すれば、「文字が選択されていなければ」の意味になります。

Expand メソッドにて、選択範囲を拡大しています。

引数(ひきすう)にて設定しています。

今回の例では、単語単位で範囲を拡大しますので、wdWordとしています。

Expand メソッドがとる引数はUnitだけなので、Unitという記載自体を省略できます。

Selection.Expand wdWord

さらに、引数を何も設定しない場合には、デフォルト値が採用されます。

デフォルト値はwdWordなので、実は何も書かなくても単語が自動的に選択されます。

Selection.Expand

それ以降は、よくあるワイルドカードの置換です。

8行目と9行目で検索する文字列置換後の文字列の書式をクリアしています。

ポイントは、.Wrap = wdFindStop です。

この部分を、wdFindContinue としておくと、選択範囲内だけではなく、カーソルのあるストーリー全体に対して置換をしてしまいますので注意してください。→(ストーリー種別とは?

マクロ


Sub 半角数字を下付きにする()

 If Selection.Type = wdSelectionIP Then
  Selection.Expand Unit:=wdWord
 End If

 With Selection.Find
  .ClearFormatting
  .Replacement.ClearFormatting
  .Text = "([0-9]{1,})"
  .Replacement.Text = "\1"
  .Replacement.Font.Subscript = True
  .Forward = True
  .Wrap = wdFindStop
  .Format = True
  .MatchCase = False
  .MatchWholeWord = False
  .MatchByte = False
  .MatchAllWordForms = False
  .MatchSoundsLike = False
  .MatchFuzzy = False
  .MatchWildcards = True
  .Execute Replace:=wdReplaceAll
 End With
 
End Sub

関連記事

ワイルドカードの検索・置換

ストーリー種別とは?

-コード
-,