VBA使用多个阵列

时间:2018-04-02 09:21:06

标签: arrays excel vba countif

我希望使用日期数组和一系列名称从countifs中找到一个值。

“”向Jeeped喊出以下提供日期数组的代码。“”

Dim d As Long, dts As Variant
ReDim dts(DateSerial(2019, 1, 1) - DateSerial(2018, 1, 1) + 1)
    dts(0) = vbNullString
For d = DateSerial(2018, 1, 1) To DateSerial(2018, 12, 31)
    dts(d - DateSerial(2018, 1, 1) + 1) = Format(d, "m/d/yyyy") '<~~should match worksheet
Next d

R = Application.Sum(Application.CountIfs(Range("A:A"), "Stuff", Range("B:B"), dts, Range("C:C"), Array("Name1", "Name2")))

结果总是为零,“我想?”因为两个阵列都是不同的类型?或者格式是一个更好的词。

我可以在类似的countifs中使用dts数组......见下文。

Z = Application.Sum(Application.CountIfs(Range("A:A"), "stuff", Range("B:B"), dts))

然而,只要我需要为“名称”引入另一个数组,countifs行将执行并且代码运行,但是......只返回零。

R = Application.Sum(Application.CountIfs(Range("A:A"), "Stuff", Range("B:B"), dts, Range("C:C"), Array("Name1", "Name2")))

如何在countifs情境中创建一个可与dts数组一起使用的“名称”数组?

谢谢!

编辑4/2/2018下午1:00 添加示例以显示更改订单仍返回0.

在工作表中使用此功能,或重新订购下面代码中注释掉的其他行。 enter image description here 然后使用被注释掉的活动行。

Public Sub Broken()
'****************************************************************
Dim d As Long, dts As Variant
ReDim dts(DateSerial(2019, 1, 1) - DateSerial(2018, 1, 1) + 1)
dts(0) = vbNullString
For d = DateSerial(2018, 1, 1) To DateSerial(2018, 12, 31)
dts(d - DateSerial(2018, 1, 1) + 1) = Format(d, "m/d/yyyy") '<~~should match 
worksheet
Next d
'****************************************************************

        'Answer = Application.Sum(Application.CountIfs(Range("A:A"), "Z*", Range("B:B"), dts, Range("C:C"), Array("Name1", "Name2", "Name3", "Name4", "Name5")))

        Answer = Application.Sum(Application.CountIfs(Range("A:A"), dts, Range("B:B"), "Z*", Range("C:C"), Array("Name1", "Name2", "Name3", "Name4", "Name5")))

        MsgBox Answer, vbInformation
End Sub

****答案应为2

*日期在2018年之内或从dts数组中删除 *包含“Z”的列 *一个包含名称Array

的名称的列

1 个答案:

答案 0 :(得分:0)

WorksheetFunction命令的

Documentation并不是很好。最好为documentation引用相关的工作表函数。 (即,COUNTIFS vs Application.WorksheetFunction.Countifs

看起来您添加的条件无序。

COUNTIFS 语法

COUNTIFS( criteria_range1, criteria1 
        [,criteria_range2, criteria2
        [,criteria_range3, criteria3
        [,criteria_range4, criteria4]]] … )

COUNTIFS 函数语法具有以下参数:

  • criteria1 (必填)评估相关标准的第一个范围。

  • criteria1 (必填)数字,表达式,单元格引用或文字形式的标准,用于定义哪些单元格将是计数。
    例如,标准可以表示为32">32"B4"apples""32"

  • [criteria_range2, criteria2,] ... (可选)其他范围及其相关标准。
    最多允许127范围/标准对。

重要提示:

  • 每个附加范围必须与criteria_range1参数具有相同的行数和列数。范围不必彼此相邻。

更多信息: