• ベストアンサー

EXCELのSheetを自動更新できないでしょうか

掲題について質問させてください。 会社で社員各自が勤怠情報を記録しているエクセルがあります。 「勤怠10月_山田.XLS」のように名前が付けられています。 そのBookの中に、「マスタ」というSheetがあるのですが、 この内容が不定期で更新されます。(データの追加のみ) 社員は勤務先がバラバラな為、マスタ内容に更新がある度に、 各自に新しい勤怠ファイルをメールで配布しています。その後、 各自、自分が記録していた内容を新しいファイルにコピーするか、 又はマスタSheetを入れ替えるという手順になっています。 この作業が非常に面倒なのでなんとか自動化できないかと 考えた次第です。 例えばEXEファイルなどを配布して、それを起動すると指定した Bookの指定したSheetの中身が更新される、 というようなことはできないでしょうか? VB等でできないものでしょうか。 (私自身はAccessのVBAの経験しかありませんが、 VBでできるのであればがんばって勉強したいと思います。 Accessは各自の端末にインストされてないのです。) どなたかご教授いただけると大変助かります。 よろしくお願いいたします。

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

  • ベストアンサー
  • onlyrom
  • ベストアンサー率59% (228/384)
回答No.2

>この作業が非常に面倒なので コピーするだけですから別に面倒ではないのでは?(^^;;;; 方法が色々あるとは思いますが、簡単なサンプルをアップしておきます。 ExcelVBAです。 送付するブックのThisWorkBookモジュールに以下を置いておくと そのブックが開かれたときに自動で動き出します。 '--------------------------------------------------- Private Sub Workbook_Open()  Dim Msg  Dim myKintai As Workbook  MsgBox "マスタの更新を始めます" & vbLf & vbLf & _      "このメッセージを閉じるとファイルを開くダイアログが出ますので" & vbLf & vbLf & _      "勤怠ファイルを開いて下さい", vbInformation SelectKintai:   Msg = Application.Dialogs(xlDialogOpen).Show    If Msg = False Then      MsgBox "キャンセルはダメよ! 勤怠ファイルを開け! " & vbLf, vbCritical      GoTo SelectKintai    End If   Msg = MsgBox("更新するのは、" & ActiveWorkbook.Name & _          " でいいですね? " & vbLf, vbYesNo)    If Msg = vbNo Then      ActiveWorkbook.Close False      GoTo SelectKintai    End If  Set myKintai = ActiveWorkbook   ThisWorkbook.Worksheets("新マスタ").Cells.Copy _         myKintai.Worksheets("マスタ").Range("A1")  Application.DisplayAlerts = False    myKintai.Save    myKintai.Close  Application.DisplayAlerts = True  MsgBox "更新は終了しました ", vbInformation, "終了"    Application.Quit    ThisWorkbook.Close False End Sub '--------------------------------------------------------- ●これは途中で止めることはできません。 要するにこのプログラムが動きだしたら更新終了まで止められないということです。 更新するかどうかのメッセージを出すこともできますが、 更新しないを選んで、更新したつもりになると拙いですから。   私見ですが、今回のはコピー程度のことですから、現在の手動の方法がベターだと考えます。 自動更新するなら、更新するファイルを間違った場合の対策などは考えられることを全て講じておかないと。

hdmysd
質問者

お礼

手動のほうがシンプルでよいですかね。やっぱり。 レスありがとうございました。

その他の回答 (1)

  • s-matu
  • ベストアンサー率20% (1/5)
回答No.1

VBで可能でしょう。(エクセルVBAでできることは基本的にVBでできます。エクセルの「マクロの記録」機能とかで勉強するとやりやすいです。) が、ちょっと疑問に思ったので、参考までに意見です。 ・VBで作ったEXEは単体で動かないかも。その場合、初回はインストール作業が必要になり、結局煩雑かもしれませんね。 (VB6までしか知らないのですが、最近のVBではどうなんでしょうか。。。) ・exeファイルを実行して、更新するエクセルファイルを指定して更新を実行するのと、シートをコピーするのでは、対して手間は変わらなさそうでは? ・「マスタ」シートだけ別のエクセルファイルにして、  勤怠エクセルファイルと同じフォルダに置くなどして、参照するようにしてはどうでしょうか?  マスタのエクセルファイルを上書きしてもらうだけで済みそうですが。

hdmysd
質問者

お礼

レスありがとうございました。 参考にさせていただきます。

関連するQ&A

専門家に質問してみよう