サンプル

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

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

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

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

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

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

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

ダウンロード

まずは、こちらからサンプルファイルをダウンロードして、使ってみてください。

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

マクロを使用するためには、セキュリティの設定が必要な場合があります。

使用方法

  • マークダウンを使って、見出しのレベルを指定します。
    • レベルを指定する記号は、オプションで設定できます。デフォルトは「#」になっています。
    • 見出しは「第1」から始まります。「1」から始めたい場合は、「#」を使用せず「##」から使用してください。その場合のインデントは自動的に補正されます。
  • Ctrl+Shift+Mを押すと、裁判文書の様式に沿ったスタイルとアウトラインの書式を設定します。
    • 使用するフォントは、オプションで設定できます。デフォルトは「MS明朝」「12pt」になっています。
    • 設定が表示に反省されない場合は、一旦、マークダウン表示にしてから、アウトライン表示に切り替えてください。
  • Ctrl+Shift+<を押すと、マークダウンに変換します。
    • アウトラインが設定されていない状態では、変換を行いません。
  • Ctrl+Shift+>を押すと、アウトラインに変換します。
    • 最初の「マークダウン記号」までは変換を行いません。
    • 「行頭に空白文字が入力されている行」以降は変換を行いません。この機能はオプションで停止することもできます。
    • アウトラインが設定されていない状態では、変換を行いません。
  • このファイル自体を開く(エクスプローラーで右クリックして「開く」を選択してください)と、次のことが可能です。
    • オプション(見出し記号、フォントサイズ、フォント名)の設定
    • 使用方法(マニュアル)の確認
    • 履歴の確認
    • サンプルによる動作確認
  • Mac用ワードの場合は、「開発」ー「マクロ」メニューから対応するマクロを起動してください。

作動の一例

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

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

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

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

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

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

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

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

マクロの構造

VBEへの入力位置

テンプレート・ファイルを開いてから、「開発」-「Visual Basic」をクリックして、VBEを起動してください。
テンプレート・ファイルは、エクスプローラーでダブルクリックすると新規文書が作成され、コードが開かない状態になります。右クリックで「開く」(Windows11の場合は、「その他のオプションを表示」ー「開く」)を選択して、テンプレート自体を編集可能状態で開いてください。

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

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

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

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

マクロの構成

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

マクロの構成

setFormat」、「cngMarkdown」、「cngOutline」の各プロシージャの起動は、ショートカットキーにより行っています。
setFormat」は、「標準」スタイルを設定するショートカットキーが「Ctrl+Shift+N」なので、その隣ということで「Ctrl+Shift+M」に設定しています。
同様に「cngMarkdown」は「Ctrl+Shift+<」、「cngOutline」は「Ctrl+Shift+>」にショートカットキーを設定しています。
この設定は、ワードのオプションで自由に変更できます。

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

使えますが、このマクロを起動させるのに適当なものがないので、ショートカットキーを使っています。例えば、印刷する前に自動的にアウトラインを設定するということは可能ですが、このマクロでは利用していません。

各プロシージャの機能

setFormat」プロシージャは、「ReadOption」、「ConfigStyle」および「cngOutline」の各プロシージャを起動します。

cngMarkdown」プロシージャは、「ReadOption」および「OutlineToMarkdown」プロシージャを起動します。
アウトラインが設定されていない場合は、処理を中止します。

cngOutline」プロシージャは、「ReadOption」および「MarkdownToOutlne」プロシージャを起動します。
アウトラインが設定されていない場合は、処理を中止します。

ReadOption」プロシージャは、アドイン・ワークブックからオプションを読み込みます。

ConfigStyle」プロシージャは、公用文方式でスタイルを設定します。
オプションで設定されたフォントサイズおよびフォント名が適用されます。
2番目以降の見出しからマークダウンの入力を開始した場合(例:#ではなく##で入力を開始した場合)には、インデントの自動補正を行います。

cngOutline」プロシージャは、公用文方式でアウトラインを設定します。
オプションで設定された見出し番号が適用されます。
2番目以降の見出しからマークダウンの入力を開始した場合(例:#ではなく##で入力を開始した場合)には、インデントの自動補正を行います。

MarkdownToOutline」プロシージャは、マークダウンの見出し記号に応じ、アウトラインとスタイルのレベルを変更します。
標準スタイルの段落は、その直前の見出しレベルに応じてインデントを設定します。
最初の「マークダウン記号」からそれ以降の「行頭に空白文字が入力されている行」までの間の段落についてのみ処理を行います。

OutlineToMarkdown」プロシージャは、各段落にアウトラインのレベルに応じた数のマークダウンの見出し記号を追記し、標準スタイルを適用します。
最初の「見出しスタイル」からそれ以降の「行頭に空白文字が入力されている行」までの間の段落についてのみ処理を行います。

各プロシージャ間の値(オプション値)の共有には、引数を用いています。
モジュールレベルの変数でも可能なのですが、エラーが生じる場合があることが確認されたので、引数を用いるように変更しました。
なお、起動に引数が必要なプロシージャは、「開発」ー「マクロ」メニューの「マクロ名」にプロシージャ名が表示されません。

プロシージャ内のコードの細部については、サンプルファイルのプログラムにコメントで記載していますので、そちらを御覧ください。

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

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

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

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

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

コメント

  1. 管理人 より:

    各プロシージャの細部説明を記事から削除し、サンプルファイル内のコードにコメントとして追加しました。
    これに伴い、バージョンを2.00から2.01に変更しました。
    (マクロの機能には、変更ありません。)

  2. 管理人 より:

    値の共有方法をモジュールレベル変数によるものから引数によるものに変更しました。(エラーが発生する場合があったため)
    バージョンを2.10に変更しました。

  3. 管理人 より:

    最初の見出し番号を「第1」としたままでも、「1」から開始できるようにするため、2番目以降の見出しからマークダウンの入力を開始した場合(例:#ではなく##で入力を開始した場合)には、アウトラインに変換する際にインデントの自動補正を行うようにしました。
    バージョンを2.20に変更しました。

  4. 管理人 より:

    途中までアウトラインが設定されている場合などに動作しない。ワードのバージョンにより動作しない場合がある。などの不具合対策として、「スタイルおよびアウトライン設定」、「マークダウン表示」および「アウトライン表示」の各マクロを別々のコマンドで実行するように変更しました。

  5. 管理人 より:

    ご参考までに、これまでの経歴の概要を記載しておきます。
    Ver.1
    「マークダウン表示を行うコマンド」と「アウトライン表示を行うコマンド」の2つのコマンドで動作させる。
    問題点:スタイルやアウトラインの設定が正常に行われない場合がある。

    Ver.2
    「マークダウン表示」、「アウトライン表示」、「スタイルおよびアウトライン設定」の各マクロを、正常に動作するパターンで起動するように1つのコマンド(Ctrl+Shift+M)で条件分岐させて動作させる。
    問題点:途中までアウトラインが設定されている場合などに動作しない。ワードのバージョンにより動作しない場合がある。

    Ver.3
    「スタイルおよびアウトライン設定」、「マークダウン表示」および「アウトライン表示」、の各マクロを別々のコマンド(Ctrl+Shift+M、Ctrl+Shift+<、Ctrl+Shift+>)で動作させる。
    問題点:「アウトライン表示」の状態では、「スタイルおよびアウトライン設定」が動作しない。
    対策:手動で、一旦「マークダウン表示」に切り替えた後、「アウトライン表示」に切り替えるようにする。

  6. 管理人 より:

    各段落にスタイルが設定されていないバグがありましたので修正しました。
    インデントの自動補正機能で補完できるため「最初の見出し番号」のオプションを削除しました。
    書式が乱れる場合があるため、スタイルが設定されていない場合は、変換を行わないように修正しました。

  7. 管理人 より:

    ワードのインデントの設定は、アウトラインとスタイルの両方で行えるようになっています。アウトラインに対応するスタイル、およびスタイルに対応するアウトラインを設定すればお互いに相手側のインデントが反映されるはずなのですが、必ずしもそうなっておらず、かつ、その優先順位も不明です。
    これをどう処理するか、いろいろと試行錯誤を繰り返してきましたが、未だに正解がつかめていません。
    現状では、アウトラインとスタイルの両方で同一のインデントを設定しています。
    なお、スタイルのインデントは、ポイント数と文字数のいずれでも設定できるようになっていますが、これは後から設定した方が優先されるようです。また、アウトラインだけを設定しても文書自体は正常に作成できるのですが、スタイルを設定しないと目次が作成されません。

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