1Option Explicit
23Sub GyomuJikanTenkiMacro()
4'ファイルAからファイルBに業務時間を転記するマクロです
5'ファイルA、ファイルBともに、開いてある状態からスタートするものとします
6'ファイルA、ファイルBともに、シート名はそれぞれ"Sheet1"であるものとします
78Dim ASheet As Worksheet
9Dim BSheet As Worksheet
1011Set ASheet = Workbooks("ファイルA.xlsx").Worksheets("Sheet1")
12Set BSheet = Workbooks("ファイルB.xlsx").Worksheets("Sheet1")
1314Dim BSheetSearchRange As Range 'ファイルBのSheet1のA列を検索するので、それを定義します
15Dim SheetBFoundRange As Range 'ファイルBのSheet1のA列を検索した結果を格納するための定義です
1617Dim WorkDay_A As String '検索につかう”日付”を格納するための定義です
18Dim StartTime_A As Date '業務開始時間を転記するための定義です
19Dim EndTime_A As Date '業務終了時間を転記するための定義です
2021Dim r As Range 'foreachを回すための変数です
2223ASheet.Activate '”End”を使うときは、その対象のシートをアクティブにしておかないとうまくいかないので、ここで activateしています
24For Each r In ASheet.Range("D2", Range("D2").End(xlDown))
2526 WorkDay_A = r.Value
27 StartTime_A = r.Offset(0, 1).Value 'offsetを使って、転記するための業務開始時間を得て格納します
28 EndTime_A = r.Offset(0, 2).Value 'offsetを使って、転記・格納するための業務終了時間を得て格納します
2930 BSheet.Activate '”End”を使うときは、その対象のシートをアクティブにしておかないとうまくいかないので、ここで activateしています
31 Set BSheetSearchRange = BSheet.Range("A2", Range("A2").End(xlDown))
3233 'ファイルAのシートの日付で、ファイルBの日付列をFINDします。FINDした結果をSheetBFoundRangeに格納します
34 Set SheetBFoundRange = BSheetSearchRange.Find(what:=WorkDay_A, lookat:=xlWhole)
3536 If SheetBFoundRange Then '該当する日付が見つかったら
37 With SheetBFoundRange 'ファイルBのSheet1のその行に転記していきます
38 .Offset(0, 2).Value = StartTime_A '業務開始時間
39 .Offset(0, 3).Value = EndTime_A '業務終了時間
40 End With
41 End If
42 '見つからなかったらなにもしません
4344'次の行に移ります
45Next r
4647End Sub
48