Vba 应用程序.工作表功能SUM产品问题

Vba 应用程序.工作表功能SUM产品问题,vba,excel,Vba,Excel,我有一个excel工作表,我试图使用countifs公式来计算满足多个条件的数量或记录,但是在其中一列中有多个标准,因此我将SUMPRODUCT与countifs函数一起使用 我让它在工作表中工作得很好,但我不知道如何让它在VBA中工作 这就是我所尝试的: Dim lastrow As Long lastrow = Sheet2.Cells(Sheet2.Rows.Count, "M").End(xlUp).Row FirstDate = Sheets("Sheet1").Range("C7")

我有一个excel工作表,我试图使用countifs公式来计算满足多个条件的数量或记录,但是在其中一列中有多个标准,因此我将SUMPRODUCT与countifs函数一起使用

我让它在工作表中工作得很好,但我不知道如何让它在VBA中工作

这就是我所尝试的:

Dim lastrow As Long
lastrow = Sheet2.Cells(Sheet2.Rows.Count, "M").End(xlUp).Row
FirstDate = Sheets("Sheet1").Range("C7")
SecondDate = Sheets("Sheet1").Range("E7")

   Application.Worksheetfunction.Sumproduct(CountIfs(Sheet2.Range("E2:E" & lastrow), ">=" & FirstDate, Sheet2.Range("E2:E" & lastrow), "<=" & SecondDate, Sheet2.Range("P2:P" & lastrow), {"John";"James";"Peter"}))
Dim lastrow尽可能长
lastrow=Sheet2.单元格(Sheet2.Rows.Count,“M”).结束(xlUp).行
FirstDate=板材(“板材1”)。范围(“C7”)
SecondDate=板材(“板材1”)。范围(“E7”)
Application.Worksheetfunction.Sumproduct(CountIfs(Sheet2.Range(“E2:E”和lastrow)、“>=”&FirstDate,Sheet2.Range(“E2:E”和lastrow)、“=”&Sheet1!C7,Sheet2!E2:E1000000,似乎对我有用:

Sub Tester()

    Dim v, wsf
    Dim lastrow As Long

    lastrow = Sheet2.Cells(Sheet2.Rows.Count, "M").End(xlUp).Row

    Set wsf = Application.WorksheetFunction

    v = Application.WorksheetFunction.SumProduct(wsf.CountIfs( _
        Sheet2.Range("E1:E" & lastrow), ">=" & Sheet1.Range("C7").Value, _
        Sheet2.Range("E1:E" & lastrow), "<=" & Sheet1.Range("E7").Value, _
        Sheet2.Range("P1:P" & lastrow), Array("John", "James", "Peter")))

    Debug.Print v

End Sub
子测试仪()
尺寸v,wsf
最后一排一样长
lastrow=Sheet2.单元格(Sheet2.Rows.Count,“M”).结束(xlUp).行
设置wsf=Application.WorksheetFunction
v=Application.WorksheetFunction.SumProduct(wsf.CountIfs(_
Sheet2.范围(“E1:E”和lastrow)、“>=”和Sheet1.范围(“C7”).值_

Sheet2.Range(“E1:E”&lastrow),“
CountIfs
不是VBA方法,因此您还需要使用
Application.Worksheetfunction
对其进行限定。您可能还需要将
{…}
更改为数组。并将整个表达式的返回值指定给变量。还需要更改此
{“John”;“James”;“Peter”}
{“约翰”;“詹姆斯”;“彼得”}
你能更新你的问题以包含你试图模仿的工作表公式吗?可以使用
Countifs
Sumproduct
。两者都不必使用。@TimWilliams我已经更新了这个问题。你能详细说明一下你说的使用数组是什么意思吗?我已经尝试过将返回值赋给一个变量,但是pression给出了一个错误。有什么建议吗?上面的公式一直运行得很好,但我想做一些调整,但到目前为止运气不佳。我想在3种不同的情况下使用数组作为标准,但它总是给我错误的结果:
a1=Application.WorksheetFunction.SumProduct(wsf.CountIfs(Sheet2.Range)(“P2:P”&lastrow),医生,表2.范围(“M2:M”和lastrow),急诊,表2.范围(“O2:O”和lastrow),专业))
其中
医生=数组(“彼得”、“萨姆”、“亨利”)
急诊=数组(“Y”、“N”)
专业=数组(“A”、“B”)
我也尝试过wsf.transpose方法,但这似乎只适用于两个标准。非常感谢您的见解。我看到了您的另一个问题,但无法找到解决方法。对不起,我只是在多次尝试和错误后才设法回答了这个问题。。。。