- ベストアンサー
EXCELのSheetを自動更新できないでしょうか
掲題について質問させてください。 会社で社員各自が勤怠情報を記録しているエクセルがあります。 「勤怠10月_山田.XLS」のように名前が付けられています。 そのBookの中に、「マスタ」というSheetがあるのですが、 この内容が不定期で更新されます。(データの追加のみ) 社員は勤務先がバラバラな為、マスタ内容に更新がある度に、 各自に新しい勤怠ファイルをメールで配布しています。その後、 各自、自分が記録していた内容を新しいファイルにコピーするか、 又はマスタSheetを入れ替えるという手順になっています。 この作業が非常に面倒なのでなんとか自動化できないかと 考えた次第です。 例えばEXEファイルなどを配布して、それを起動すると指定した Bookの指定したSheetの中身が更新される、 というようなことはできないでしょうか? VB等でできないものでしょうか。 (私自身はAccessのVBAの経験しかありませんが、 VBでできるのであればがんばって勉強したいと思います。 Accessは各自の端末にインストされてないのです。) どなたかご教授いただけると大変助かります。 よろしくお願いいたします。
- みんなの回答 (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 '--------------------------------------------------------- ●これは途中で止めることはできません。 要するにこのプログラムが動きだしたら更新終了まで止められないということです。 更新するかどうかのメッセージを出すこともできますが、 更新しないを選んで、更新したつもりになると拙いですから。 私見ですが、今回のはコピー程度のことですから、現在の手動の方法がベターだと考えます。 自動更新するなら、更新するファイルを間違った場合の対策などは考えられることを全て講じておかないと。
その他の回答 (1)
- s-matu
- ベストアンサー率20% (1/5)
VBで可能でしょう。(エクセルVBAでできることは基本的にVBでできます。エクセルの「マクロの記録」機能とかで勉強するとやりやすいです。) が、ちょっと疑問に思ったので、参考までに意見です。 ・VBで作ったEXEは単体で動かないかも。その場合、初回はインストール作業が必要になり、結局煩雑かもしれませんね。 (VB6までしか知らないのですが、最近のVBではどうなんでしょうか。。。) ・exeファイルを実行して、更新するエクセルファイルを指定して更新を実行するのと、シートをコピーするのでは、対して手間は変わらなさそうでは? ・「マスタ」シートだけ別のエクセルファイルにして、 勤怠エクセルファイルと同じフォルダに置くなどして、参照するようにしてはどうでしょうか? マスタのエクセルファイルを上書きしてもらうだけで済みそうですが。
お礼
レスありがとうございました。 参考にさせていただきます。
お礼
手動のほうがシンプルでよいですかね。やっぱり。 レスありがとうございました。