複数PCからのエクセルブック登録マクロ

このQ&Aのポイント
  • 複数のPCからサーバー上の1つのエクセルブックに登録処理を行う方法について教えてください。
  • 複数のユーザーが同時に登録処理をした場合のバッティング回避方法について教えてください。
  • サーバーのエクセルブックが読み取り専用の場合に書き込み処理を行う方法について教えてください。
回答を見る
  • ベストアンサー

1つのエクセルブックに複数PCから登録するマクロ

お世話になります。 サーバーにある1つのエクセルブック(データ蓄積用)に、複数のユーザーがエクセルの登録フォームからマクロを使って登録の処理を行いたいと思っています。 この場合のバッティング回避方法を教えて頂けないでしょうか? 登録フォームのマクロ内容は、「登録ボタンを押した時、サーバーのエクセルブックを開き、今回データを1行追加書き込み後、上書き保存して閉じる」というものです。 問題は、複数のユーザーがたまたま同時に登録処理をした場合、後からサーバーのエクセルブックにアクセスしたユーザー側は、読み取り専用のために書き込み出来ず、エラーになると思われることです。 そこで、登録フォームのマクロを「サーバーのエクセルブックが読み取り専用の場合、読み取り専用じゃなくなってから書き込み処理」とすれば良いのではないかと考えました。 他のユーザーが書き込みのためにブックを開いている時間はほんの一瞬だから、可能な気がするのですが・・・。 実際、これは可能でしょうか? もし、可能であれば具体的なサンプルコードを記述頂ければ大変ありがたいです。 また、違う方法があれば、ご教授願います。 よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • chie65535
  • ベストアンサー率43% (8524/19375)
回答No.1

一番簡単なのは「サーバー上に、番兵を置く」です。 ファイルにアクセスする前に「番兵ファイルが存在していない事」を確認します。 そして「番兵ファイルが存在していない場合は、確認してすぐに番兵ファイルを新規作成」します。 この時「番兵ファイルの新規作成に失敗」した場合は「同時に新規作成しようとした他のクライアントPCが存在する」と判断して「使用中」として処理し「番兵ファイルが居なくなるまで待つ」ように処理します。 「番兵ファイルの新規作成に成功」した場合は「普通にエクセルにアクセス」して、ファイルを更新します。この時「他のクライアントPCが同じエクセルファイルにアクセスしていない事」が保証されます。 エクセルファイルの更新が正常に終了したら「番兵ファイルを削除」します。 エクセルファイルの更新時に何らかのエラーが発生し「エラーを解消しない限り、更新を行なってはいけない状況」に陥った場合は「番兵ファイルを削除しないで残しつつ、致命的エラーを報告する」ようにします。すると「番兵ファイルが何時までも消えない」ので「それ以上の更新が行なわれない」ので「更新を行なってはいけない状況で、更新処理を行なってしまう」という事故が防げます。つまり「意図的にデットロック状態にする」ことで「更新の禁止」をするのです(エラーが解消したら、手動で番兵ファイルを削除して、通常状態に復帰させます) 良く判らない場合は「セマフォ」で検索して下さい。 http://e-words.jp/w/%E3%82%BB%E3%83%9E%E3%83%95%E3%82%A9.html

veryhot
質問者

お礼

ありがとうございます。 イメージがつかめました。

その他の回答 (1)

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.2

ここへ質問を出す前に、Googleで「ACCESS 更新制御」や「ACCESS 排他制御」などの記事がたくさんあるから、それを読んで考えること。 Accessを挙げたのは、データべーうソフトとしては仕組み的に簡単なレベルだと思うので例示しただけ。Oracleなどでも関連した解説があろう。 ーー (1)メモリの中は瞬時に変化して当てにできないし他のユーザーの使用メモリを覗くことは、勧められないので、ディスクという、情報を固定するところのデータを当てにすること(2)1か所で管理すること (3)アクセスするものは、もれなく事前に参照する(許可を得る)仕組みにすること そういう場所を作って共同利用者は、いつもそれを守る仕組みにしないといけない。 #1のご回答もあるが、使用中の状態のほかに、加えてエラーなどのステータス的なものも必要ではないかな。 コンピュタ屋さんが考えることは、似ている。伝統がある。 参考 「セモファ」とは https://ja.wikipedia.org/wiki/%E3%82%BB%E3%83%9E%E3%83%95%E3%82%A9 由来は単線区間の通行可能権利を示す器具のこと 「センチネル」とは https://ja.wikipedia.org/wiki/%E3%82%BB%E3%83%B3%E3%83%81%E3%83%8D%E3%83%AB 番兵や監視兵に由来。

veryhot
質問者

お礼

自分で調べろなんて回答はいりません。

関連するQ&A

  • excelの共有bookでのデータの共有の仕方について

     エクセルで、フォームを使ってデータ入力をし、データを蓄積(行が下へ伸びてゆく)していくファイルがあるのですが、複数の人がネットワーク上で同じファイル(共有book)を開いて作業するイメージで質問です。  フォーム上に入力したデータをエクセルシートに落とす前に、1回保存-シートへ書き込み-再度保存とやれば、データがバッティングせず、うまく蓄積されていくのかなと漠然と思っていたのですが、うまくいきませんでした。  これは、1回保存すれば、他の誰かが作業したデータを自分の開いているbookに反映させ、そのデータにフォームのデータを追加して行くというというように考えていたのですが、この考え方は間違っているのでしょうか?また、ほかに何か良い方法があるでしょうか?  

  • 複数エクセルブックを一つにするマクロが知りたいです

    フォルダ内に「01.xlsx」「02.xlsx」…「10.xlsx」という10個のブックがあります。 各ブックの中には、ブック名に対応した形で「01」「02」…「10」というシート名のシートが一つだけ入っています。 同フォルダ内に「matome.xlsx」というブックを用意して、マクロ処理をかけることで、「matome.xlsx」の中に「01」「02」…「10」のみの10個のシートが入った状態にしたいです。 マクロ処理をかける前の「matome.xlsx」のシートには、「sheet1」という、シートが一つだけ入っている状態です。 仕事のデータをまとめるのに、困っています。。。 何かいい方法はありますでしょうか。 マクロに詳しい方、お教えいただければ幸いですm(_ _)m

  • エクセル マクロ個人用マクロブックについて。

    エクセルのマクロでの個人用マクロブックでの保存がうまくできません。 表題の件で質問させてください。1台のPCにマクロを数項目登録して色々なエクセルで運用したいんですが 個人用マクロブックで登録するとマクロ作成済みのエクセルを開かなくても良いと知恵袋に見ましたので個人用マクロブックに 名前を入力してマクロ登録致しました。 実際3個作ったはずですがいちばん最初に作ったマクロしか選ぶことができません。どうしたらいいでしょうか? まれに全てのエクセルを閉じて再起動したりすると時たま他のマクロがある時もありますが5個に1回位です。 色々とマクロ作成して作業したいのですが作成したマクロが出てこないで困っています。 対処の仕方ご教授ください。 宜しくお願い致します。

  • エクセル:複数ブックをマクロを使い同一条件で集約・抽出したい

    教えて下さい 複数のエクセルブックがあります(全て1フォルダーに集約してある) それぞれA列に日付、B列に金額が入っている 複数あるブックを指定する日付で次から次へと検索しその金額とファイル名を新しいブックに縦に全てコピー(抽出)したい ちなみに、必ず条件にあうデータがそれぞれのブックにあるとは限りません 無い場合もあります 無い場合は特に抽出する必要はありません ========================================================= 例:2007/12のデータを抽出したい ★抽出結果イメージ    A      B    C 1 2007/12   200   ああああ.xls 2 2007/12   300   いいいい.xls 3 2007/12   100   うううう.xls 4   ・      ・      ・ 5   ・      ・      ・ 6   ・      ・      ・ 7   ・      ・      ・ ========================================================= このような場合、マクロでできますか?マクロは初心者です 教えてください よろしくお願いします 複数あるブックとは数的に60とかあります ちなみに現状はファイルを一つ一つ開き、指定日付を検索し見つけだし その行をコピーペーストしています たくさんブックがあるので、これをしていると目がチカチカしてきてしまいます この作業がマクロでできると、すごく感激なのですが・・・ どなたか、お知恵・お力をおかしくださいませ

  • エクセル:ツールバーへのマクロ登録について

    エクセル2002でユーザー設定ツールバーのボタンに個人用マクロブックのマクロを登録して使用しています。 同じ登録を複数の人のPCに設定しているのですが、ある人のPCで、たまに”'PERSONAL.XLS'は既に開いています~”のメッセージがでるのですが、マクロの登録画面でマクロ名を変更すると使えるようになります。 普通に使えるときのマクロ登録画面に表示されるマクロ名は「PERSONAL.XLS!マクロ名」なのですがメッセージがでたときのマクロ名は「C:\Documents and Settings~」に変わっています。 どういう条件で使用するとこうなるのかおわかりになる方がいらっしゃったらお教えください。 よろしくお願いします。

  • マクロを登録すると別のブックにも登録されてしまう

    エクセル2007をwindows7で使っています。 簡単なマクロを作ってクイックアクセスツールバーにビックリマークを選び、それにマクロを割り当てました。 それは良いのですが、同じパソコンにおいてある別のブックにもそのビックリマークが現れていて,おまけにちゃんと動作します。 二つはいらないのですがどうして目的外のブックにマクロが登録されてしまうのでしょうか。

  • Excel 2007: マクロブックをXLSTARTに入れると挙動がおかしくなる?

    いつもお世話になります。 マクロの配布を容易にするため、ブックにマクロを添付して、  C:\Documents and Settings\ユーザー名\   Application Data\Microsoft\Excel\XLSTART に置いてください、と言おうと思っているんですが、これに関連して以下のようなことが起きます。 (1)個人用マクロブックを作るとExcelが一発で閉じなくなる Excelでマクロを作って、個人用マクロブックに保存すると、以下のブックができる。  C:\Documents and Settings\ユーザー名\   Application Data\Microsoft\Excel\XLSTART\PERSONAL.XLSB このファイルができると、以下のように挙動が変わる。 1) 適当なブックをダブルクリックすると、Excelが起動し、そのブックが開く。 2) ウィンドウ右上端の[X]ボタンをクリックしてExcelを閉じようとすると、ブックだけが閉じて、Excelは終了しない<=ここが問題 3) もう1回[X]ボタンをクリックすると、Excelは終了する (2)任意のマクロ付きブックをXLSTARTに入れると、新規文書が開かなくなる Excelでマクロを作って、任意のブックに保存する。 Excel 2007で使う人と、2003で使う人がいるので、xlsで保存する。 ブックを非表示にして、XLSTARTディレクトリに入れると、個人用マクロブック同様にExcel起動時に開かれるので、マクロが使える。 こうすると、上の(1)の現象に加えて、さらに、以下の現象が発生する。 1) Excelを起動すると、通常は白紙の新規ブックが作成されるが、なぜか作成されず、Excelのみが起動される。 以上です。 任意のマクロブックをXLSTARTに入れながら、起動時に白紙のブックが開き、[X]クリックでExcelが一発で終了する方法はあるでしょうか。 よろしくお願いいたします。

  • 複数のブックのデーターをひとつにできますか?

    複数のブックにシートが1個づつ、中は同じ種類のタイトルデータ、記号やコメント文章、同じなんですが、これらのブックを新しいブックのシートに指定したブックの順番にデーターが、繋ぎ合わさせることって、できるのでしょうか? たとえば、50個づつのデータが入っているファイルが10個あるとすれば、 新しい11個めのエクセルファイルのシートにデータが500個となる。 こんなことって出来ますか? できるとすれば、マクロという方法ですか? 難しいでしょうか? マクロを書いてくれるようなサービスはないでしょうか? 有るとすれば、どのような単語で検索すれば、マクロを作ってくれるサイトが見つかるでしょうか?

  • 2つのEXCELのブック間でのマクロの呼び出し方

    お世話になります、 あるExcelのブック「Book1」でセルが選択された イベントで別のブック「Book2」に登録されている マクロ「Macro(str,number)」を呼び出したいのですが どのようにすればいいでしょうか? よろしくお願いします。 具体的なソース等がありましたらよろしくお願いします。

  • EXCELのマクロで忠告文について。

    EXCELのユーザーフォームについて質問です。 マクロで処理時間が少し長いコードがあります。 ユーザーフォームでデータを入力してCommandButton1を押すとそのマクロが動く仕組みです。 処理時間が少し長いので 「ただいま、処理中です。 しばらくお待ちください」 といった忠告文を出したいです。 msgboxのようにOKボタンを押さずに、処理が終了したら忠告文が自動で消えるようにしたいです。 どのようにすればできますか? よろしくお願いします。

専門家に質問してみよう