これまでに、特許の和文明細書の段落番号の連番処理を2つ紹介しました。
今回は、フィールドを用いて連番処理をしてみます。
このマクロでできること
マクロの実行前
段落番号の直前にタブや全角スペースが挿入されています。何も挿入されていない場合もあります。
マクロの実行後
段落番号の直前に全角スペースが1つ挿入されています。番号が連続処理されました。
マクロの解説
フィールドコード
フィールドコードとして、以下の文字列を用います。
フィールドコードの一部を修正しました。(16-07-11)
\* MERGEFORMATはフィールドコードに自動的に挿入されるようです。
SEQ ParaJP \# "" 【0000】"" \* DBCHAR \* MERGEFORMATSEQ ParaJP \# "" 【0000】"" \* DBCHAR
これは読むのが少し難しいかも知れませんが、段落番号を全角で記述するようになっています。
また、段落番号の直前に全角スペースを1つ挿入するように書いてみました。
段落番号の検索
既存の段落番号部分を上記のフィールドコードで書き換えます。
既存の段落番号を探すためのワイルドカードの検索式は以下の通りです。
^13[ ^t【]{1,}[0-90-9]{4}
実はこれ、以前の記事「【Word】ゼロ文字以上の「スペース」を探すための検索式(1)」で紹介したことを応用しています。
段落番号の直前にスペースやタブが入る場合もあるし、何も入らない場合もあります。
そのようなときには、必ず入る文字列を含めて1文字以上を選ぶようにします。
今回は隅付き括弧「【」が必ず入りますので、【と全角スペースとタブのうち1つ以上の文字列という指定をします。以下の部分です。
[ ^t【]{1,}
少し難しいですが、使いながらなれてください。
マクロ
Sub 段落番号を連番_和文_フィールド() Dim myFind As String Dim myFieldCode As String Dim myRange As Range '------------------------------------------- '変数の設定 '------------------------------------------- myFind = "^13[ ^t【]{1,}[0-90-9]{4}】" 'myFieldCode = "SEQ ParaJP \# "" 【0000】"" \* DBCHAR \* MERGEFORMAT" myFieldCode = "SEQ ParaJP \# "" 【0000】"" \* DBCHAR" '16-07-11修正 '------------------------------------------- 'フィールドコードの入力 '------------------------------------------- Set myRange = ActiveDocument.Range(0, 0) With myRange.Find .Text = myFind .Forward = True .Wrap = wdFindStop .Format = False .MatchCase = False .MatchWholeWord = False .MatchByte = False .MatchAllWordForms = False .MatchSoundsLike = False .MatchFuzzy = False .MatchWildcards = True Do While .Execute = True '先頭の改行記号をmyRangeの範囲から除外 myRange.Start = myRange.Start + 1 'フィールドコードを入力 myRange.Fields.Add Range:=myRange, Text:=myFieldCode DoEvents Loop End With '------------------------------------------- '後処理 '------------------------------------------- 'フィールドの更新 ActiveDocument.Fields.Update DoEvents 'Rangeオブジェクトの解放 Set myRange = Nothing End Sub