如何将这个sumifs公式更改为VBA宏。
=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公式中使用not = 0然后执行指定的操作,否则转到下一个进程。
A1是第一个标准值, B1是第二个标准值, C1是第三个标准值
答案 0 :(得分:3)
使用Application.WorksheetFunction访问工作表函数。
根据{{3}},您需要将您的参数提供为Range
个对象。
因此,您需要获取要评估的每个范围,并将其声明为范围对象。在Excel中,the documentation for SumIfs是Range object的成员,因此您需要指定范围所在的工作表。您可以通过从Worksheet object指定名称或索引号来执行此操作。
例如。可以使用Sheet2!A1
SomeRange = Sheets("Sheet2").Range("A1")
现在,Worksheet对象是Sheets Collection的成员,因此您还可以指定所需的工作簿 - 但是如果您阅读上面的文档链接,您将看到默认的Sheets集合是ActiveWorkbook - 所以我们依靠这个来保持示例简单。
因此,要传递所有SumIfs参数,您可以执行以下操作。 虽然这可能不是最优雅的解决方案,但我认为应该很容易理解它是如何工作的。
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