前回の記事「【コード】特許明細書の段落番号の直後に半角スペースを4つ挿入するWordマクロ(その2)」の続きです。
まずは、前回の記事で想定しなかったことへの対処方法を紹介します。
実は、その1とその2の記事で両方とも、「段落番号の直後にはもともと半角スペースが1つ挿入されている」という前提にしています。なので、段落番号の後に3つ挿入し、5つ以上の個所を4つに調整しているのです。
ところが、実際の原稿では、段落番号の直後に半角スペースがない場合もときどきあります。なので、このあたりも想定してマクロを作ってみます。
簡単な話なのですが、上記では半角スペースを3つ挿入したのですが、4つ挿入してみます。そうすれば大丈夫ですね。
あと、前回のマクロでは余分なスペースを削除するのに何度も同じような処理をしたので、これをループで処理する仕組みも考えてみます。
<目次>
このマクロでできること
実行前
赤矢印のように半角スペースがない箇所があると想定します。
実行後
マクロの解説
余分なスペースを削除するためのループで処理する仕組みの解説です。
String 関数を使ってみましょう。マクロの記録をしたばかりの方にとっては聞いたことがない関数だと思います。こんな使い方もあるんだ、くらいに覚えておけばよいと思います。
これは指定した数だけ、指定した文字列を繰り返すという関数です。
String(数, 文字列)
たとえば、String(5, "A")とするとAAAAAの意味になります。
今回のように、削除対象のスペースの数を9から5まで調整する場合に、繰り返し回数をiとして9から5でループさせます(27行目~48行目)。
この時に、検索する文字列を
"]" & String(i, " ")
とするのです。つまり、「角括弧閉じ」の直後に半角スペースがi個続くという意味です。
これを、
"] "
で置換します。
9個続く場合からループさせて、5で終了します。その場合には、
For i = 9 To 5 Step -1
のようにStepを使います。
マクロ
Sub 段落番号の直後に半角スペースを4つ挿入するWordマクロ3() Dim i As Integer 'カーソルを文書の先頭に移動 Selection.HomeKey Unit:=wdStory '半角スペースを4つ挿入する Selection.Find.ClearFormatting Selection.Find.Replacement.ClearFormatting With Selection.Find .Text = "[^#^#^#^#]" .Replacement.Text = "^& " .Forward = True .Wrap = wdFindContinue .Format = False .MatchCase = False .MatchWholeWord = False .MatchByte = False .MatchAllWordForms = False .MatchSoundsLike = False .MatchWildcards = False .MatchFuzzy = False End With Selection.Find.Execute Replace:=wdReplaceAll For i = 9 To 5 Step -1 '9個~5個の半角スペースを4つにする Selection.Find.ClearFormatting Selection.Find.Replacement.ClearFormatting With Selection.Find .Text = "]" & String(i, " ") .Replacement.Text = "] " .Forward = True .Wrap = wdFindContinue .Format = False .MatchCase = False .MatchWholeWord = False .MatchByte = False .MatchAllWordForms = False .MatchSoundsLike = False .MatchWildcards = False .MatchFuzzy = False End With Selection.Find.Execute Replace:=wdReplaceAll Next End Sub