Во-первых, каждая переменная, которой назначается объект Range, может быть объявлена как Range, а не Variant.Кроме того, диапазоны, которые передаются в SUMIF, не кажутся правильными.Первый аргумент или диапазон критериев должен быть того же размера, что и третий аргумент или диапазон суммы.Поэтому я собираюсь предположить, что диапазоны, назначенные для MyRg1 и MyRg2, должны быть наоборот.Итак, для начала у нас должно быть следующее ...
Dim MyRg1 As Range
Dim MyRg2 As Range
Dim MyRg3 As Range
'set criteria range
Set MyRg1 = Range("$K$15:$K$18")
'set criteria
Set MyRg2 = Range("B2:B3")
'set sum range
Set MyRg3 = Range("$L$15:$L$18")
Во-вторых, вы не сможете использовать WorksheetFunction.Sumproduct таким образом.Однако вы можете использовать метод Evaluate.
GrandTotal = Evaluate("SUMPRODUCT(SUMIF(" & MyRg1.Address & "," & MyRg2.Address & "," & MyRg3.Address & "))")
Обратите внимание, что метод Evaluate имеет ограничение.Он не принимает более 255 символов.В любом случае, поскольку вы хотите перенести результат в ячейку, вы можете сначала ввести фактическую формулу в ячейку, а затем преобразовать ее в значение ...
With cell
'enter the formula in the current cell
.Formula = "=SUMPRODUCT(SUMIF(" & MyRg1.Address & "," & MyRg2.Address & "," & MyRg3.Address & "))"
'convert the formula into a value
.Value = .Value
End With
Надеюсь, это поможет!