サンプル

共同編集を使わずにファイルを共有・編集(エクセルVBA)

VBAを使ってエクセルのファイルを複数のユーザーで共有し、同時に編集できるようにしてみましょう。

OneDriveに保存すれば共同編集が可能ですよね。

そのとおりです。ただし、VBAを使っているファイルは共同編集ができません。また、法律事務所の場合、セキュリティ上の観点からデータをOneDrive上に保存できないところもあると思います。
データをエクセルの外部にレコードごとのCSV(TSV)ファイルで保存するようにすれば、VBAを使う場合でも、データファイルを安全な領域に保存したうえで共同編集することが可能になります。

でも、なんだか難しそうですね。
お手柔らかにお願いします!

ダウンロード

まずは、サンプル・ファイルをダウンロードしてください。

使用方法

使用手順

  • 「オプション」シートを開いて、TSVファイルのフォルダ名を入力してください。
  • 「データ」シートの「キー1」列に適宜の番号を入力してください。
  • 「データ」シートの「キー2」列に適宜の識別名(入力者名など)を入力すると「キー1」と「キー2」をファイル名にしたTSVファイルが指定したフォルダ内に生成されます。
  • 各フィールドにデータを入力すると、上記TSVファイルにデータが追加されます。

細部については「マニュアル」シートを参照してください。

「データ」シート
「オプション」シート
「マニュアル」シート

CSV(TSV)ファイルを使ったデータ共有の原理

エクセルファイルは複数のユーザーが開けるように読み取り専用に設定します。

ユーザーがエクセルファイルに入力したデータは、テーブルのレコード(行)ごとにCSV(TSV)ファイルファイルに保存されます。

CSVファイルはカンマを区切り文字に使うのが一般的ですが、データに「,」が使われることが考えられるため区切り文字にタブを使ったTSVファイルを使用しています。

TSVファイルのファイル名をテーブルの「キー1」と「キー2」の組み合わせにすることにより、簡易的な排他制御を実現しています。マクロを書き換えれば「キー」数を変更することもできます。

TSVファイルへの書込みに際してはテーブルの更新日時とTSVファイルのタイムスタンプを比較し、他の人が変更したデータを上書きする場合はメッセージを表示するようにしています。

エクセルファイル自体にはデータが保存されませんので、セキュリティ上の問題を生じにくくすることができます。

マクロの構造

プロジェクトの構成

いちばん重要なのは、データシートに変更があった場合(Worksheet_Change)に対象となるテーブルのレコードをTSVファイルに書き込む(WriteToTSV)処理です。
あとは、必要に応じてTSVファイルを全て読みこんだり、書き込んだりしています。

マクロの全体的な構造は分かりました。あとはプログラムの細部ですね。

そうですね。それについては、サンプルファイルのコードにできるだけ詳しいコメントを付けてありますので、そちらをご覧ください。

このマクロの作成にあたっては、次のサイトの記事を参考にさせていただきました。
素晴らしいアイデアを公表していただけた井上 治様に感謝申し上げます。

配布の問題(1つのExcelブックを大勢が開く場合の対処)

関連記事

コメント

  1. 管理人 より:

    サンプル・ファイルに次の修正を加えました。
    ・モジュールレベル変数による値の共有を引数に変更
    ・一時データの保存時、同一ファイル名がある場合は削除するように変更

  2. 管理人 より:

    次の修正を加えました。
    ・ブックを閉じる際に一時データの削除を自動的に実行
    ・上記に伴い一時データの移動機能を削除

  3. 管理人 より:

    Microsoft365を利用している場合の情報共有方法について、記事の冒頭に注意書きを追加しました。

  4. 管理人 より:

    TSVファイルを一時データではなく、データベースとして利用するように変更し、同一のエクセルファイルを全員で利用するようにしました。(Ver200)

タイトルとURLをコピーしました