【Word VBA】「段落番号」のある段落のアウトラインレベルを自動で設定するWordマクロ(2)

2011年1月21日

「段落番号」のある段落のアウトラインレベルを自動で設定するマクロ の続きです。

前回は、日本語の特許明細書における段落番号(【0001】など)を探して、その段落にアウトラインレベルを設定するマクロでした。

今回は、英語の特許明細書で出てくる段落番号([0001]など)を探して、同様にアウトラインレベルを設定します。

何が違うのかというと、探す文字列の括弧の形が変わり、数字が半角になった、ということです。

考え方は同じで、検索する文字列のパターンを変更すればOK.

できること

アウトラインレベル

上記の通り、英文明細書における段落番号がある段落を一括でアウトラインレベル1に設定できます。

見出しマップにすると一覧できて、さらにクリックすればその段落にジャンプできるので便利です。

ちなみに、見出しマップに表示されているものはすべてレベル1ですが、表示レベル(左端からの距離)が微妙に異なりますね。

これは、文書中の記載に関係しています。段落先頭にスペースやタブ記号があれば、それを見出しマップに反映します。

上記の場合、どのように段落番号が記載されているのか説明します。
以下のようないずれのパターンでも対応できるということです。

[0001]
段落先頭から段落番号が記載され、かつ、そのあとに文章が続きます。

[0002]
段落先頭から段落番号が記載されて、閉じるスクェア-ブラケットのあとに半角スペースがあり、改行されます。

[0003]
段落先頭に、半角スペースが3つあり、その後に段落番号が記載されて、その後に文章が続きます。

[0004]
段落先頭に、半角スペースが1つあり、その後に段落番号が記載されて、改行されます。

[0005]

段落先頭にタブがあり、その後に段落番号と文章が記載されています。

上記のように、段落先頭のスペースやタブがあっても段落番号を認識できる秘密は、プログラムの20行にあります。

解説は、前回の「段落番号」のある段落のアウトラインレベルを自動で設定するマクロ をご覧ください。

文字列パターンの解説

今回探す文字列のパターンは、

"[[][0-9][0-9][0-9][0-9][]]*"

です。

ポイントは、スクェア-ブラケット( [ と ] )が、スクェア-ブラケットで囲まれているということですね。

これは、Wordの一般的なワイルドカードの使い方と同じ考え方です。

スクェア-ブラケットは、ワイルドカードにおいて意味をもった記号です。

スクウェアーブラケットはワイルドカードとしては、かならず1対で使われ、囲まれた中に含まれる文字列のうち1文字を意味します。

なので、スクェア-ブラケットを、意味を持った記号と区別して単なる表記とする場合には、区別するためにスクェア-ブラケットで囲むのです。→ブラケットの中の1文字として、記号[ や ] となるわけですね。

[[] [ を意味します

[]] ] を意味します

ワイルドカードの基礎

一部だけ説明します。簡単ですが、以下のような感じ。

[0-9] 半角数字の0~9までの1文字

[567] 半角数字の5、6、7のうち1文字

[0-9] 全角数字の0~9までの1文字

[A-Za-zA-Za-z] 全角・半角の大文字・小文字のアルファベットのうち1文字

2文字以上などの設定はできません。

なので、4桁の半角数字であれば、

[0-9][0-9][0-9][0-9]

となります。

プログラム翻訳

前回のマクロと同じなので、翻訳はしません。

変更点は、10行目の検索する文字列のパターンだけですね。

プログラム


Sub Epara()

 '英語段落番号設定
 
 Dim myPara As Paragraph
 Dim myStr As String
   
 For Each myPara In ActiveDocument.Paragraphs
  myStr = LTrim(Replace(myPara.Range.Text, vbTab, ""))
  If myStr Like "[[][0-9][0-9][0-9][0-9][]]*" Then
   myPara.Format.OutlineLevel = wdOutlineLevel1
  End If
 Next

End Sub

コメント

  • 2. Re:プログラムと通常検索の違い?

    >水野麻子さん

    ご質問をありがとうございました。

    何気なく書いていましたが、調べてみていろいろと理解できました。

    記事を2つ書きましたのでご覧ください。

    (ご質問への回答)
    http://ameblo.jp/gidgeerock/entry-10775955111.html

    (ワイルドカードの比較)
    http://ameblo.jp/gidgeerock/entry-10775987147.html

    そういえば、水野さんはワイルドカード検索で、\[のように\記号を使われていますね。

    この用法を忘れていましたので、思い出すきっかけをいただきありがとうございました。

  • 1. プログラムと通常検索の違い?

    こんにちは。

    Wordのワイルドカード検索で条件式の文字を普通の文字扱いにするには、直前に\を付ける形で記述できます。

    [0001]のような4桁の数字なら、

    \[[0-9]{4}\]

    これでOKです。

    プログラミングだと\は使えないのかな?

    水野麻子

-コード
-, ,