
法律事務所でエクセルを使ってやりたいことで、最初に思い浮かぶのは「事件(案件)の管理」ではないでしょうか?

事件の管理は、事件に関する情報を共有したり、利益相反をチェックしたりするために欠かせないですよね。

ネットを見ると、クラウド型の事件管理システムもいろいろとあるようです。

でも、うちの事務所のやり方にはあっていない気がするし、なによりも費用が高くて手が出ません。

アクセスやmySQLなどを使って、データベースを構築しても良いのですが、そこまで手間をかけたくないし、構築した本人以外の人には手も足もでない状態になるのが問題です。

なんとかエクセルだけで、うまく管理したいものですね。

小規模な事務所であれば、可能だと思います。やってみましょう!
サンプルのダウンロード
インストール方法
操作マニュアル
仕様
1. プロジェクト概要
Excelをフロントエンドおよびデータベースとして利用する、法律事務所向けの事件(案件)管理システムです。新規事件の採番、ステータス(現況)に応じた書式変更、関連フォルダの自動生成・移動・アーカイブ、および日次バックアップ機能を備えています。WindowsおよびMac環境の両方で動作させるため、ファイルシステム操作にはFSO(FileSystemObject)を使用せず、標準ステートメントを利用します。
2. システム環境・制約事項
- プラットフォーム: Windows および macOS の両対応(
Application.PathSeparatorやDir関数を活用し、パス区切り文字やファイル操作の互換性を担保すること)。 - ファイルシステム操作: FSOは使用不可。フォルダ作成や移動には
MkDir、Nameステートメントを使用すること。 - エラーハンドリング: 各処理の要所で適切なエラーハンドリング(
On Error GoTo .../On Error Resume Next)を実装すること。
3. モジュール構成と役割
3.1 クラスモジュール
Evntクラス:- 目的: 処理速度向上のためのアプリケーション状態制御。
- メソッド:
Disable:ScreenUpdating,EnableEvents,Calculation (Manual)をオフにし、カーソルを待機状態にする。Enable: 上記を元の状態(自動計算、イベント有効など)に戻す。
Fldrクラス:- 目的: OS互換性を考慮したファイルシステム操作。
- メソッド:
Move: 指定フォルダの移動・リネーム。MoveInZip: フォルダに対応するZIPファイルを指定パスへ移動。
3.2 標準モジュール
Setupモジュール:- 目的: グローバル変数の宣言と、システム全体の初期化・共通処理。
- 変数:
lngActCase(Long),Evnt(Evntクラス),Fldr(Fldrクラス)。 - 機能:
FncSplit: エラー回避付きの文字列分割関数。VABridge_AfterLoad: 外部データロード後の初期化(ソート、書式設定、バックアップ実行)。PerformDailyBackup: 初回起動時に動作する日次バックアップ機能(当日日付のファイルがなければSheets.Copyで新規作成しマクロなしxlsxで保存)。
4. シート構成とイベント制御
4.1 ThisWorkbook
Workbook_Open: 起動時に「事件」シート(sht11)をアクティブにし、Evnt.Disableを呼んだ後、日次バックアップ(PerformDailyBackup)を実行。Workbook_BeforePrint: 「事件メモ」シート(sht12)の印刷時、2ページ目のデータ有無を判定し、印刷範囲(PageSetup.PrintArea)を動的に切り替える。Workbook_BeforeClose: クラスインスタンス(Evnt,Fldr)の解放。
4.2 事件シート(オブジェクト名: sht11)
- UI要件: テーブル名「事件」で管理。
- イベント実装:
Worksheet_Activate: テーブルの並び替え(現況 > 受任区分 > 事件区分 > 事件番号の昇順)、書式設定を実行し、前回選択していた事件番号(lngActCase)へスクロール。Worksheet_SelectionChange: 選択セルの事件番号を取得し、グローバル変数lngActCaseに保持。Worksheet_BeforeDoubleClick:- 「事件番号」列: 新規事件の追加処理(後述)を呼び出し。
- 「データフォルダ」列: フォルダの存在チェック後、ハイパーリンクとして開く。
- 「TeamsURL」列: URLを開く。
Worksheet_Change:- 「現況」列変更時: ステータスに応じて行のテーマカラーを変更。「C:終了」に変更された場合は終了年月日に本日日付を自動入力し、アーカイブ移動処理(
MoveFolder)を呼び出す。「B:精算管理」時も移動処理を実行。 - 「データフォルダ」列変更時: フォルダの存在チェック。
- 「現況」列変更時: ステータスに応じて行のテーマカラーを変更。「C:終了」に変更された場合は終了年月日に本日日付を自動入力し、アーカイブ移動処理(
4.3 事件メモシート(オブジェクト名: sht12)
- UI要件: 事件の個別情報を表示・印刷するフォーム形式。
- イベント実装:
Worksheet_Activate:lngActCaseに値があれば、対象事件のデータを出力するか確認メッセージを表示。- ファイル保存機能 (
SheetSave): 表示中のシートを新規ブックへコピーし、数式を値に変換した上で、該当事件のデータフォルダ内に事件メモyyyymmdd.xlsxとして保存。
4.4 オプションシート(オブジェクト名: shtOpt)
- UI要件: 設定値(バックアップフォルダパスなど)を配置。
- イベント実装:
Worksheet_BeforeDoubleClickにて、特定セル(「データフォルダ確認」「事件番号確認」)のクリック時に sht11 のメンテナンス処理を呼び出す。
4.5 フォルダ設定シート(オブジェクト名: shtFldr)
- 役割: アーカイブ(終了案件等)の移動先ルールを定義したテーブル(テーブル名: フォルダ)を配置。「現況」「受任区分」「事件区分」の組み合わせで移動先のベースパスを決定する。
4.6 マニュアルシート(オブジェクト名: shtMan)
- VBAコードの実装はなし(操作説明用)。
5. 主要なビジネスロジック
5.1 新規事件の追加・自動採番(InsertCase)
- テーブルの末尾または現在行の下に行を挿入。
- 新規依頼人の場合: 既存の全事件番号から最大値を探し、百の位を繰り上げ、下2桁を「01」にして採番。(例:
Int(Max / 100) * 100 + 101) - 既存依頼人の場合: 選択行と同じ依頼人(事件番号の上位桁が一致)の中で最大の番号を探し、「+1」して枝番を採番。
5.2 動的書式設定と入力規則(FormatTable)
- 処理速度向上のため、対象列の値を配列(Variant)に一括取得して判定。
- フォント色変更: 「現況」の値が「E:相談不可(Accent2)」「D:相談のみ(Accent6)」「C:終了(Accent3)」の場合に行全体のフォントカラーを変更。それ以外は自動(Automatic)。
- 入力規則の動的設定:
INDIRECT関数を使用し、各セルにドロップダウンリストの入力規則を一括適用。
5.3 フォルダのアーカイブ移動(MoveFolder)
- 「現況」が終了や精算管理になった際にトリガー。
shtFldrのルーティングテーブルから、条件に合致する移動先パスを取得。- パス内のプレースホルダ(
\yyyy等)を、終了年月日の年(2017年以前は-2017)で置換。OSのパス区切り文字(Application.PathSeparator)に配慮。 Fldr.MoveInZipを呼び出しフォルダ/ZIPを移動。移動後、移動先フォルダ内に「scan」用サブフォルダを自動生成。
5.4 外部出力機能(CSVエクスポート)
WriteNameToCSV: 依頼人氏名・相手方氏名などを抽出し、タブ区切り形式などで出力。改行で複数名が入力されている場合は分割(FncSplit)して出力。WriteFolderToCSV: 各事件のデータフォルダパス一覧を出力。- 制約: FSOが使えないため、VBA標準の
FreeFile,Open,Print #ステートメントを利用して出力すること。


コメント
ファイル保存時に名前データをCSVファイルに保存できる機能を追加しました。(Ver110)
事件データベースとタスク管理を一体化しました。
外部にデータを保存して共同編集を可能にしました。(Ver790)
事件データベースにサーチ(検索)機能を追加しました。
複数の文字列を同時に検索できます。
数値と文字列の日付データを両方とも検索できます。(Ver7A3)
グローバルオブジェクトの解放を確実に実行するように変更しました。
レコードファイルの読み込みを配列上で行うことで処理速度を向上させました。
タスク管理機能を削除しました。(Ver801)
VAブリッジを使った共同編集に対応させました。
共同編集が不要な方は、単体でお使いいただけます。(Ver910)