2

我正在尝试让 Application.WorksheetFunction.SumProduct wsf.CountIfs 与 4 个数组一起使用。到目前为止,我总是得到不正确的结果 a1 和 b1 :(

这是我的代码:

Dim lastrow As Long
Dim wsf
lastrow = Sheet2.Cells(Sheet2.Rows.Count, "M").End(xlUp).Row
Set wsf = Application.WorksheetFunction

Doctors = Array("Peter","Sam","Henry")
Emergency = Array("Y","N")
Specialty = Array("GP","Specialist")
Rank = Array("Senior","Junior")

a1 = Application.WorksheetFunction.SumProduct(wsf.CountIfs(Sheet2.Range("P2:P" & lastrow), Doctors, Sheet2.Range("M2:M" & lastrow), Emergency, Sheet2.Range("O2:O" & lastrow), Specialty, Sheet2.Range("R2:R" & lastrow), Rank))

b1 = Application.WorksheetFunction.SumProduct(wsf.SumIfs(Sheet2.Range("G2:G" & lastrow), Sheet2.Range("P2:P" & lastrow), Doctors, Sheet2.Range("M2:M" & lastrow), Emergency, Sheet2.Range("O2:O" & lastrow), Specialty, Sheet2.Range("R2:R" & lastrow), Rank))

我最好的办法是通过wsf.transpose仅​​使用 2 个标准:

a1 = Application.WorksheetFunction.SumProduct(wsf.CountIfs(Sheet2.Range("P2:P" & lastrow), Doctors, Sheet2.Range("M2:M" & lastrow), wsf.Transpose(Emergency))) 

同样不适用于超过 2 个标准。

有什么线索吗?

4

1 回答 1

0

我可能弄错了,但是通过阅读您的代码,我了解到您现在不是将 SUMPRODUCT 应用于4 个数组,而是将其应用于1 个值(一个),因为任何 COUNTIFS 的结果都是整数而不是数组,并且您只使用一个 COUNTIFS,并且通过阅读 vba 中的代码,您只有一个为 SUMPRODUCT 函数声明的参数(在“a1”的最后一个括号之前添加一个“,”将启动第二个参数/数组的声明语句,而不是5)。因此,代码中声明的 4 个数组用于计算符合条件的编号。单元格/案例不作为 SUMPRODUCT 函数的数组。因此,如果:

a)您想将 SUMPRODUCT 应用于 4 个整数(??? 冗余),您应该使用 4 个 COUNTIFS,如下所示:

Dim CountDoctors, CountEmergency, CountSpecialty, CountRank As Integer
CountDoctors = wsf.CountIfs(Sheet2.Range("P2:P" & lastrow), Doctors)
CountEmergency = wsf.CountIfs(Sheet2.Range("M2:M" & lastrow), Emergency)
CountSpecialty = wsf.CountIfs(Sheet2.Range("O2:O" & lastrow), Specialty)
CountRank = wsf.CountIfs(Sheet2.Range("R2:R" & lastrow), Rank)
a1 = Application.WorksheetFunction.SumProduct(CountDoctors, CountEmergency, CountSpecialty, CountRank)
' In this case the SUMPRODUCT does nothing special and you can simply use
' a1 = CountDoctors + CountEmergency + CountSpecialty + CountRank

乙)。您想使用 4 个范围/数组(就像使用 SUMPRODUCT 的真正功能一样)您应该使用代码过滤 PMOR 列(如果需要可以提供),然后根据第 5、6 个创建“合格”的 sumproduct 范围/数组和数据集中的第 X 列,其值为数字(长),如工作时间、工资支付、否。耐心、加班等等。

你想用 SUMPRODUCT 函数做什么?也许 COUNTIFS 上的 SUBPRODUCT 有一个解决方法

于 2013-11-12T22:41:02.317 回答