
文書の保管には、PDFファイルが便利ですよね。

うちの法律事務所では、届いた書類は全部スキャナーでPDFファイルにしています。届いたFAXもPDFファイルで読めるようにしています。でも、そのPDFファイルを事件ごとのフォルダに振り分けて保管するのが大変です。

マクロを使えば、エクセルでファイルの整理を行うこともできますよ。

そんなことができるんですか?
ぜひ、教えて下さい。
サンプルのダウンロード
インストール方法
操作マニュアル
仕様
ファイル保管・整理システム 開発仕様書
1. プロジェクト概要
所定のフォルダ(スキャンデータ等)から未処理のファイル一覧を取得し、事件(案件)ごとにリネーム、指定フォルダへの移動、および担当者別のショートカット・コピー配布を自動で行うExcel VBAツール。
2. システム構成とモジュール
プロジェクトは以下のモジュール群で構成される。
- ThisWorkbook: ブック全体のイベント制御(起動・終了処理)。
- Sht1Hokan (保管): ファイル一覧の表示と、移動・リネーム・連携等のメイン処理を行うUIシート。
- Sht2Hokansaki (保管先): 事件ごとの基本情報(保存先パスや担当区分)を管理するデータベースシート。
- ShtOption (オプション): フォルダパスや動作設定値を保持するシート。
- ShtManual (マニュアル): 操作説明シート(コードなし)。
- Setup (標準モジュール): グローバル変数の定義、初期化、および自動バックアップ処理。
- Evnt (クラスモジュール): 画面描画(ScreenUpdating)やイベント(EnableEvents)の停止・再開をカプセル化した高速化・制御クラス。
3. シートとテーブル定義
各シートには以下のテーブルまたは名前付きセルが設定されている前提とする。
- Sht1Hokan (テーブル名: 保管)
- 列:
番号,日時,フォルダ名,ファイル名,事件呼名,内容,保管フォルダ名,保管ファイル名,作成先,保管日時
- 列:
- Sht2Hokansaki (テーブル名: 保管先)
- 列:
事件呼名,データフォルダ,保管フォルダ,担当区分
- 列:
- ShtOption (名前付き範囲・テーブル)
- 単一セル:
フォルダ(読み込み元),保管フォルダ(デフォルト保存先),バックアップフォルダ,職務上請求保管フォルダ,弁護士会照会保管フォルダ - テーブル
SC作成先設定:作成先,フォルダ - テーブル
コピー作成先設定:作成先,フォルダ
- 単一セル:
4. 機能要件詳細
4.1. 初期化・終了とバックアップ (ThisWorkbook / Setup)
- 起動時 (Workbook_Open): イベントと画面更新を停止(
Evnt.Disable)し、「保管」シートをアクティブ化。保管日時が空欄の最初の行を選択してスクロール。その後、1日1回のバックアップ(PerformDailyBackup)を実行。 - バックアップ処理: 指定されたバックアップフォルダ内に、
YYYYMMDD_ベースファイル名.xlsxの形式で現在のブックのコピーを保存する(マクロなし保存)。同日内に既にバックアップがある場合はスキップ。 - 終了時:
Evntオブジェクトを解放する。
4.2. クラスによるイベント制御 (Evnt)
- Disableメソッド:
.ScreenUpdating = False,.EnableEvents = False,.Calculation = xlCalculationManual,.Cursor = xlWait - Enableメソッド: 上記を全て通常・Trueに戻す。
4.3. 保管シート (Sht1Hokan) のUIアクション(ダブルクリック処理)
対象セルの列名に応じて以下の処理を行う(処理前後にEvntでイベント制御を行うこと)。
- 番号: 新規入力行(最下行の次)でダブルクリックされた場合、読み込み元フォルダ群(サブフォルダ含む)からファイル一覧を取得する(
ReadFileNames)。- 取得条件: 先頭が
.のファイル、既にテーブルに存在するファイル、FAXMAILFAXで始まるファイルは除外。
- 取得条件: 先頭が
- フォルダ名 / 保管フォルダ名: エクスプローラーでそのフォルダを開く(
FollowHyperlink)。未入力時に「保管フォルダ名」を押した場合は、Sht2Hokansakiから事件呼名で検索して自動入力、見つからなければフォルダピッカーを表示。 - ファイル名 / 保管ファイル名: 該当のファイルを開く(
FollowHyperlink)。「保管ファイル名」が未入力の場合は後述の自動生成(InputStoredFile)を実行。 - 日時: ファイル名が「20…」の12桁数字で始まる場合はその日時を抽出、それ以外はファイルの更新日時(
FileDateTime)を取得して入力。 - 事件呼名: 「保管先」シートをアクティブにする。
- 作成先: 「保管先」シートから担当区分を検索して自動入力。
- 保管日時(メインアクション):
- 空欄の場合(保管実行): ファイルを「フォルダ」から「保管フォルダ」へリネーム移動。成功時、「作成先」に応じてショートカットファイル(
.lnk)およびコピーファイルを作成先フォルダに生成。内容に「職務上請求」「弁護士会照会」が含まれる場合は専用フォルダにもコピーを作成。処理後、現在日時を入力。 - 入力済みの場合(保管取消): 移動したファイルを元のフォルダ・元の名前に戻す(復元)。作成したショートカットやコピー、専用コピーも削除し、保管関連セルの値をクリア。
- 空欄の場合(保管実行): ファイルを「フォルダ」から「保管フォルダ」へリネーム移動。成功時、「作成先」に応じてショートカットファイル(
4.4. 入力補助・連動イベント (Worksheet_Change)
「保管」シートの値変更時に連動して動く処理。
- 事件呼名 変更時: 保管フォルダ名、保管ファイル名、作成先をクリアし、隣の「内容」セルを選択。
- 内容 変更時: 「保管先」シートに同名の事件呼名があれば、保管フォルダ名と作成先を自動入力し、ファイル名を自動生成する。
- ファイル名自動生成ルール (
InputStoredFile):- 基本:
[日時]00000[事件呼名] [内容].[拡張子] - 例外: 事件呼名の末尾が「文献」の場合は
[内容].[拡張子]
- 基本:
4.5. シート間連携 (保管 ↔ 保管先)
- 保管シート選択時 (
Worksheet_SelectionChange): 選択行の「事件呼名」をグローバル変数strActCaseに記憶。 - 保管先シートアクティブ時 (
Worksheet_Activate):strActCaseと一致する事件呼名の行を自動選択(視線移動の補助)。 - 保管先シート ダブルクリック時: 選択した事件呼名を「保管」シートのアクティブセルに入力し(ふりがなも自動セット)、次の「内容」セルを選択状態にして「保管」シートへ戻る。
4.6. 保管先シート (Sht2Hokansaki) の作業用マクロ
UpdateTable: 「保管」シートの全データを走査し、「保管先」シートに未登録の事件呼名があれば、フォルダ情報等と共に新規追加する。


コメント
各プロシージャの細部説明を記事から削除し、サンプルファイル内のコードにコメントとして記載しました。
これに伴い、バージョンを1.10から1.11に変更しました。
(マクロの機能には、変更ありません。)
ファイルサイズの増大を防止するため。フォルダやファイルの内容を確認するために設定していたハイパーリンクを削除し、VBAでフォルダやファイルを開くように変更しました。
併せて、一旦移動したファイルを元のフォルダに戻した際には、保管先フォルダ名や保管先ファイル名を削除するようにしました。
これに伴い、バージョンを1.11から1.20に変更しました。
フォルダやファイルの内容確認を中止した場合にエラーが生じるバグがありましたので修正しました。
これに伴い、バージョンを1.20から1.21に変更しました。
VAブリッジを使った共同編集に対応させました。
共同編集が不要な方は、単体でお使いください。(Ver610)