VA公用文:裁判所提出書類などの公用文の書式を自動設定(ワードVBA)

サンプル

法律事務所では、一太郎を使っている人が多いですね。

ワードは、「インデントの設定が難しい」って言う人が多いみたいです。

それでは、VBAを使って、裁判所提出書類用のアウトラインやスタイル、インデントなどの書式を簡単に設定できるアドインを作ってみましょう。

インデントさえ簡単に設定できるようになれば、一太郎からワードに乗り換える人が増えるかも知れませんね。

このアドインは、書式の設定だけではなく、マークダウン↔アウトライン変換機能も備えています。

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

簡単に言うと、各段落の先頭に入力された「#」マークの数で、見出しのレベルを表す文章の表記法です。マークダウンにはほかにもいろいろな機能があるのですが、このマクロでは見出しとリストの機能だけを使っています。使ってみてもらえれば、その良さが分かると思います。

それは、楽しみですね。

サンプルのダウンロード

インストール方法

Word用VBAアドインのインストール方法

操作マニュアル

VA公用文シリーズ(統合版) 操作マニュアル

仕様

1. プロジェクト概要

「公用文の書き方」「裁判所提出書類」「契約書」などの厳格な書式規定に基づき、Word文書のスタイル、ページ設定、アウトライン番号、インデントを自動的に整形するVBAアドイン。

Markdown記法(# 見出し、- 箇条書き)で記述されたテキストを、適切なWordのスタイル(見出し1~9、箇条書き)に一括変換する機能、およびその逆変換機能を持ち、インデントを1文字単位(グリッド単位)で精密に制御する点が最大の特徴。

2. ファイル構成

プロジェクトは以下のモジュールで構成すること。

モジュール名種類役割
basControl標準モジュールリボンコールバック、ニュートラル/Markdown/アウトライン変換の統合制御
basConvert標準モジュールMarkdown ⇔ Wordアウトライン/リストの相互変換ロジック
basIndent標準モジュール各レベルのインデント設定(Aline)および解除(Reset)の実処理
basSetup標準モジュールセットアップフォーム表示、書式一括適用(スタイル・ページ設定・ヘッダーフッター)
clsListFormatterクラスモジュール箇条書き、段落番号、アウトライン番号の定義と適用
clsPreFormatterクラスモジュール表スタイルの統一、空白のインデント化などの事前整形
clsSettingsManagerクラスモジュール設定値の永続化(カスタムドキュメントプロパティへの保存・読込)
clsVariablesManagerクラスモジュール文書種別ごとの定数管理、各種設定値のメモリ内保持、アドバンス幅計算
frmSetupユーザーフォーム文書種別、ページ番号位置などを選択するセットアップ画面
Settings標準モジュール文書種別ごとの書式定数(インデント量、番号書式、余白など)の定義
ThisDocumentThisDocument更新履歴の保持およびドキュメントのエントリポイント

3. モジュール詳細仕様

(1) Settings(標準モジュール)

文書種別ごとの書式定義を Public Const のCSV形式文字列として管理する。

  • 定義する文書種別:
    1. Saiban (裁判所提出書): 中央揃え表題、第1レベル「第1」、インデント1文字。
    2. Naiyou (内容証明): 文字数・行数制限(20字26行等)に対応。
    3. Kouyou (公用文): 両端揃え表題、第1レベル「第1」、解説書準拠のインデント。
    4. Keiyaku1 (契約書・法令型): 「第1条」形式。
    5. Keiyaku2 (契約書・実務型): 条番号独立形式。
    6. Business (ビジネス文書): 「第1」形式、中央揃え。
    7. Technical (技術文書): 「1.」「1.1.」形式。
  • 共通定数:
    • フォント名(MS 明朝など)、フォントサイズ(12pt)、行番号表示設定など。
    • 重要: CalcMargine 関数を含める。これは、Wordの「文字送り(字送り)」計算における0.05pt単位の丸め誤差を補正し、行末が不揃いになるのを防ぐために、右余白を微調整する計算式を提供する。

(2) clsVariablesManager(クラスモジュール)

  • 機能: Settings モジュールの定数を読み込み、配列化して保持する。
  • プロパティ:
    • strDocumentType (Saiban, Kouyou, etc.)
    • sngAdvWidth (アドバンス幅): ページ設定と文字数から1文字あたりの幅(ポイント)を計算して保持。インデント計算の基準となる。
  • メソッド:
    • SetVariables: 設定ファイル(プロパティ)からの読み込み、種別に応じた定数のロードを行う。

(3) clsListFormatter(クラスモジュール)

  • 機能: Wordの ListGalleries を操作し、箇条書き・段落番号・アウトライン番号を定義する。
  • メソッド:
    • ConfigList: 箇条書き()や段落番号(など)を設定。
    • ConfigOutline: 見出し1~9に対する多階層アウトライン番号を設定。Settings で定義された番号書式(例:「第%1章」)を適用し、スタイルとリンクさせる。

(4) basSetup(標準モジュール)

  • プロシージャ:
    • ShowSetupMenu: 設定フォームを表示。
    • ApplyFormatSettings: セットアップのメインフロー。
      1. Markdown変換(一旦プレーンにする)。
      2. InsertSample: 必要に応じてサンプルテキストを挿入。
      3. ConfigStyle: 「標準」「見出し」等のスタイル定義(フォント、行間等)。
      4. InitOutlineSettings: アウトライン定義の初期化。
      5. basControl.ChangeToOutline: Markdown→Wordアウトライン変換。
      6. ConfigPage: ページ設定(文字数・行数・余白)。CalcMargine で計算した補正済み右余白を適用する。
      7. ConfigHeaderFooter: ページ番号の配置。
      8. ConfigStyleGallery: 不要なスタイルをギャラリーから隠す。

(5) basControl(標準モジュール)

  • 機能: リボンからの操作を受け付け、文書の状態(Markdownかアウトラインか)に応じて処理を振り分ける。
  • プロシージャ:
    • ChangeToNeutral: インデントを解除し、フラットな状態にする。
    • ChangeToMarkdown: Wordのアウトライン構造を解析し、#- 等の記号に変換してスタイルを標準に戻す。
    • ChangeToOutline: Markdown記号を解析し、対応する見出しスタイルを適用し、インデントを設定する。

(6) basIndent(標準モジュール)

  • プロシージャ: ProcessIndent(processMode As String)
    • 機能: 文書全体の各段落を走査し、そのアウトラインレベルに応じた正確なインデントを設定する。
    • ロジック:
      • sngAdvWidth(1文字幅)×(基本インデント文字数 + レベルに応じた増加分)で左インデント値を算出。
      • 見出しだけでなく、「標準」スタイルの段落も、直前の見出しレベルに合わせてインデントする(インデントの継承)。
      • processMode="Reset" の場合はインデントを0に戻す。

(7) basConvert(標準モジュール)

  • MarkdownToOutline:
    • 行頭の # の数で見出しレベルを判定し、スタイル「見出し X」を適用。
    • 行頭の - * 等で箇条書きリスト、1. 等で段落番号リストを適用。
  • OutlineToMarkdown:
    • スタイル「見出し X」を検出し、行頭にレベル分の # を挿入してスタイルを「標準」に戻す。
    • リスト属性を持つ段落を行頭記号付きテキストに変換。

(8) clsPreFormatter(クラスモジュール)

  • 機能: 文書整形前の下処理。
  • メソッド:
    • ApplyTableStyle: 表内の段落に対し、インデント等の影響を受けない専用スタイル(「箱詰め」等)を適用。
    • ReplaceSpaceWithIndent: 行頭の全角/半角スペースをカウントし、Wordのインデント設定に変換してスペースを削除する。

(9) frmSetup(ユーザーフォーム)

  • UI構成:
    • 文書の種類: オプションボタン(裁判所用、内容証明、公用文、契約書1/2、ビジネス、技術)。
    • ページ番号: 表示位置(右上、中下、中下飾り付き、右下、なし)。
    • 行番号: 表示/非表示チェックボックス。
    • サンプル: 追加/追加しない。
  • 動作: 選択された文書タイプに応じて、他のコントロールの有効/無効を切り替える(例:内容証明の場合はページ番号位置を固定など)。

4. 機能要件詳細

  1. 精密なレイアウト制御:
    • Wordの「文字数と行数」指定時におけるグリッドズレを防ぐため、CalcMargine 関数による右余白の微調整を必須とする。
    • インデントは「文字単位」ではなく、アドバンス幅に基づいた「ポイント単位」で設定し、均等割り付け等によるズレを排除すること。
  2. Markdown親和性:
    • # 見出し- リスト1. 番号 の標準的なMarkdown記法をサポートすること。
    • 変換時は、文書全体を一括処理し、ステータスバーに進捗を表示すること。
  3. 設定の保存:
    • ユーザーフォームでの選択状態は、clsSettingsManager を通じて ThisDocumentCustomDocumentProperties に保存し、次回起動時に復元すること(Mac版Word対応のためレジストリは使用しない)。
  4. 公用文ルールへの準拠:
    • 句読点のぶら下げを行うため、段落配置は「両端揃え」を基本とすること。
    • 見出し番号(第1、1、(1)…)やインデントルール(1文字下がり等)は、日本の公用文作成要領や裁判所標準書式に準拠したプリセットを用意すること。

5. UIデザイン

  • リボン:
    • 「ニュートラル化」「Markdown変換」「アウトライン変換」「セットアップ」のボタンを配置。
  • セットアップフォーム:
    • 文書タイプを選択すると、それに応じた推奨設定が自動選択されるインタラクティブな挙動とすること。

参考文献

書式については、次の資料を参考にしています。

マークダウンからの変換については、こちらの記事を参考にしました。
素晴らしいアイデアを公開していただいたstabucky.com様に感謝申し上げます。

コメント

  1. keitaro より:

    はじめまして、この記事とWordファイルに感激しました。
    影本さまはセミナーなどやっていますでしょうか?
    「分かりやすい公用文の書き方 第2次改訂版」のルールに沿ったワードマークダウンが必要となっています。
    影本様にココナラなどで委託することはできますでしょうか?

    • 管理人 より:

      コメントありがとうございます。
      このテンプレートは、自分でも「イケてるんじゃないか?」と思っていましたので、このようなコメントを頂けて、こちらも感激しています。
      頂いたご質問への回答は、次のとおりです。
      ・セミナーは、行っていません。(それほどの能力はないと思っています。)
      ・業務の委託は引き受けておりません。(本サイトへの協賛金は受け付けております。)
      ・このテンプレートは、私の勤務する法律事務所のニーズに合わせたものであり、「分かりやすい公用文の書き方 第2次改訂版」のルールは確認していません。今後、対応について検討させていただきたいと思います。

  2. より:

    お初にお目にかかります。IT企業勤めですが、地方公共団体向けに報告書を納品するような部署にいる非プログラマーです。この「VA公用文」の細かい作りこみに感激いたしました。

    これまで最終的なレイアウトの調整に多大な時間を費やしていたのですが、マークダウンとWordの相互変換というアイデアで、ここまでスムーズな作業ができるとは思いませんでした。

    一般公用文で作成した文書を元行政マンに見せてもフォント、インデント、見出しは違和感ない仕上がりのようです。

    少しでも貢献できればと、まずは個人的に協賛させていただきます。

    • 管理人 より:

      ご丁寧なコメントをいただき、ありがとうございます。

      「報告書」ということであれば、表題や見出しをゴシック体にするというようなニーズがあるかもしれません。
      もしそうであれば、「VAスタイル」を併せて利用することで、フォントを簡単に変更したり、元に戻したりできます。

      また、「VA公用文」を使ったワードのマニュアルもこちらに掲載しています。
      裁判所提出書類用の内容となっていますが、一般公用文にもほとんどそのまま使えると思います。

      ご要望等ありましたら、遠慮なくお知らせください。

  3. 管理人 より:

    次のとおり変更しました。(Ver800)
    ・ビジネス文書に対応
    ・装飾付ページ番号に対応
    ・箇条書きまたは段落番号以降は、マクロの対象とするように変更(見出しのない文章にも対応)
    ・セクション区切りの検出処理を簡素化
    ・インデント時のアウトライン及びリスト設定を削除することでコードを簡素化(見出しや段落番号の番号に問題が生じた場合には、一旦マークダウンに変換することが必要)
    ・アウトライン及びリスト設定の再設定を可能にするため、セットアップ時にマークダウンへの変換を追加
    ・インデントの開始・終了段落設定機能を削除し、進捗率算定を簡素化
    ・リストおよびアウトラインのフォント関連の設定をスタイルに連動するように修正(VAスタイルによるスタイル変更を自動的に反映)
    ・セットアップ時の各プロシージャにエラー処理を追加
    ・設定をテンプレートではなく、設定ファイルに保存するように変更
    ・セットアップメニューの初期値設定機能を削除
    ・オブジェクト変数の解放を追加
    ・ヘルプ表示機能を削除

  4. 管理人 より:

    セットアップ開始後にキャンセルした場合に完了メッセージが表示されるバグを修正しました。
    文書スタイルを変更した場合にアウトラインに関する変更が反映されないバグを修正しました。
    変数クラスの解放を削除しました。(不適切なタイミングで解放される場合があるため)(Ver801)

  5. 管理人 より:

    ビジネス文書のインデントを修正しました。(Ver802)

  6. 管理人 より:

    ヘッダー及びフッターが完全に削除されないバグを修正しました。(Ver803)

  7. 管理人 より:

    標準スタイルの行間が設定されない場合があるバグを修正しました。(Ver804)

  8. 管理人 より:

    契約書のページ設定を公文書から分離独立させました。
    表題の配置を文書の種類に応じて設定するようにしました。
    セットアップを中断した場合にフォームを再起動するように修正しました。(Ver810)

  9. 管理人 より:

    変数オブジェクトの生成および解放コードを追加しました。(Ver811)

  10. 管理人 より:

    「マークダウン記号の後ろの空白」のデフォルト値をTrueに変更しました。(Ver812)

  11. 管理人 より:

    段落の配置が「右揃え」の場合にもマクロを停止するようにしました。
    「行間詰め」スタイルの次の段落のスタイルを「行間詰め」に変更しました。
    スタイルの設定をオブジェクト操作に変更しました。
    スタイル設定時に既存のインデントおよび配置が解除される場合があるバグを修正しました。
    セットアップ完了のメッセージを削除しました。(Ver820)

  12. 管理人 より:

    行頭の空白で処理を停止する機能を削除しました。(Ver821)

  13. 管理人 より:

    「右揃え」の段落のスタイルが「行間詰め」以外のすべての場合に処理を停止するように修正しました。
    「行間詰め」と「標準」スタイルを切り替える前に、メッセージを表示するように変更しました。
    「行間詰め」と「標準」スタイルを切り替える際に、最初の段落のスタイルに応じて切り替えるように修正しました。(Ver822)

  14. 管理人 より:

    スタイルギャラリーから公用文作成に使用しないものを削除するようにしました。
    リストギャラリーから規定のスタイル以外を削除するようにしました。(Ver830)

  15. 管理人 より:

    Ver800以降はMacに対応していない旨を追記しました。

  16. 管理人 より:

    設定値の保存先を設定ファイルからカスタムドキュメントプロパティに変更しました。(Macで動作するようにするため)
    EnableCancelKeyの設定オプションを削除しました。(Mac用Wordの不安定が改善されたため)
    セットアップメニューの再表示に関するコードを簡素化しました。(Ver850)

    Ver800~Ver840がスタートアップフォルダに自動作成していた「VA公用文.ini」ファイルは、不要となりましたので削除してください。

  17. 管理人 より:

    見出しより前に右揃えがある場合にアウトラインへの変換などが行われないバグを修正しました。(Ver851)

  18. 管理人 より:

    見出し通過後の見出し通過検知プロセスを省略して処理速度を向上させました。
    インデント設定時の見出しレベル変数を単純化しました。(Ver852)

  19. 管理人 より:

    行頭の空白を削除するタイミングをインデントなどのコントロール実行時に変更しました。(Ver860)
    クイックアクセスツールバーのどのボタンをクリックしても、行頭の空白をインデントに置き換えた後に処理を行います。

  20. 管理人 より:

    主要モジュールを高速化しました。
    プロジェクト名をProjectからVA_OfficialDocumentに変更しました。
    クイックアクセスツールバーの表示名の誤りを修正しました。
    事前の書式設定処理をクラス化しました。(Ver870)

  21. 管理人 より:

    インデント設定・解除時にアウトライン設定を再適用する機能を追加し、セレクション後の見出し番号の振り直しを自動化しました。
    セットアップ時にアウトライン定義の紐付け(初期化)を行い、新規文書作成時にも直ちに見出し番号を設定するようにしました。(Ver880)

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