https://msdn.microsoft.com/en-us/library/office/ff193011.aspx
Sub test()
Dim Arg1 As Range 'the range i want to sum
Dim Arg2 As Range 'criteria range
Dim Arg3 As Variant 'the criteria
'Arg1 and Arg2 must be the same size
Set Arg1 = Sheets("Sheet1").Range("B2:B100")
Set Arg2 = Sheets("Sheet1").Range("C2:C100")
'this is the criteria
Arg3 = "=False"
Dim ws As Worksheet
Set ws = ActiveSheet
Dim i As Integer
For i = 2 To 12
ws.Cells(i, 8).Value = Application.WorksheetFunction.SumIfs(Arg1, Arg2, Arg3)
Next
End Sub
Вы также можете указать arg3 как вариант и пройти ряд одноклеточных, если он имеет критерии. Критерии могут быть True/False (= False), числом (20) или строкой ("> 100").
Dim Arg3 As Variant 'the criteria
Arg3 = Sheets("Sheet2").Range("A2")
EDIT: Я понял, что вы пытались сделать. Каждая ячейка в Arg3 является отдельным критерием, на который вы хотите включить SumIf. Вот пересмотренный код.
Sub test2()
Dim ThisWB As Workbook: Set ThisWB = ThisWorkbook
Dim i As Integer
Dim LastColumn As Integer: LastColumn = 3
Dim Arg1 As Range 'the range i want to sum
Dim Arg2 As Range 'criteria range
Dim Arg3 As Range 'the criteria (range)
Set Arg1 = ThisWB.Sheets("Sheet1").Range("B2:B100")
Set Arg2 = ThisWB.Sheets("Sheet1").Range("C2:C100")
Set Arg3 = ThisWB.Sheets("Sheet2").Range("A2:A12")
For i = 2 To 12
Workbooks("x.xlsx").Worksheets("Sheet2").Cells(i, LastColumn) _
= Application.WorksheetFunction.SumIfs(Arg1, Arg2, Arg3.Cells(i - 1, 1).Value)
Next
End Sub
Обратите внимание, как Arg3 используется в SUMIFS Arg3.Cells(i - 1, 1).Value
. Также обратите внимание, что Arg1 и Arg2 должны быть одного размера.
Я пробовал сольватацию, но он не работает: Подстрочный код вне диапазона. Есть ли у вас какие-либо идеи? Заранее спасибо –
Вам нужно выяснить, какая линия и какой элемент находится за пределами допустимого диапазона. У вас на самом деле уже есть рабочая книга с именем «x.xlsx»? У вас есть «Sheet2»? и т. д. Код работал отлично для меня, поэтому что-то другое. Если вы не можете понять это, задайте другой вопрос. Ваша проблема SumIf (ошибка несоответствия) уже решена. Теперь вы спрашиваете об ошибке вне диапазона; это отдельная проблема и должен быть отдельным вопросом. –
Да, ты был прав. Я ошибся, попробовав код. Теперь я снова попробую снова с большим вниманием, и он работает. Так что большое спасибо! –