(条件)在SUMPRODUCT WorksheetFunction

实际上,我需要使用Variant Arrays运行一个COUNTIFS WorksheetFunction,但是猜测在VBA中这是不可能的。 另一种方法是在VBA中编写自己的COUNTIFS函数,但我想知道是否可以在VBA中编写以下SUMPRODUCT函数…

=SUMPRODUCT(--(Table1[Col1]="Something"),--(Table1[Col2]="Something")) 

如果我们能做到这一点,那么我不需要写我的额外function。 不知道哪个会更快。

如果您只是使用结构化表引用来查找一个可操作的COUNTIFS函数,那么ListObject对象及其属性就是要走的路。

 Sub dermal() Dim hdr1 As Long, hdr2 As Long, cntif As Long Dim str As String, app As Application Set app = Application With Worksheets("Sheet1").ListObjects("Table1") hdr1 = app.Match("Col1", .HeaderRowRange.Rows(1), 0) hdr2 = app.Match("Col2", .HeaderRowRange.Rows(1), 0) str = "something" cntif = app.CountIfs( _ .ListColumns(hdr1).DataBodyRange, str, _ .ListColumns(hdr2).DataBodyRange, str) Debug.Print cntif End With Set app = Nothing End Sub 

较新的COUNTIFS比一个可比较的SUMPRODUCT函数快得多; 通常需要30%的时间才能完成相同的操作,即使使用了满量程范围的误差,而SUMPRODUCT已经被精简到最小的数据范围。

如果你绝对需要挤出每毫秒,并要求与内存处理的变种arrays,那么我会推荐一个类结构使用筛选方法在Excel VBA中通过assylias 过滤二维数组 。