サンプル

アウトライン設定(ワードVBA)

VBAを使って、ワードのアウトラインを自動的に設定するマクロを紹介します。その際にスタイルを使った書式の設定も自動で行うようにしています。

ワードの書式設定って、インデントが微妙にズレたりして、面倒ですからね。

そうですね。また、このマクロは、マークダウン記法で見出しのレベルを指定できるようになっています。

マークダウン記法って何ですか?

簡単に言うと、各段落の先頭に入力された「#」マークの数で、見出しのレベルを表す文章の表記法です。使ってみてもらえれば、その良さが分かると思います。

なんだか、楽しみですね。

ダウンロード

ZIPファイルを解凍し、ダウンロードしたWordファイルをWordのスタートアップ・フォルダにコピーすると、アウトライン設定機能がいつでも使えるようになります。

必要に応じ、セキュリティの設定を行って、マクロを使える状態にしてください。

使用方法

  • マークダウンを使って、見出しのレベルを指定します。
    • 見出し記号には、「#」を使用します。
  • Ctrl+Shift+mを押すとマクロが起動し、次の処理を行います。
    • 「MS明朝」「12pt」で裁判文書の様式に沿ったスタイルとアウトラインを設定します。
    • マークダウンの見出し記号に応じて、スタイルとアウトラインのレベルを設定します。
  • もう一度Ctrl+Shift+mを押すとマクロが起動し、次の処理を行います。
    • スタイルとアウトラインのレベルに応じてマークダウンの見出し記号を入力します。
    • スタイルとアウトラインを解除します。
  • このファイル自体を開く(エクスプローラーで右クリックして開くを選択してください)と、次のことが可能です。
    • オプション(見出し記号、フォントサイズ、フォント名)の設定
    • 使用方法の確認
    • 履歴の確認
    • サンプルによる動作確認

マークダウン記号を使って入力した状態
アウトラインに変換した状態

マークダウンを用いて文書を書くのには、Merryというエディタが便利です。マークダウンした見出しを階層的に表示してくれます。

Markdown用にテキストエディタMeryのアウトライン機能を設定する

ワードは、アウトラインを設定すると、ショートカットキーで見出しのレベルの変更などができます。これは、ものすごく便利な機能なので、この機能だけでも使ってみることをお勧めします。

アウトラインモードでレベルを変更するショートカットキー:Word(ワード)の使い方/段落書式
Word(ワード)でアウトラインモードを利用しているときに、レベルを変更するには、ショートカットキーを利用するのが便利でおすすめです。

なお、このサンプルは、ワードによる文書作成にVBAを利用する際の参考にしていただくためのものです。
それぞれの法律事務所のやり方に従って、修正を加えて使用してください。

そのまま使うだけでは、ダメなのですか?

それでもかまわないですが、マクロの構造さえ理解できれば、さまざまな設定を自由にカスタマイズできるようになります。ぜひ、挑戦してみてください。

マクロの構造

それでは、「アウトライン設定」のマクロの全体構造を説明しましょう。

ワードの場合は、シートの構成とか、テーブルの設定とかはないので、いきなりマクロに関する説明ですね。

VBEへの入力位置

テンプレート・ファイルを開いてから、「開発」-「Visual Basic」をクリックして、VBEを起動してください。
(テンプレート・ファイルは、エクスプローラーでダブルクリックするとコードが開かない状態になります。右クリックで「開く」を選択して、テンプレート自体を編集可能状態で開いてください。)

左上の「プロジェクト・エクスプローラー」部で各モジュールをクリックすると、そこに記載されているコードが真ん中の「コード・エディター」部に表示されます。

このマクロのコードは、すべて標準モジュールに記載されています。

ドキュメント・モジュールに、コードを書かないのはなぜですか?

このマクロは、アドインとして、自分以外のドキュメントをコントロールするので、標準モジュールに記載しています。ドキュメント・モジュールにコードを書いても、他のドキュメントでは動作しません。

マクロの構成

「アウトライン設定」マクロの構成は、次の図のようになっています。

マクロの構成

「FormatToggle」のプロシージャの起動は、ショートカットキーにより行っています。「標準」スタイルを設定するショートカットキーが「Ctrl+Shift+n」なので、それに合わせて「Ctrl+Shift+m」に設定しています。この設定は、ワードのオプションで自由に変更できます。

ワードでは、イベントプロシージャは使えないのですか?

使えますが、このマクロを起動させるのに適当なものがないので、ショートカットキーを使っています。

各プロシージャの機能

StartUp」プロシージャは、Ctrl+Shift+mを押すと起動し、アドイン・ワークブックからオプションを読み込んでから、「FormatToggle」を起動します。

FormatToggle」プロシージャは、アクティブ・ワークブックの状態に応じて、次の処理を行います。

  • アウトラインが設定されている場合
    • 最初の「見出しスタイル」からそれ以降の「行頭に空白文字が入力されている行」までの間の段落について、スタイルとアウトラインのレベルに応じた数のマークダウン記号を入力し、標準スタイルを適用します。
  • マークダウン記号が入力されている場合
    • オプションで設定されたフォントサイズ、フォント名および見出し番号でスタイルとアウトラインを設定します。
    • 最初の「マークダウン記号」からそれ以降の「行頭に空白文字が入力されている行」までの間の段落について、マークダウン記号の数に応じたスタイルとアウトラインのレベルを設定し、マークダウン記号を削除します。
  • マークダウンもアウトラインも入力・設定されていない場合
    • オプションで設定されたフォントサイズ、フォント名および見出し番号でスタイルとアウトラインを設定します。
    • すべての段落に標準スタイルを適用します。

MarkdownToOutline」プロシージャは、マークダウンの見出し記号に応じ、アウトラインとスタイルのレベルを変更します。標準スタイルの段落は、その直前の見出しレベルに応じてインデントを設定します。

OutlineToMarkdown」プロシージャは、各段落にアウトラインのレベルに応じた数のマークダウンの見出し記号を追記し、標準スタイルに変更します。

ConfigStyle」は、公用文方式でスタイルを設定します。

ConfigOutline」は、公用文方式でアウトラインを設定します。

以上で、アウトライン設定マクロの概要の説明を終わります。

マクロの構造は、「電話メモ」に比べると簡単ですね。

各プロシージャのコード

オプション設定(StartUpプロシージャ)

Option Explicit
Dim sngFont As Single       'フォントサイズ
Dim strFont As String       'フォント名
Dim strMark As String       'マークダウン記号
Dim strFirstNo As String    '最初の見出し番号
Dim strBlankStop As String  '空白行での処理停止
Dim objParas As Object      '段落オブジェクトのコレクション

Sub StartUp()
Dim i As Long                       '段落番号
Dim objPara As Object               '対象となる段落オブジェクト
Dim brnMark                         'マークダウン記号の有無
    
'画面の更新を無効にする
Application.ScreenUpdating = False

'進捗状況を表示する
Application.StatusBar = "オプションを設定しています。"

'アドインドキュメントの段落オブジェクトのコレクションを取得する
Set objParas = ThisDocument.Paragraphs

'オプションを設定する
For i = 1 To ThisDocument.Paragraphs.Count
    '対象となる段落オブジェクトを取得する
    Set objPara = objParas(i)
    
    'フォントサイズを取得する
    If Left(objPara.Range.Text, 8) = "フォントサイズ:" Then
        sngFont = Split(objPara.Range.Text, ":")(1)
    End If
    
    If Left(objPara.Range.Text, 6) = "フォント名:" Then
        strFont = Split(objPara.Range.Text, ":")(1)
        strFont = Replace(strFont, vbCr, "")
    End If
    
    If Left(objPara.Range.Text, 9) = "最初の見出し番号:" Then
        strFirstNo = Split(objPara.Range.Text, ":")(1)
        strFirstNo = Replace(strFirstNo, vbCr, "")
    End If
    
    If Left(objPara.Range.Text, 9) = "マークダウン記号:" Then
        strMark = Split(objPara.Range.Text, ":")(1)
        strMark = Replace(strMark, vbCr, "")
    End If
    
    If Left(objPara.Range.Text, 14) = "行頭の空白文字で処理を停止:" Then
        strBlankStop = Split(objPara.Range.Text, ":")(1)
        strBlankStop = Replace(strBlankStop, vbCr, "")
    End If
Next
  
'マークダウンの記号に「.」が用いられている場合は「...」のオートコレクトを解除する
If strMark = "." Then
    On Error Resume Next
    AutoCorrect.Entries("...").Delete
    On Error GoTo 0
End If

'マークダウン記号の有無に応じて処理を行う
Call FormatToggle
    
'進捗状況を表示する
Application.StatusBar = ""
    
'画面の更新を有効にする
Application.ScreenUpdating = True
    
End Sub

「フォントサイズ」、「フォント名」および「マークダウン記号」をテンプレート自体のドキュメントから読み込みます。

書式の変換(FormatToggleプロシージャ)

Sub FormatToggle()
Dim i As Long                       '段落番号
Dim objPara As Object               '対象となる段落オブジェクト
Dim brnMark                         'マークダウン記号の有無
Dim brnHdg                          'アウトラインの有無
      
'進捗状況を表示する
Application.StatusBar = "処理を決定しています。"

'対象ドキュメントの段落オブジェクトのコレクションを取得する
Set objParas = ActiveDocument.Paragraphs

'マークダウン記号の有無を確認する
For Each objPara In objParas
    If objPara.Range.Characters.First = strMark Then brnMark = True
Next

'アウトラインの有無を確認する
For i = 1 To objParas.Count
    Set objPara = objParas(i)
    If objPara.Range.ListFormat.ListString <> "" Then brnHdg = True
Next

'マークダウン記号と見出しスタイルの有無に応じてマクロを起動する
If brnHdg = True And brnMark <> True Then
    'アウトラインに応じてマークダウンに変換する
    Call OutlineToMarkdown
    
Else
    'スタイルを定義する
    Call ConfigStyle
        
    'アウトラインを定義する
    Call ConfigOutline
        
    If brnMark = True Then
        'マークダウンに応じてアウトラインを設定する
        Call markdownToOutline
    Else
        '全ての段落にアウトラインを設定し、標準スタイルを適用する
        For Each objPara In objParas
            objPara.Range.ListFormat.ApplyListTemplateWithLevel _
                ListTemplate:=ListGalleries(wdOutlineNumberGallery).ListTemplates(1), _
                ContinuePreviousList:=True, _
                ApplyTo:=wdListApplyToWholeList, _
                DefaultListBehavior:=wdWord10ListBehavior
                
            objPara.Range.Style = ActiveDocument.Styles("標準")
        Next
    End If
End If
    
End Sub

マークダウン用の記号が段落の先頭に含まれているかどうかを確認し、その結果に応じて、マクロを起動します。

マークダウンからアウトラインへの変換(markdownToOutlineプロシージャ)

Sub markdownToOutline()
Dim i As Long               '段落番号
Dim objPara As Object       '対象となる段落オブジェクト
Dim objParaPrev As Object   '対象となる段落の直前の段落オブジェクト
Dim strText As String       '段落内テキスト
Dim x As Long               'マークダウン記号の個数
           
'進捗状況を表示する
Application.StatusBar = "アウトラインに変換しています。"

'最初のマークダウン記号まで処理をスキップする
For i = 1 To objParas.Count
    Set objPara = objParas(i)
    If objPara.Range.Characters.First = strMark Then Exit For
Next
 
'段落ごとに見出しのアウトラインレベルなどを設定する
For i = i To objParas.Count
    '行頭が空白文字の場合は処理を終了する
    If strBlankStop = "する" And objParas(i).Range.Characters.First = " " Then Exit For
    
    '段落内の文字列を取得する
    strText = objParas(i).Range.Text
    
    '1文字目がマークダウン記号かどうかに応じて処理を行う
    If Left(strText, 1) = strMark Then
       'マークダウン記号が9個の場合から順に見出しのアウトラインレベルを設定する
       For x = 9 To 1 Step -1
            '該当する段落の場合にアウトラインレベルを設定する
            If Left(strText, x) = String(x, strMark) Then
               'マークダウン記号を削除する
               objParas(i).Range.Text = Right(strText, Len(strText) - x)
                                
               'アウトラインの書式を適用する
               objParas(i).Range.ListFormat.ApplyListTemplateWithLevel _
                   ListTemplate:=ListGalleries(wdOutlineNumberGallery).ListTemplates(1), _
                   ContinuePreviousList:=True, _
                   ApplyTo:=wdListApplyToWholeList, _
                   DefaultListBehavior:=wdWord10ListBehavior
               
                'アウトラインレベルを適用する
                objParas(i).Range.SetListLevel (x)
                                 
                '次のレベルを処理する
                Exit For
            End If
       Next x
    Else
       '段落オブジェクトを取得する
       Set objPara = objParas(i)
       Set objParaPrev = objParas(i - 1)
      
         '前の段落が標準スタイルの場合のインデントを設定する
        If objParaPrev.Range.ListFormat.ListString = "" Then
            objPara.FirstLineIndent = objParaPrev.FirstLineIndent
        End If
     
      '前の段落のスタイルに応じて標準スタイルのインデントを設定する
        If objParaPrev.Range.ListFormat.ListString <> "" Then
            '前の段落が見出しの場合の最初の行のインデントを設定する
            If strFirstNo = "第1" Then
                Select Case objParaPrev.Range.ListFormat.ListLevelNumber
                    Case 1
                        objPara.FirstLineIndent = objParaPrev.FirstLineIndent + sngFont * 3
                    Case 2
                        objPara.FirstLineIndent = objParaPrev.FirstLineIndent + sngFont * 2
                    Case 3
                        objPara.FirstLineIndent = objParaPrev.FirstLineIndent + sngFont * 2.5
                    Case 4
                        objPara.FirstLineIndent = objParaPrev.FirstLineIndent + sngFont * 2
                    Case 5
                        objPara.FirstLineIndent = objParaPrev.FirstLineIndent + sngFont * 2.5
                    Case 6
                        objPara.FirstLineIndent = objParaPrev.FirstLineIndent + sngFont * 1.5
                    Case 7
                        objPara.FirstLineIndent = objParaPrev.FirstLineIndent + sngFont * 2.5
                    Case 8
                        objPara.FirstLineIndent = objParaPrev.FirstLineIndent + sngFont * 1.5
                    Case 9
                        objPara.FirstLineIndent = objParaPrev.FirstLineIndent + sngFont * 2.5
                    Case Else
                         objPara.FirstLineIndent = objParaPrev.FirstLineIndent
                End Select
             Else
                Select Case objParas(i - 1).Range.ListFormat.ListLevelNumber
                    Case 1
                        objPara.FirstLineIndent = objParaPrev.FirstLineIndent + sngFont * 2
                    Case 2
                        objPara.FirstLineIndent = objParaPrev.FirstLineIndent + sngFont * 2.5
                    Case 3
                        objPara.FirstLineIndent = objParaPrev.FirstLineIndent + sngFont * 2
                    Case 4
                        objPara.FirstLineIndent = objParaPrev.FirstLineIndent + sngFont * 2.5
                    Case 5
                        objPara.FirstLineIndent = objParaPrev.FirstLineIndent + sngFont * 1.5
                    Case 6
                        objPara.FirstLineIndent = objParaPrev.FirstLineIndent + sngFont * 2.5
                    Case 7
                        objPara.FirstLineIndent = objParaPrev.FirstLineIndent + sngFont * 1.5
                    Case 8
                       objPara.FirstLineIndent = objParaPrev.FirstLineIndent + sngFont * 2.5
                    Case 9
                        objPara.FirstLineIndent = objParaPrev.FirstLineIndent + sngFont * 2
                    Case Else
                        objPara.FirstLineIndent = objParaPrev.FirstLineIndent
                End Select
             End If
        Else
            '前の段落が標準スタイルの場合の最初の行のインデントを設定する
            objPara.FirstLineIndent = objParaPrev.FirstLineIndent
        End If
        '左のインデントを設定する
        objPara.LeftIndent = objParaPrev.LeftIndent
    End If
Next

End Sub

1つ目の段落から、最初のマークダウン記号までの間は、書式を変更してはならないため、処理をスキップします。

アウトラインからマークダウンへの変換(OutlineToMarkdownプロシージャ)

Sub OutlineToMarkdown()
Dim objPara As Object       '対象となる段落オブジェクト
Dim i As Long               '段落番号
Dim x As Long               'マークの個数

'進捗状況を表示する
Application.StatusBar = "マークダウンに変換しています。"

'最初の見出しまで移動
For i = 1 To objParas.Count
    Set objPara = objParas(i)
    If objPara.Range.ListFormat.ListString <> "" Then Exit For
Next

'段落ごとに処理を行う
For i = i To objParas.Count
    '空白行の場合は処理を終了する
    If strBlankStop = "する" And objParas(i).Range.Characters.First = " " Then Exit For
    
    'アウトラインのレベルに応じてマークダウンを追加する
    If objParas(i).Range.ListFormat.ListString <> "" Then
        For x = 1 To objParas(i).Range.ListFormat.ListLevelNumber
            objParas(i).Range.Text = strMark & objParas(i).Range.Text
        Next
    End If
    
    '標準スタイルを適用する
    objParas(i).Range.Style = ActiveDocument.Styles("標準")
Next

End Sub

1つ目の段落から、最初の見出しスタイルまでの間は、書式を変更してはならないため、処理をスキップします。

スタイルの設定(ConfigStyleプロシージャ)

Sub ConfigStyle()
Dim i As Long               '段落番号
Dim objPara As Object       '対象となる段落オブジェクト
Dim x As Long               'スタイル番号
Dim strStyle As String      'スタイル名'

'進捗状況を表示する
Application.StatusBar = "スタイルを定義しています。"

'最初のマークダウン記号の段落を選択する
For i = 1 To objParas.Count
    Set objPara = objParas(i)
    If objPara.Range.Characters.First = strMark Then
        objPara.Range.Select
    Exit For
    End If
Next

'番号ごとにスタイルを設定する
For x = 0 To 9          '番号0は標準スタイル
    'スタイル名を設定する
    If x = 0 Then
        strStyle = "標準"
    Else
        strStyle = "見出し " & x
    End If

    'スタイルの定義
    With ActiveDocument.Styles(strStyle)
        .AutomaticallyUpdate = False                    'スタイルの再定義
        .BaseStyle = ""                                 '基準にするスタイル
        .NextParagraphStyle = "標準"                    '次の段落のスタイル
    
        With .Font
            .NameFarEast = strFont                  'アジア言語のフォント名
            .NameAscii = strFont                    '英数字に使用するフォント
            .NameOther = strFont                    'その他の文字に使用するフォント
            .Name = strFont                         '書体名
            .Size = sngFont                         'フォントサイズ
            .Bold = False                           '太字
            .Italic = False                         'イタリック
            .Underline = wdUnderlineNone            'アンダーライン
            .Outline = False                        '中抜き
            .Emboss = False                         'エンボス
            .Shadow = False                         '影付き
            .Hidden = False                         '隠し文字
            .SmallCaps = False                      '小型英大文字
            .Color = wdColorAutomatic               '色
            .Engrave = False                        '浮き彫り
            .Superscript = False                    '上付き文字
            .Subscript = False                      '下付き文字
            .Scaling = 100                          'フォントサイズ
            .Kerning = 0                            'カーニング
            .DisableCharacterSpaceGrid = False      '1 行あたりの文字数
            .EmphasisMark = wdEmphasisMarkNone      '傍点
            .Ligatures = wdLigaturesNone            '合字
            .NumberForm = wdNumberFormDefault       '数値の表示形式
            .StylisticSet = wdStylisticSetDefault   'スタイル セット
            .ContextualAlternates = 0               'コンテキスト代替
        End With
        
        With .ParagraphFormat
            .LeftIndent = 0                             '左のインデントをリセット
            .FirstLineIndent = 0                        'ぶら下げインデントをリセット
            .RightIndent = 0                            '右のインデント
            .SpaceBefore = 0                            '段落前の間隔
            .SpaceAfter = 0                             '段落後の間隔
            .LineSpacingRule = wdLineSpaceSingle        '行間
            .Alignment = wdAlignParagraphJustify        '配置
            .WidowControl = False                       '1行残して段落を区切る
            .KeepWithNext = False                       '次の段落と分離しない
            .KeepTogether = False                       '段落を分割しない
            .PageBreakBefore = False                    '段落前で改ページ
            .NoLineNumber = False                       '行番号
            .Hyphenation = True                         'ハイフネーション
            .FarEastLineBreakControl = True             '禁則処理
            .WordWrap = True                            'ワードラップ
            .HangingPunctuation = True                  '句読点のぶら下げ
            .HalfWidthPunctuationOnTopOfLine = False    '行頭の記号を半角
            .AddSpaceBetweenFarEastAndAlpha = False     '日本語と英字の間隔を自動調整
            .AddSpaceBetweenFarEastAndDigit = False     '日本語と数字の間隔を自動調整
            .BaseLineAlignment = wdBaselineAlignAuto    '文字の配置
                
            'アウトラインレベルを設定
            Select Case x
                Case 0
                    .OutlineLevel = wdOutlineLevelBodyText
                Case 1
                    .OutlineLevel = wdOutlineLevel1
                Case 2
                    .OutlineLevel = wdOutlineLevel2
                Case 3
                    .OutlineLevel = wdOutlineLevel3
                Case 4
                    .OutlineLevel = wdOutlineLevel4
                Case 5
                    .OutlineLevel = wdOutlineLevel5
                Case 6
                    .OutlineLevel = wdOutlineLevel6
                Case 7
                    .OutlineLevel = wdOutlineLevel7
                Case 8
                    .OutlineLevel = wdOutlineLevel8
                Case 9
                    .OutlineLevel = wdOutlineLevel9
            End Select
        End With
    End With
Next

End Sub

インデントについては、アウトラインにもスタイルにも設定できるようになっています。両方に同じ設定を行うとメニューからアウトラインを設定しても、スタイルを設定してもインデントが変わらないように良いようにできそうです。しかし、そのようにした場合、アウトラインの「番号の設定」などを行うと、なぜかインデントが乱れてしまいます。

このため、インデントは、アウトラインのみに設定しています。

スタイル名には、strStyleという変数を割り当てています。変数については、その宣言や命名のしかたが悩ましいところなのですが、次のようにするのがVBAアセットのスタイルです。

アウトラインの設定(ConfigOutlineプロシージャ)

アウトライン表示を行う際には、アウトラインとスタイルを公文書方式の書式に合わせて設定します。

Sub ConfigOutline()
Dim i As Long               '段落番号
Dim objPara As Object       '対象となる段落オブジェクト
Dim x As Long       'アウトライン番号
Dim objList As Object

'進捗状況を表示する
Application.StatusBar = "アウトラインを定義しています。"

'アウトラインのテンプレートを設定する
Set objList = ListGalleries(wdOutlineNumberGallery).ListTemplates(1)

'各アウトラインレベルを定義する
For x = 1 To 9
    With objList.ListLevels(x)
        .TrailingCharacter = wdTrailingNone     '番号の後に挿入する文字
        .Alignment = wdListLevelAlignLeft       '行の配置
        .StartAt = 1                            '開始番号
        
        'レベルごとにアウトラインを定義する
        If strFirstNo = "第1" Then
            Select Case x
                Case 1
                    .NumberFormat = "第%1 "                            '番号書式
                    .NumberStyle = wdListNumberStyleArabicFullWidth     '番号のスタイル
                    .NumberPosition = sngFont * 0                       '左インデントからの距離
                    .TextPosition = sngFont * 2                         'インデント位置
                    .LinkedStyle = "見出し 1"                           'リンクされているスタイル
                    .ResetOnHigher = 0                                  '番号を付け直す前レベル
                Case 2
                    .NumberFormat = "%2 "
                    .NumberStyle = wdListNumberStyleArabicFullWidth
                    .NumberPosition = sngFont * 1
                    .TextPosition = sngFont * 2
                    .LinkedStyle = "見出し 2"
                    .ResetOnHigher = 1
                Case 3
                    .NumberFormat = "(%3) "
                    .NumberStyle = wdListNumberStyleArabic
                    .NumberPosition = sngFont * 1.5
                    .TextPosition = sngFont * 3
                    .LinkedStyle = "見出し 3"
                    .ResetOnHigher = 2
                Case 4
                    .NumberFormat = "%4 "
                    .NumberStyle = wdListNumberStyleAiueo
                    .NumberPosition = sngFont * 3
                    .TextPosition = sngFont * 4
                    .LinkedStyle = "見出し 4"
                    .ResetOnHigher = 3
                Case 5
                    .NumberFormat = "(%5) "
                    .NumberStyle = wdListNumberStyleAiueoHalfWidth
                    .NumberPosition = sngFont * 3.5
                    .TextPosition = sngFont * 5
                    .LinkedStyle = "見出し 5"
                    .ResetOnHigher = 4
                Case 6
                    .NumberFormat = "%6 "
                    .NumberStyle = wdListNumberStyleLowercaseLetter
                    .NumberPosition = sngFont * 5.5
                    .TextPosition = sngFont * 6
                    .LinkedStyle = "見出し 6"
                    .ResetOnHigher = 5
                Case 7
                    .NumberFormat = "(%7) "
                    .NumberStyle = wdListNumberStyleLowercaseLetter
                    .NumberPosition = sngFont * 5.5
                    .TextPosition = sngFont * 7
                    .LinkedStyle = "見出し 7"
                    .ResetOnHigher = 6
                Case 8
                    .NumberFormat = "%8 "
                    .NumberStyle = wdListNumberStyleLowercaseRoman
                    .NumberPosition = sngFont * 7.5
                    .TextPosition = sngFont * 8
                    .LinkedStyle = "見出し 8"
                    .ResetOnHigher = 7
                Case 9
                    .NumberFormat = "(%9) "
                    .NumberStyle = wdListNumberStyleLowercaseRoman
                    .NumberPosition = sngFont * 7.5
                    .TextPosition = sngFont * 9
                    .LinkedStyle = "見出し 9"
                    .ResetOnHigher = 8
            End Select
        Else
            Select Case x
                Case 1
                    .NumberFormat = "%1 "
                    .NumberStyle = wdListNumberStyleArabicFullWidth
                    .NumberPosition = sngFont * 0
                    .TextPosition = sngFont * 1
                    .LinkedStyle = "見出し 1"
                    .ResetOnHigher = 0
                Case 2
                    .NumberFormat = "(%2) "
                    .NumberStyle = wdListNumberStyleArabic
                    .NumberPosition = sngFont * 0.5
                    .TextPosition = sngFont * 2
                    .LinkedStyle = "見出し 2"
                    .ResetOnHigher = 1
                Case 3
                    .NumberFormat = "%3 "
                    .NumberStyle = wdListNumberStyleAiueo
                    .NumberPosition = sngFont * 2
                    .TextPosition = sngFont * 3
                    .LinkedStyle = "見出し 3"
                    .ResetOnHigher = 2
                Case 4
                    .NumberFormat = "(%4) "
                    .NumberStyle = wdListNumberStyleAiueoHalfWidth
                    .NumberPosition = sngFont * 2.5
                    .TextPosition = sngFont * 4
                    .LinkedStyle = "見出し 4"
                    .ResetOnHigher = 3
                Case 5
                    .NumberFormat = "%5 "
                    .NumberStyle = wdListNumberStyleLowercaseLetter
                    .NumberPosition = sngFont * 4.5
                    .TextPosition = sngFont * 5
                    .LinkedStyle = "見出し 5"
                    .ResetOnHigher = 4
                Case 6
                    .NumberFormat = "(%6) "
                    .NumberStyle = wdListNumberStyleLowercaseLetter
                    .NumberPosition = sngFont * 4.5
                    .TextPosition = sngFont * 6
                    .LinkedStyle = "見出し 6"
                    .ResetOnHigher = 5
                Case 7
                    .NumberFormat = "%7 "
                    .NumberStyle = wdListNumberStyleLowercaseRoman
                    .NumberPosition = sngFont * 6.5
                    .TextPosition = sngFont * 7
                    .LinkedStyle = "見出し 7"
                    .ResetOnHigher = 6
                Case 8
                    .NumberFormat = "(%8) "
                    .NumberStyle = wdListNumberStyleLowercaseRoman
                    .NumberPosition = sngFont * 6.5
                    .TextPosition = sngFont * 8
                    .LinkedStyle = "見出し 8"
                    .ResetOnHigher = 7
                Case 9
                    .NumberFormat = "%9 "
                    .NumberStyle = wdListNumberStyleNumberInCircle
                    .NumberPosition = sngFont * 8
                    .TextPosition = sngFont * 9
                    .LinkedStyle = "見出し 9"
                    .ResetOnHigher = 8
            End Select
        End If
    End With
Next x

'アウトラインの書式を適用する
objList.Name = "アウトライン設定"
End Sub
  

アウトラインのレベル番号1から9までについて、書式を設定してゆきます。ワードのメニューでは、「段落」-「アウトライン」-「新しいアウトラインの定義」で設定する項目をマクロで自動的に設定することになります。

最後に設定したアウトラインをリストに登録します。文書全体に登録してしまうと、アウトラインの設定を開始する前の行にまで見出しが設定されてしまうので、選択範囲にのみ適用しています。

お疲れさまでした。
以上で「アウトライン設定」マクロの構造と機能の説明を終わります。

これを使えば、ワードで文書を作るたびに、書式を設定する手間が省けますね。でも、うちの弁護士が「マークダウン」を使うことはないと思います。

その場合は、アウトラインとスタイルを設定する部分だけを使ってみてはどうですか?

そうですね。それだけでも書式を整えるのが楽になりますね。

このマクロを作成するにあたっては、こちらの記事を参考にさせていただきました。
素晴らしいアイデアを公開していただいたstabucky.com様に感謝申し上げます。

行頭の#の数に応じて見出しを設定 | You Look Too Cool
Markdown記法というものがあります。You Look Too Cool » Markdown記法その中に「#見出し

コメント

タイトルとURLをコピーしました