共同ファイル更新

 数字をまとめるのに、MicrosoftExcelブックを共有モードにしてファイルサーバーに置いておけるのは便利である。ただし、不都合が起ることもある。結果、しかたなくブックの共有をあきらめ「だれかが編集中だったら後でやり直して」という運用にせざるを得ないこともあるようだ。
 ただし関係する人数が増えると or 期限が短いと自分の番がなかなか回ってこずにイライラする・・・だろうなあ。最近あちこちから相談を受けることが増えてきたのだ。
「原則同じ行を複数の人が更新することはないのだな。じゃあできるかもしれない。」
パソコンを前にして考えていると、できてしまった。(よくあることだ。)

 必要に迫られての突貫工事なのでいろいろとみっともない。
 更新するファイルの名前とパスはシートの特定セルに記入する。
(毎回変わったりするから。)
 タイトル行とかは更新の対象としないので読み飛ばすのだが(万一誰かの手が滑って更新してしまうとまずいということもあるし)、何行目までは無視する、はソースに定数で定義。何列目までがデータかというのもソースに定数で。更新するワークシート名をソースに書くか、シートに書くかは迷ったが、何となく流れで(そういうブックの作りらしいので)ソースにした。この辺は毎回変わるものではないようなので。

 最優先するのは、ファイルサーバーに置いたブックを極力短時間で開放すること。
 さあ、どうしましょ。ReadOnlyで開いて、ローカルというかマクロのあるブックに該当シートをコピーする。ひとつめのマクロがアクセスするのはこれだけ。実質的に影響なし。

 設計のポイントは、コピーを2シート作ること。ひとつは隠しシートにする。どういうことかというと、書き戻す前にブック全体について隠しシートと更新したシートを比較して「変更のあったセルだけ」を配列に入れるようにしたのだ。つまり書き戻しの時間がそれだけ減り、余計なところに手を触れない。もうひとつ、配列を作る時にセルの値が変わっていても、中が数式なら読み飛ばして更新対象としない。これやらないとあとで修正するときに不都合が生じるからね。

 ここまでやると「どこを自分が更新したか」が確定するので、自分が変更した行を書き戻す直前に、誰かが書き換えてないかを確認し、自分でなければメッセージを出して止まる(元ファイルを閉じるのを優先するのでこうなる)という動きができるようになった。その代り変更した際には、データ列の右に自分のIDと時刻を書くのよ。(そのためにデータ最終列を定数でいれるというみっともないことをやったのです。)

 書き戻そうとするとき、ファイルが開かれている可能性は無いわけではない。だから開かれているか、のチェックと、開けたか、のチェックをするようにしているが、逆にうっとうしいかもしれないなあ。一応「読み取り専用を推奨」回避なんかもやっている。

 およそ3時間で使えるものになったが、当然問題点にも気が付いている。とても喜んでくれそうな気はするが、測れる効果は薄いのだ。
 これでどれくらいの時間が節約できるか?と問うても多分
「確かにイライラは減るけど、待っている間に他のことできるし、純粋に時間だけ見ると、1分かそのくらいかなあ。」
という答えが返ってくるのではないかな。

フリーソフト開発秘話、目次
ホーム