WorksheetFunction.SumIfsで複数シートから集計を行い、複数のセルに転記したい
解決したいこと
業務にて、従業員ごとの1か月分の売上集計をしています。
集計元のワークシート(日付ごと・同じフォーマット)からSUMIFS関数で集計し、別シート("集計")のセルに転記していきたいです。
ワークブックの構成は以下の通りです。
・集計対象としないワークシート×3、ワークシート"集計"→ コード上でa,b,c,dとします
・集計対象とする毎日の売上表(ワークシート名は"yyyy/mm/dd")
L3:L45にスタッフ名、H3:H45に集計対象となる売上金額が入力されています。
ワークシート"集計"への転記時には列にスタッフ名、行に日付を入れようとしています
ex. B1=山田 C1=加藤 D1=佐藤、、、、、、
A2=1日 A3=2日 A4=3日、、、、、
B2=ワークシート"20220501"内の山田の売上 C2=ワークシート"20220501"内の加藤の売上、、、
B3=ワークシート"20220502"内の山田の売上 C3=ワークシート"20220502"内の加藤の売上、、、
発生している問題・エラー
ワークシート名とセルを紐づける方法が浮かばないのと、そもそも全体のコードがいまいちはっきりしていません。
該当するソースコード
まず試しに1人分の集計をテストしてみました。
Sub test()
'シート名を指定して1日分の合計を転記する
With Worksheets("20220501")
Worksheets("集計").Cells(2, "B") = WorksheetFunction.SumIf(.Range("L3:L45"), "山田", .Range("H3:H45"))
End With
End Sub
これは正常に動きましたので、これをすべてのワークシートでループさせればと思い今度はFor文とIF notを混ぜて、集計対象としたいワークシートのみをループさせるようにコードを書いてみました。
ですがこれがうまく動きません。エラーも出ず、ただ転記先が空白のまま。
また、これだと1か月分を集計してB2に転記してしまうので、やりたいこととずれてしまうと途中で気づきました。
Sub syuukei()
'使わないsheet名を定義
Dim a As Worksheet
Dim b As Worksheet
Dim c As Worksheet
Dim d As Worksheet
Set a = Worksheets("集計対象外1")
Set b = Worksheets("集計対象外2")
Set c = Worksheets("集計対象外3")
Set d = Worksheets("集計")
'for文で繰り返し、シート名がa,b,c,dに一致するものをif not~で除外する
Dim sheetNo As Integer
For sheetNo = 1 To Worksheets.Count
If Not Worksheets(sheetNo).Name = a.Name And Worksheets(sheetNo).Name = b.Name And Worksheets(sheetNo).Name = c.Name And Worksheets(sheetNo).Name = d.Name Then
With Worksheets(sheetNo)
Worksheets("集計").Cells(2, "B") = WorksheetFunction.SumIf(.Range("L3:L45"), "山田", .Range("H3:H45"))
End with
End If
Next
End Sub
これが機能しないことと、
Worksheets("集計").Cells(2, "B")の部分をどのようにしたらワークシート名と連動させられるのかが今の問題です。
よろしくお願いいたします。
自分で試したこと
今調べてできる中でコードを書きました。