在VBA中使用多个SUMIFS

如何将这个sumifs公式转换成VBAmacros?

=SUMIFS('Staff Allocation'!N3:N6,'Staff Allocation'!B3:B6,Sheet2!A1,'Staff Allocation'!E3:E6,Sheet2!B1,'Staff Allocation'!F3:F6,Sheet2!C1) +SUMIFS(Modules!H2:H4,Modules!B2:B4,Sheet2!A1,Modules!G2:G4,Sheet2!B1,Modules!E2:E4,Sheet2!C1) 

所以它可以用于if公式不= 0,然后执行指定的操作,否则移动到下一个进程。

A1是第一个标准值,B1是第二个标准值,C1是第三个标准值

您使用Application.WorksheetFunction访问工作表函数。 根据SumIfs的文档,你需要提供你的参数作为Range对象。

所以你需要把你想要评估的每个范围,并声明为一个范围对象。 在Excel中, Range对象是Worksheet对象的成员,因此您需要指定范围所在的工作表。 您可以通过从表格集合中指定名称或索引编号来完成此操作。 例如Sheet2!A1可以使用SomeRange = Sheets("Sheet2").Range("A1")

现在,Worksheet对象是Workbook对象的成员,因此您还可以指定想要的工作簿 – 但是,如果通过上面的文档链接阅读,则会看到Sheets集合的默认值是ActiveWorkbook – 所以我们将依靠这个来保持简单的例子。

所以要传递所有的SumIfs参数,你可以做如下的事情。 当然,这可能不是最优雅的解决scheme,我认为应该很容易理解它是如何工作的。

 Sub Foo() Dim Arg1 as Range Dim Arg2 as Range Dim Arg3 as Range Dim Arg4 as Range Dim Arg5 as Range Dim Arg6 as Range Dim Arg7 as Range Dim Arg8 as Range Dim Arg9 as Range Dim Arg10 as Range Dim Arg11 as Range Dim Arg12 as Range Dim Arg13 as Range Dim Arg14 as Range Set Arg1=Sheets("Staff Allocation").Range("N3:N6") Set Arg2=Sheets("Staff Allocation").Range("B3:B6") Set Arg3=Sheets("Sheet2").Range("A1") Set Arg4=Sheets("Staff Allocation").Range("E3:E6") Set Arg5=Sheets("Sheet2").Range("B1") Set Arg6=Sheets("Staff Allocation").Range("F3:F6") Set Arg7=Sheets("Sheet2").Range("C1") Set Arg8=Sheets("Modules").Range("H2:H4") Set Arg9=Sheets("Modules").Range("B2:B4") Set Arg10=Sheets("Sheet2").Range("A1") Set Arg11=Sheets("Modules").Range("G2:G4") Set Arg12=Sheets("Sheet2").Range("B1") Set Arg13=Sheets("Modules").Range("E2:E4") Set Arg14=Sheets("Sheet2").Range("C1") If Application.WorksheetFunction.SumIfs(Arg1,Arg2,Arg3,Arg5,Arg6,Arg6,Arg7) + Application.WorksheetFunction.SumIfs(Arg8,Arg9,Arg10,Arg11,Arg12,Arg13,Arg14) > 0 Then 'Do Something Else 'Do Something Else End IF End Sub