プロが教える店舗&オフィスのセキュリティ対策術

前回お世話になりました。ありがとうございます。
下記の内容でまた質問させていただきました。よろしくお願いしたします。
[状況] 
管理シート名〈テーブル〉に下記のように各項目があります。
F列 ........H列 .......Q列
主加工 総時間 実績時間
MC
M          
L    
これとは別に〈MC〉,〈M〉,〈L〉の同様のシートがあります。
〈テーブル〉で全体の管理をできるようにしており〈MC〉,〈M〉,〈L〉はリンクさせた表です。
〈MC〉,〈M〉,〈L〉それぞれの表は”F列主加工”のデータフィルでMCはMC、MはM、LはLだけが表示されるようにしています。
〈テーブル〉の”F列主加工”にはMC,M,Lがランダムに現れます。

[教えていただきたいこと]
総時間はテーブルで管理しており、〈MC〉,〈M〉,〈L〉にはリンクされています。
加工終了後、実績時間を〈MC〉,〈M〉,〈L〉それぞれの担当者が記入できるようにします。
〈MC〉,〈M〉,〈L〉で実績時間が担当者から記入されると〈テーブル〉に実績時間が表示されて総時間がクリアされるようにしたいのですが、VBAになるのでしょうか?やり方がわかりません。
VBAは勉強し始めたばかりです。丁寧に教えていただけると大変ありがたいです。

できましたら、
・一つのBOOKで〈テーブル〉,〈MC〉,〈M〉,〈L〉シート別で行った場合
・別々のBOOKで行った場合
のご教授よろしくお願いします。


よろしくお願いしたします。

A 回答 (2件)

想像で作ってみました(別々のBOOKの場合です)。

参考になれば幸いです。
下記のプログラムをMCブックの標準モジュールに張り付けて下さい。
sample1を実行するとMCブックにTABLEシートをコピーして、実績時間(Q列)をクリアし、さらにフィルタをかけます。
実績時間を入力後、sample2を実行するとTABLEブックの実績時間を更新します。

Option Explicit
Const strTABLE As String = "C:\Users\教えてGoo\TABLE.xlsx"
Const strSHEET As String = "TABLE"
Const strKEY As String = "MC"
Dim wsTemp As Worksheet
Sub sample1()
Set wsTemp = Workbooks.Add(strTABLE).Sheets(strSHEET)
wsTemp.Copy Before:=ThisWorkbook.Sheets(1)
wsTemp.Parent.Close (False)
Set wsTemp = ActiveSheet
wsTemp.Range("Q2:Q" & Rows.Count).ClearContents
wsTemp.Range("A1").CurrentRegion.AutoFilter field:=6, Criteria1:=strKEY
End Sub
Sub sample2()
Dim wsTABLE As Worksheet
Dim LastRow As Long
Dim I As Long
Dim RowNo As Long
On Error GoTo ErrorHandler
LastRow = wsTemp.Cells(Rows.Count, "A").End(xlUp)
On Error GoTo 0
Set wsTABLE = Workbooks.Open(strTABLE).Sheets(strSHEET)
For I = 2 To LastRow
If wsTemp.Cells(I, "Q") <> "" Then
RowNo = wsTemp.Cells(I, "A")
wsTABLE.Cells(RowNo, "Q") = wsTemp.Cells(I, "Q")
End If
Next I
wsTABLE.Parent.Close (True)
ErrorHandler:
End Sub


それから、上記サブプロシジャの実行タイミングですが、MCブックを開く時にsample1を。閉じる時にsample2を実行するのが簡単かと思います。こんな感じです。

Private Sub Workbook_BeforeClose(Cancel As Boolean)
Call sample2
ThisWorkbook.Saved = True
End Sub

Private Sub Workbook_Open()
Call sample1
End Sub
    • good
    • 0
この回答へのお礼

ありがとうございます。お礼が遅れてすみません。
何とか理解しようと試みましたが、今の私の知識では???です。すみません。
もう少し整理してから教えていただきたい点をまとめたいと思いますので、その時にお知恵拝借できますか?よろしくお願いします。

お礼日時:2016/04/21 23:01

〈テーブル〉→〈MC〉はリンクでできているようですが、〈MC〉→〈テーブル〉は無理だと思います(少なくとも私には・・・)。

VBAを使って〈テーブル〉シートに書き込む必要があると思います。
やり方としては、〈テーブル〉シートに行を表す項目を作ります。例えば、A列に =Rows()とします。これを〈MC〉へ連動させ、〈MC〉側では、その値を目印に〈テーブル〉シートの実績時間セルを特定し、書き込みを行います。
〈テーブル〉シートが別ブックの場合は、ブックのオープン、書き込み、ブックの保存の処理が必要です。
いずれにしても、初心者には敷居が高そうですが、頑張ってください。
    • good
    • 0
この回答へのお礼

ありがとうございます。
おっしゃるように初心者にかなり敷居が高いです。
が、これができればかなり使いやすい表になり、なんとか実現させたいと思います。
また何かアドバイスよろしくお願いします。
A列には=Row()を入れていますが、活用できていないです。
もっと工夫してみます。ありがとうございました。

お礼日時:2016/04/18 23:33

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!