多分こんな雰囲気でやったら出来ると思います。
VBA
1 Dim shainNo, WeekNo, jdTime, ftTime, saiTime
2
3 jdTime = WorksheetFunction.SumIfs(Columns(5), Columns(1), shainNo, Columns(7), WeekNo)
4 ftTime = WorksheetFunction.SumIfs(Columns(6), Columns(1), shainNo, Columns(7), WeekNo)
5 saiTime = jdTime - ftTime
6
ただし、Excelのバージョンが古すぎるとSUMIFSが使えないかもしれないです。
<追記>
ピボットテーブルを作るアプローチを試してみました。
VBA
1Sub MakePivot()
2
3 Dim wb As Workbook
4 Set wb = Workbooks.Open(Environ("userprofile") & "\Documents\data.csv")
5
6 Dim ws As Worksheet
7 Set ws = wb.Worksheets("data")
8
9 Dim lo As ListObject
10 Set lo = ws.ListObjects.Add(xlSrcRange, ws.UsedRange.Resize(, ws.UsedRange.Columns.Count + 1), , xlYes)
11
12 With lo.ListColumns(lo.ListColumns.Count)
13 .Range(1) = "差異時間"
14 .DataBodyRange.NumberFormatLocal = "[h]:mm"
15 .DataBodyRange.Formula2R1C1 = "=[@実働時間数]-[@普通労働時間]"
16 End With
17
18 wb.PivotCaches.Create(xlDatabase, ws.UsedRange).CreatePivotTable ws.Cells(1, lo.ListColumns.Count + 2)
19
20 Dim pt As PivotTable
21 Set pt = ws.PivotTables(1)
22 With pt.PivotFields("週番号")
23 .Orientation = xlRowField
24 .Position = 1
25 End With
26 With pt.PivotFields("社員番号")
27 .Orientation = xlRowField
28 .Position = 2
29 End With
30 With pt
31 .AddDataField .PivotFields("実働時間数"), "合計 / 実働時間数", xlSum
32 .AddDataField .PivotFields("普通労働時間"), "合計 / 普通労働時間", xlSum
33 .AddDataField .PivotFields("差異時間"), "合計 / 差異時間", xlSum
34 .DataBodyRange.NumberFormatLocal = "[h]:mm"
35 End With
36
37End Sub
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/03/08 02:46
2021/03/08 02:58