文書の保管には、PDFファイルが便利ですよね。
うちの法律事務所では、届いた書類は全部スキャナーでPDFファイルにしています。届いたFAXもPDFファイルで読めるようにしています。でも、そのPDFファイルを事件ごとのフォルダに振り分けて保管するのが大変です。
マクロを使えば、エクセルでファイルの整理を行うこともできますよ。
そんなことができるんですか?
ぜひ、教えて下さい。
ダウンロード
まずは、サンプル・ファイルをダウンロードしてください。
ブック(ファイルに保存されたエクセルのデータ全体)を開くと「ファイルがありません」というメッセージがでますが、問題ありません。
使用方法
- ファイルを開くと、オプションで指定したフォルダ内にあるファイル名が読み込まれます。
- 各項目のセルをダブルクリックすることにより、保管先のフォルダとファイル名が自動入力されます。
- 保管日時のセルをダブルクリックすると、ファイル名の変更とファイルの移動が行われます。
- フォルダ名やファイル名をダブルクリックすると、フォルダやファイルの内容を確認できます。
細部については、ブックの「マニュアル」シートを参照してください。
なお、このサンプルは、ファイル保管をマクロで行う場合の参考にしていただくためのものです。
使用にあたっては、それぞれの法律事務所に応じた修正を行ったうえでお使いください。
このサンプルをそのまま使うこともできますよね。
そうなんですが、それではマクロを使う意味がありません。できあいのプログラムを使うのであれば、もっと良いソフトがいくらでもあると思います。
マクロの良いところは、自分の使いやすいプログラムを自分自身で手軽に作れることです。ぜひ、このサンプルを参考に自分の法律事務所にピッタリのファイル保管プログラムを作っていただきたいと思います。
分かりました。
でも、難しそうですね。
次のページから、このプログラムの構造・機能を説明してゆきます。
プログラムのどの部分がどんな働きをしているのかが分かれば、修正するのは案外簡単だと思います。
すいませんが、忙しいので、手短に説明してくださいね。
ブックとワークシートの構成
まずは、「ファイル保管」のワークシートについて、説明します。
説明して欲しいのは、マクロのことなのですが...
ワークシートをどのように作っているのかが分かっていないと、マクロがどのように働いているのかが分かりませんので、少しお付き合いください。
ブックの構成
ブックには、次の3つのシートが作られています。
- 「保管」シート
- 「事件」シート
- 「オプション」シート
- 「マニュアル」シート
「保管」シートの構成
「保管」シートには、ファイルの保管に関する情報をテーブル機能を使って入力・表示できるようにしています。
テーブルの作成方法については、こちらのサイトを参考にしてください。
「事件」シートの構成
「事件」シートには、各事件の依頼人氏名などとデータフォルダが入力できるようにしています。
「オプション」シートの構成
「オプション」シートには、「読み込みフォルダ」および「保管フォルダ初期値」が入力されています。
「マニュアル」シートの構成
「マニュアル」シートには、「ファイル保管」の使用法と変更履歴を記載しています。
以上でブックとワークシートに関する説明を終わります。
テーブルを使うということが重要なんですね。
そうなんです。VBAの参考書では、後ろの方にならないと出てこないですが、データベースとしてエクセルを使うことが多い法律事務所の業務においては、非常に重要なテクニックです。
マクロの構造
それでは、「ファイル管理」のマクロの全体構造を説明しましょう。
いよいよマクロに関する説明ですね。
VBEへの入力位置
「開発」-「Visual Basic」をクリックして、VBEを起動してください。
左上の「プロジェクト・エクスプローラー」部で各モジュールをクリックすると、そこに記載されているコードが真ん中の「コード・エディター」部に表示されます。
見ていただくとお分かりのとおり、ほとんどのコードがシートモジュールに記載されています。標準モジュールには、ごくわずかしかコードが記載されていません。
私の持っている教科書では、マクロは「標準モジュール」に書くのが基本だと書いてあります。
そうですね。
でも、実は、シートに関係するコードは、そのシートに書いた方が、プログラムを構造化できますし、コードの記述も簡単になるんです。
プロジェクトの構成
「ファイル管理」プロジェクトの構成は、次の図のようになっています。
全てのマクロは、イベントプロシージャで起動しています。
これも教科書とは全然違いますよ。
マクロを実行するためには、シート上にボタンを配置したり、ショートカットキーに登録したりするのが基本的なやり方だとされています。
そうですね。イベントプロシージャは、教科書の後ろの方に応用的なテクニックとして記載されていることが多いようですね。
でも、最もエクセルらしい直感的な操作ができますし、特別なボタンを作成したりする手間も省けるので、積極的に使うべきだと考えています。
「ThisWorkbook」モジュールの機能
「ThisWorkbook」モジュールには、ブックを開いた時に起動する「Workbook_Open」プロ―シージャが組み込まれており、ファイル名の読み込みを行います。
「Sheet11」モジュールの機能
「Sheet11」モジュールには、まず、「保管」シートをダブルクリックした時に起動する「Worksheet_BeforeDoubleClick」プロシージャ、シートに変更が加えられた時に起動する「Worksheet_Change」プロシージャ、およびシートの選択位置が変わった時に起動する「Worksheet_SelectionChange」プロシージャが組み込まれており、それぞれのイベントに応じたマクロを呼び出しています。
次の3つのプロシージャがこのシステムの中核となるマクロになります。
「ReadFileNames」プロシージャは、オプションシートで設定されたフォルダ内にあるファイルのファイル名をシートに読み込みます。
「MoveFile」プロシージャは、そのファイルを指定されたフォルダに指定されたファイル名で移動します。
「RstrFile」プロシージャは、移動したファイルを元のフォルダに、元の名前で復旧します。
このほかに、テーブルの並び替えを行う「SortTable」プロシージャ、テーブルの書式を設定する「FormatTable」プロシージャ、保管フォルダの入力を行う「InputStoredFolder」プロシージャおよび保管ファイル名の入力を行う「InputStoredFile」プロシージャがあり、必要に応じて、他のプロシージャから呼び出されるようになっています。
「Sheet21」モジュールの機能
「Sheet21」モジュールには、「事件」シートが開かれた時に起動する「Workxheet_Activate」プロシージャとシートをダブルクリックした時に起動する「Worksheet_BeforeDoubleClick」プロシージャが組み込まれおり、それぞれのイベントに応じたマクロを呼び出しています。
「Module11」の機能
標準モジュールである「Module11」モジュールには、イベントの抑止およびその解除などを行うプロシージャが組み込まれています。
「DsblEvents 」プロシージャは、マクロ実行中のイベントの発生を抑止して、イベントが連鎖するのを防止します。併せて、画面の描画などを停止して、マクロの実行速度の向上を図っています。
「EnblEvents」プロシージャは、「DsblEvents」が行った設定を解除するプロシージャです。
マクロの内容にもよるのですが、基本的には、マクロの開始時にイベントの発生を抑止し、マクロの終了時に再開するようにしています。
以上で、マクロの構造に関する説明を終わります。
重要なのは「読み込み」「移動」「復旧」の3つのプロシージャなのですね。
そのとおりです。その3つのプロシージャには、ファイルの操作に関するマクロが含まれています。それ以外のプロシージャには、基本的なマクロしか使われていません。ただし、かなり複雑に組み合わされていますので、自分で最初から作ってみた方が理解しやすいかもしれません。
マクロの全体的な構造は分かりました。あとはプログラムの細部ですね。
そうですね。それについては、サンプルファイルのコードにできるだけ詳しいコメントを付けてありますので、そちらをご覧ください。
「事件」シートのデータは、事件管理のエクセルファイルからコピーして使うことにします。
その場合は、マクロで自動的に読み込むようにすれば、更新が楽になりますね。
弁護士には、保存したファイルのショートカットを渡すようにしたいのですが、そんなことは可能ですか?
できますよ。そういった事務所ごとのニーズに応じて機能を追加できるのが、マクロを使ったシステムの魅力です。ぜひ、挑戦してみてください。
コメント
各プロシージャの細部説明を記事から削除し、サンプルファイル内のコードにコメントとして記載しました。
これに伴い、バージョンを1.10から1.11に変更しました。
(マクロの機能には、変更ありません。)
ファイルサイズの増大を防止するため。フォルダやファイルの内容を確認するために設定していたハイパーリンクを削除し、VBAでフォルダやファイルを開くように変更しました。
併せて、一旦移動したファイルを元のフォルダに戻した際には、保管先フォルダ名や保管先ファイル名を削除するようにしました。
これに伴い、バージョンを1.11から1.20に変更しました。
フォルダやファイルの内容確認を中止した場合にエラーが生じるバグがありましたので修正しました。
これに伴い、バージョンを1.20から1.21に変更しました。