今まで、見出しマップに登録するためにアウトラインレベルを変更する方法を紹介し、そのマクロも紹介してきました。
経緯は、「見出しマップの目次 」をご覧ください。
その続きです。
今回のお題は、章番号です。
たとえば、
第1章
はじめに
・・・・・・・・・
第2章
この章では、まず、・・・
・・・・・・・・
第25章
・・・・・・・・
第150章
・・・・・・・・
と続いていくときに、章の頭にジャンプするために見出しマップを利用します。
ここに、章番号が列挙されていたら簡単ですよね。
<目次>
マクロの考えかた
前回のマクロと同じですが、検索する文字列のパターンを工夫しましょう。
今回は、章番号が何桁になるのかわからない場合を想定しました。
また、文字の入力ミス(入力の不整合)で、章番号が半角・全角の両方で書かれている状態を想定しました。
よくありますよね。こういうこと。
以下の文字列パターンです。
第[0-90-9]*
「第」が先頭にきます。
その次に、「半角もしくは全角数字が1文字」きます。
その次は任意の0文字以上の文字列がきます。
このようにすれば、章番号の桁数は関係なく、対象を拾うことができますね。
ただし、簡単な記載なので、汎用性が高い→不要なものも含みます。
たとえば、第1章以外にも、第2節などいろいろと含まれてしまいます。
マクロ解説 ~もう少し絞り込み
では、章番号だけを抜き出したい場合はどうするのか?
簡単な答えはわかりませんが、僕なら無理をせずに3パターン考えます。
第[0-90-9]章*
第[0-90-9][0-90-9]章*
第[0-90-9][0-90-9][0-90-9]章*
どうせ、自分で使うマクロです。
自分が作る文書、もしくは自分の作業対象の文書において第何章までが書かれているのかわかりますよね。
それに対応してパターンを作ってあげればいいのです。
ひとまず第999章まであれば十分でしょ?
というわけで、パターンが3つできましたので、これを Or演算子でつなぎます。
If myStr Like "第[0-90-9]章*" Or _ myStr Like "第[0-90-9][0-90-9]章*" Or _ myStr Like "第[0-90-9][0-90-9][0-90-9]章*" Then myPara.Format.OutlineLevel = wdOutlineLevel1 End If
もし、myStrが上記3つのパターンのうちいずれかであれば、
という意味です。
マクロ(1) 簡単なもの
30行の検索パターンに簡易バージョンを用いました。
Sub Chapter() '第○の検索 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-90-9]*" Then myPara.Format.OutlineLevel = wdOutlineLevel1 End If Next End Sub
マクロ(2) もう少し絞り込み
30行の条件に、上記で説明した3パターンをOr演算子でつなげて記載しました。
Sub Chapter_Only() '第○章の検索 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-90-9]章*" Or _ myStr Like "第[0-90-9][0-90-9]章*" Or _ myStr Like "第[0-90-9][0-90-9][0-90-9]章*" Then myPara.Format.OutlineLevel = wdOutlineLevel1 End If Next End Sub