【Word VBA】特許明細書の段落番号を連番にする(その3)

これまでに、特許の和文明細書の段落番号の連番処理を2つ紹介しました。

今回は、フィールドを用いて連番処理をしてみます。

このマクロでできること

マクロの実行前

段落番号の直前にタブや全角スペースが挿入されています。何も挿入されていない場合もあります。

16-07-0812

マクロの実行後

段落番号の直前に全角スペースが1つ挿入されています。番号が連続処理されました。

実行後

マクロの解説

フィールドコード

フィールドコードとして、以下の文字列を用います。

フィールドコードの一部を修正しました。(16-07-11)
\* MERGEFORMATはフィールドコードに自動的に挿入されるようです。

SEQ ParaJP \# "" 【0000】"" \* DBCHAR \* MERGEFORMAT
SEQ 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

トップへ戻る