前回の記事「【コード】特許明細書の段落番号の直後に半角スペースを4つ挿入するWordマクロ(その1)」の続きです。
前回の記事の5個以上のスペースを4つにする処理を追加してみます。
<目次>
このマクロでできること
英文特許明細書の段落番号の後に半角スペースを4つ挿入します。4つ以外の場合には4つに揃えます。
実行前
実行後
マクロの解説
前回と同様、段落番号の直後にはもともと半角スペースが1つ挿入された原稿を対象にしています。段落番号の後に3つ挿入し、5つ以上の個所を4つに調整するというプロセスを踏んでいます。
単純なマクロなのですが、この作業が自動化できるとかなりうれしいですね。Wordの特殊文字の知識とマクロの記録でここまでできます。
前回のマクロを実行したときには、以下のような結果になりました。黄色で着色した個所を修正したいのです。半角スペースが5個~9個挿入されてしまっている箇所があります。これを修正します。
対応方法を[検索と置換]ダイアログボックスで考えます。単純に置換をすればいいだけなのです。
この書類を扱っている方は、どのような条件の置換をすればいいか判断できると思います。
単純に9個のスペースがあったらそれを4つにしてもいいかもしれません。ただ、文中に数式が書かれていて、その表示位置の調整に半角スペースを使っている場合があるかもしれません。
そのようなことも考えて、念を入れて半角各括弧の直後に半角スペースがある箇所に限定して置換をしてもいいでしょう。
自分でマクロを作る場合には、対象のい条件を深く考えすぎず、ちょうどいいくらいのところで条件を決めてを作ってしまえばいいと思います。うまくいかないときに対処しましょう。
なので、うまくいかない箇所があったらそれを見つけられるような仕組みも必要になります。(今回はとくに設けていませんが)
さて、以下の条件で置換をしてみます。アンダーバーは半角スペースを意味します。
検索する文字列:]_________ 置換後の文字列:]____
これをマクロの記録をすると、以下のコードを取得できます。
Sub 半角スペース9つを4つにする() ' ' 半角スペース9つを4つにする Macro ' ' 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 End Sub
これを8個の場合に4つ、7個の場合に4つ、、、、と記録をしていけば必要なコードを取得できます。なんとなくルールがわかった方は、上記の検索条件(.Text = の文字列)を変えるだけで編集したものを使えますね。
私はワイルドカードを理解する前は、今回のマクロのようにマクロの記録で作ったものをコピペしてたくさん貼り付けて実行していました。
なお、「4桁の段落番号の直後に半角スペースが9個ある箇所」を特定できればさらに精度が上がるのですが、このような検索の場合にはワイルドカードを使わないと置換ができないため、今回は検索条件にしませんでした。
上記の置換処理を、前回の記事で紹介した5個以上のスペースがある箇所を蛍光ペンで着色する判定処理の直前に挿入します。そうすれば、10個以上のスペースが連続していた場合には見つけられます。
マクロ
Sub 段落番号の直後に半角スペースを4つ挿入するWordマクロ2() 'カーソルを文書の先頭に移動 Selection.HomeKey Unit:=wdStory '半角スペースを3つ挿入する 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 '半角スペース9つを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 '半角スペース8つを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 '半角スペース7つを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 '半角スペース6つを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 '半角スペース5つを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 '半角スペースが5個以上個所を着色 Selection.Find.ClearFormatting Selection.Find.Replacement.ClearFormatting Selection.Find.Replacement.Highlight = True With Selection.Find .Text = "[^#^#^#^#] " .Replacement.Text = "" .Forward = True .Wrap = wdFindContinue .Format = True .MatchCase = False .MatchWholeWord = False .MatchByte = False .MatchAllWordForms = False .MatchSoundsLike = False .MatchWildcards = False .MatchFuzzy = False End With Selection.Find.Execute Replace:=wdReplaceAll End Sub
次にすること
長いマクロができましたが、短くできないかなと考えてみます。あと、原稿の記載によってはほかの問題も発生しそうです。
私が通常作るマクロ(このブログでも紹介しているものや、色deチェックなどのツールに組み込んであるもの)では、一括処理をした箇所は必ず蛍光ペンなどで着色をしています。そうしないと、処理結果の確認ができませんから。
今回のマクロでは、どこを変更したのかわからないのでちょっと怖いですよね。うまくいったときにはきれいにそろってうれしいのですが。
いろいろなことを想定して記事を続けたいと思います。
ワイルドカードを使えると簡単なんですけどね。最終的にはワイルドカードでどうするのか、というところに話を持っていこうと思っています。