例えば、サーバ内の商品マスタ内の特定商品の在庫数を修正する場合、AさんとBさんの二人の更新アクションが重なった場合、どっちが優先されるのか。システム活用において、同時更新に関する考慮は必ず必要となる訳ですが、身近な例か順にご説明したいと思います。
まず、おなじみExcelの場合ですが、ネットワーク上のExcelブックをAさんが使用中の場合、Bさんが更新を試みると、以下のメッセージ「○○○.xlsx は編集のためロックされています。」が表示されますよね。
つまり、既に他のユーザが開いている間は、更新は許可されず、読み取り専用となり、閲覧はできるが更新は出来ない状態となります。
(※Excelにはブックの共有という機能もありますが、ここでは触れません。)
Excel単体の場合、読み取り専用モードとなり上書き保存ができないため、情報の整合性が保たれる訳ですが、
ExcelでもExcelを外部データベースに見立てることで、同時利用が可能となります。
システムとして運用する場合は、本来であれば、データベース活用となるわけですが、SQL導入となるとコストも増大するため、「100万円に近い予算を捻出してまでの投資は考えていない…。」といったケースでは、ExcelVBAシステムを検討いただいてはどうでしょうか。
物理的に同一ファイルを開きながらのファイル更新ではなく、ExcelVBAシステムから、目的のExelブックに対し、Open状態を監視し、更新を行う方法です。
つまり、該当のExcelブックが誰かによって開いているかどうかを判定し、使用中であれば、エラー警告を表示する、といった原始的な方法で運用いただくことが出来ます。
この為、更新は必要なタイミングで、必要な時にだけ、Excelシステムを介してUPDATEするという仕様とする為、「誰かがず~と開きっぱなし」という運用は行わないようにするのです。
ファイルを更新するためにかかる時間は、わずか数秒の短い時間ですから、
(A)ブックをテキストファイルのように見立て、書き込み可能なら、誰も開いていない
(B)ブックを開いた直後、ReadOnlyか判定し、Falseなら、誰も開いていない
と判断し、ExcelVBAシステムから該当ブックに対し、必要なデータを書き込みする、という仕組みを構築すれば、複数人でのマスタ更新は、ストレスなく行うことができます。
但し、Excelはあくまで表計算アプリケーションであり、データベースではありませんので、幾つかの制限の中での運用となります。例えば、「データの更新がわずか数秒」といっても、1ブックのサイズが10MBを超えてくると一瞬での更新は物理的に無理というもの。このため、Excelトランザクションファイルを一本化Size肥大の無きよう、「年月ごとにFile分割管理」する、などの仕組みが必要になります。
このようにExcelファイルSIZEを小さくすることで、更新に要する時間を短縮する訳ですが、10人以上の同時利用シーンでも、AccessやSQLなどのデータベースを導入することなく、運用いただいている事例もありますので、ご興味のある方は、お問合せいただければ幸いです。