Я думаю, что ваш синтаксис для просмотра листов правильный, проблема только в том, что он не пересекает листы. Аналогично с другими функциями массива.
Самый разумный ответ для меня будет сделать SUMIF на каждом листе, а затем сумму.
Я думаю, что лучшим вариантом будет сделать SUMIFгде-нибудь на рабочих листах, а затем суммируйте их, используя подход, который у вас есть.
Если вы настаивали на том, чтобы обходиться без этого подхода, вы могли бы использовать этот UDF. Мне это не очень нравится, так как он не фиксирует изменения на других листах, даже с application.volatile.
Function sumifAcrossSheets(addressRng1 As Range, _
conditionToCount As Variant, _
sumRng As Range) As Double
Application.Volatile
Dim ws As Worksheet
For Each ws In ThisWorkbook.Worksheets
sumifAcrossSheets = sumifAcrossSheets + _
Application.WorksheetFunction.SumIf( _
ws.Range(addressRng1.Address), _
conditionToCount, _
ws.Range(sumRng.Address))
Next ws
End Function
Вот некоторые заметки, которые я пролежал в этом процессе (игнорируйте язвительные комментарии: