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

サンプル

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

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

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

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

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

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

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

それは、楽しみですね。

サンプルのダウンロード

インストール方法

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

操作マニュアル

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

仕様

1. プロジェクト概要

「公用文の書き方」「裁判所提出書類」「契約書」などの厳格な書式規定に基づき、Word文書のスタイル、ページ設定、アウトライン番号、インデントを自動的に整形するVBAアドイン。ObsidianやNotionなどの外部エディタからテキストを貼り付けた際に混入しやすい特殊な要素(手動改行、WikiLinkなど)を自動検知し、Wordに最適な形式へ一括整形する機能を備えており、多様なツールを用いた執筆フローにもスムーズに対応。

2. ファイル構成

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

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

モジュール名種類役割
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記号を解析し、対応する見出しスタイルを適用し、インデントを設定する。
    • 各変換処理の冒頭で、外部ツール由来の特殊要素が検知された場合に、ユーザー確認を経てクリーンアップ処理(ExecuteSimpleCleanup)を呼び出す制御を追加。

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

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

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

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

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

  • 機能: 文書整形前の下処理。
  • メソッド:
    • ApplyTableStyle: 表内の段落に対し、インデント等の影響を受けない専用スタイル(「箱詰め」等)を適用。
    • ReplaceSpaceWithIndent: 行頭の全角/半角スペースをカウントし、Wordのインデント設定に変換してスペースを削除する。
    • DetectExternalElements: 文書内に手動改行(^l)、ハイパーリンク、WikiLink([[...]])、フロントマター(---)が存在するかを高速に自動検知する。
    • ExecuteSimpleCleanup: 検知された不要な要素を、Wordでの処理に最適な形(段落記号への置換、リンクのテキスト化、ブロック削除など)に一括整形する。

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

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

4. 機能要件詳細

  1. 精密なレイアウト制御:
    • Wordの「文字数と行数」指定時におけるグリッドズレを防ぐため、CalcMargine 関数による右余白の微調整を必須とする。
    • インデントは「文字単位」ではなく、アドバンス幅に基づいた「ポイント単位」で設定し、均等割り付け等によるズレを排除すること。
  2. Markdown親和性:
    • # 見出し- リスト1. 番号 の標準的なMarkdown記法をサポートすること。
    • 変換時は、文書全体を一括処理し、ステータスバーに進捗を表示すること。
  3. 外部ツール連携時のクリーンアップ:
    • ObsidianやNotionなどの外部ツールからテキストを貼り付けた際に生じるWord特有の問題(手動改行による段落認識エラーや、不要なリンク・フロントマターの残存など)を解決する。
    • 変換マクロの実行時にこれらの不適切な要素を自動検知し、ユーザーの確認を経てWordに適した形式(手動改行の段落記号への置換、ハイパーリンクの解除、WikiLinkのテキスト化、YAMLフロントマターの削除)へ一括で自動整形する。
  4. 設定の保存:
    • ユーザーフォームでの選択状態は、clsSettingsManager を通じて ThisDocumentCustomDocumentProperties に保存し、次回起動時に復元すること(Mac版Word対応のためレジストリは使用しない)。
  5. 公用文ルールへの準拠:
    • 句読点のぶら下げを行うため、段落配置は「両端揃え」を基本とすること。
    • 見出し番号(第1、1、(1)…)やインデントルール(1文字下がり等)は、日本の公用文作成要領や裁判所標準書式に準拠したプリセットを用意すること。

5. UIデザイン

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

参考文献

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

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

コメント

  1. keitaro より:

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

    • 管理人 より:

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

  2. より:

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

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

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

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

    • 管理人 より:

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

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

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

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

  3. 管理人 より:

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

  4. より:

    お世話になっております。
    本日、突然、VA公用文が機能しなくなりました。「#」が「第1」に変換されないなど、マークダウン書式の変換ができなくなりました。昨日までは、まったく問題なく使用できていました。
    VA公用文のバージョンは767.dotm(→8A1にアップデートしましたが、同様に機能しません)
    OSはMACOS Tahoe26.3.1
    ワードは16.106.3 (26030211)です。

    • 管理人 より:

      ご連絡ありがとうございます。
      マークダウン→アウトラインの変換が全く行われない場合の原因には、次のようなものが考えられます。
      ・段落のスタイルが「標準」以外(「目次」など)になっている。
      ・見出しより後に「右揃え」になっている段落がある。
      ・マークダウン記号の定数(マクロの設定値)が「#」以外のものになっている。
      ・Wordのバージョンアップによる影響
      ご確認ください。

      • 管理人 より:

        別途お送りいただいたファイルを確認したところ、変換がうまくいかなかった原因が判明いたしました。

        ・改行コードが「任意指定の行区切り(^l)」になっている
        各行の末尾が「段落記号(Enter)」ではなく、「任意指定の行区切り(Shift + Enter)」で入力されていました。VA公用文のマクロは「段落(改行記号まで)」を一つの単位として認識して変換を行うため、すべてが一行として扱われてしまい、2行目以降の「#」が正しく認識されなかったようです。

        ・マークダウン記号へのハイパーリンク設定
        「#」の記号自体にハイパーリンクが設定されていました。これにより、マクロが記号を「テキスト」として読み取ることができず、変換処理がスキップされてしまったものと考えられます。

        • 管理人 より:

          ObsidianやNotionなどの外部ツールに由来する特殊な改行やリンクが含まれる場合でも、スムーズに変換できる機能を追加しました。(Ver8B0)

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