
裁判所のホームページで民事訴訟フェーズ3で使用する証拠説明書の書式(エクセル)が公開されましたね。

そうですね。でもエクセルだと、セルに入力できる文字数が制限されるので、この機会にワードで作成するようにしたほうが良いと思います。

ワードの表は苦手なんです。

案外、勝手は悪くはないですよ。詳しく説明した操作マニュアルも作りますから、使ってみてください。
サンプルのダウンロード
マクロが含まれたファイルをインターネットからダウンロードして利用する場合、セキュリティ上の理由からそのままでは動作しないことがあります。以下の手順で設定を行ってください。
手順1:ファイルの「ブロック解除」を行う(最優先)
インターネットからダウンロードしたファイルは、Windowsのセキュリティ機能によりブロックされていることが一般的です。これを開く前に解除する必要があります。
- ダウンロードしたファイルを右クリックし、メニューから「プロパティ」を選択します。
- 「全般」タブの下部にあるセキュリティの項目を確認します。
- 「許可する」(または「ブロックの解除」)というチェックボックスにチェックを入れます。
- 「OK」をクリックして画面を閉じます。
手順2:Officeソフト側でマクロを許可する
ExcelやWord自体がマクロを実行できる設定になっていない場合、ファイルを開いてもマクロが動きません。
- Excel(またはWord)を起動し、「ファイル」タブをクリックします。
- 「オプション」>「トラストセンター(セキュリティセンター)」>「トラストセンターの設定」を開きます。
- 「マクロの設定」にて、マクロの実行を許可する設定になっているか確認してください(一般的には「警告を表示してすべてのマクロを無効にする」などを選択し、実行時にコンテンツの有効化を押す運用が推奨されます)。
手順3:ファイルを開く
- 手順1でブロックを解除したファイルをダブルクリックして開きます。
- ファイルが開いた際に、画面上部に「コンテンツの有効化」という黄色いバーが表示された場合は、それをクリックしてください。
仕様
1. 全体設定と共通仕様
1.1. モジュール構成
Option Explicitを宣言すること。
1.2. 多重実行防止(連打対策)
- モジュールレベル変数として
Private isProcessing As Booleanを定義すること。 - 各メインプロシージャの先頭で以下を行うこと。
If isProcessing Then Exit Subで実行中なら処理を抜ける。isProcessing = Trueでフラグを立てる。- 処理終了時(
ExitHandler)でisProcessing = Falseに戻す。
1.3. 共通のエラーハンドリングとUI制御
各メインプロシージャは以下の共通構造を持つこと。
- 先頭でマウスポインタを待機状態(
System.Cursor = wdCursorWait)にし、On Error GoTo ErrorHandlerを宣言する。 - 正常終了時および中断時の共通出口として
ExitHandler:ラベルを作成する。ExitHandlerでは、画面更新の再開(必要な場合)、マウスポインタの通常復帰(System.Cursor = wdCursorNormal)、isProcessing = Falseを行い、Exit Subで抜ける。
- エラー時の処理として
ErrorHandler:ラベルを作成する。MsgBoxで「処理中にエラーが発生しました。(改行)エラー内容: ” & Err.Description」をvbCriticalで表示し、Resume ExitHandlerで抜ける。
2. 共通関数
2.1. セルテキスト取得関数:GetCellText
- 機能: Wordのセル範囲からテキストを取得し、末尾の不要な制御文字と前後の空白を除去する。
- スコープ:
Private Function - 引数:
rng As Range - 戻り値:
String - 処理内容:
rng.TextからChr(13)とChr(7)を連結した文字列をReplaceで空文字に置換し、さらにTrim関数で前後の空白を削除して返す。
3. メインプロシージャ(機能要件)
3.1. 原告・被告マークのトグル移動:TogglePartyCircle
- 概要: 文書内の図形(丸印)を左右に50ポイント移動させ、代替テキストで状態を管理する。
- 使用する変数:
doc As Document,shp As Shape,moveDistance As Single - 処理フロー:
moveDistanceに50を代入し、docにActiveDocumentをセットする。- 図形の取得:
On Error Resume Nextを宣言し、doc.Shapes("MarkerCircle")をshpに代入する。- 直後に
On Error GoTo ErrorHandlerでエラー処理を通常に戻す。 shp Is Nothingの場合はMsgBox(vbExclamation)で「対象の図形(MarkerCircle)が見つかりません。」と表示し、GoTo ExitHandlerで抜ける。
- 移動ロジック:
shp.AlternativeTextが"Hikoku"でない場合(初回または原告状態):shp.LeftをmoveDistance分だけプラス(右へ移動)し、AlternativeTextに"Hikoku"をセットする。- それ以外の場合(被告状態):
shp.LeftをmoveDistance分だけマイナス(左へ移動)し、AlternativeTextに"Genkoku"をセットする。
3.2. 標目の結合・分割切替:ToggleMergeByHeader
- 概要: 見出し(「標目」)のダブルクリックによりユーザーフォーム(
frmMergeSplit)を起動し、ユーザーが選択した処理(結合または分割)に応じて、カーソルがある表の2行目から最終行までをループして一括処理を行う。 - 使用する変数: 引数
actionType As Stringならびにtbl As Table,rw As Row,i As Long,c As Integer,textCol3 As String,textCol4 As String - 事前チェック: (呼び出し元である
ToggleMergeByHeaderにて)Selection.Information(wdWithInTable)が偽ならExit Subで抜ける。真であればfrmMergeSplit.Showを実行してフォームを表示する。
- 処理フロー:
- (実処理を行う
ExecuteTableFormatにて)tblにSelection.Tables(1)をセットし、Application.ScreenUpdating = Falseを実行する。 i = 2 To tbl.Rows.Countでループし、rwにtbl.Rows(i)をセットする。- 分割処理 (
actionType = "Split"かつrw.Cells.Count = 4の場合): すでに結合されていると見なし、rw.Cells(2)をSplit NumRows:=1, NumColumns:=3で分割する。 列幅の復元:c = 1 To 6でループし、1行目の各セルのPreferredWidthTypeおよびPreferredWidthを、現在の行の各セルにコピーする。 さらに列幅を強制適用するため、On Error Resume Nextの下でrw.Cells(c).Width = tbl.Rows(1).Cells(c).Widthを実行し、直後にエラー処理を通常に戻す。 - 結合処理 (
actionType = "Merge"かつrw.Cells.Count = 6の場合): 通常行と見なし、GetCellText関数を使って3列目および4列目のテキストを取得し、それぞれtextCol3,textCol4に格納する。 3列目または4列目のいずれか(あるいは両方)に文字列が入力されている場合は、処理を行わずに次の行へスキップする(GoTo NextRow)。 ただし、両方が空文字("")である場合のみ、3列目および4列目のRange.Textを空文字にし、2列目(rw.Cells(2))を4列目(rw.Cells(4))に向けてMergeする。 - 終了処理: ループ終了後、
Selection.Collapse Direction:=wdCollapseStartで選択状態を解除する。
- (実処理を行う
3.3. 作成年月日の書式設定:FormatDatesByHeader
- 概要: カーソルがある表の通常行について、3列目の日付文字列を和暦(ge.m.d)にフォーマットする。
- 使用する変数:
tbl As Table,rw As Row,i As Long,textCol3 As String,dateVal As Date - 事前チェック: 表内にカーソルがなければ
GoTo ExitHandlerで抜ける。 - 処理フロー:
tblにSelection.Tables(1)をセットし、画面更新を停止する。i = 2 To tbl.Rows.Countでループし、rwに対象行をセットする。rw.Cells.Count = 6(標準行)の場合のみ以下の処理を行う。GetCellText関数で3列目のテキストをtextCol3に取得する。textCol3が空欄でない場合、IsDate関数で日付と判定できるかチェックする。- 判定が真なら
CDateでdateValに変換し、rw.Cells(3).Range.TextにFormat(dateVal, "ge.m.d")の結果を代入する。
- ループ終了後、
Selection.Collapse Direction:=wdCollapseStartで選択状態を解除する。

コメント