VBA:使用数组公式

时间:2020-10-18 19:17:54

标签: vba array-formulas

我想基于C和E列中的两个条件查找行号。我的数据如下:

enter image description here

我已经搜索了问题,并使用Match函数作为数组公式可以解决此问题(当我在Excel中使用它,而不是VBA时有效),但是我不知道如何将其制成数组VBA中的公式。使用“ []”或.Evaluate的不同解决方案对我不起作用(尽管那可能是我的错误)。因此,我将如何修改此代码以获得所需的结果:

Sub Test1()
    Dim rowDB As Long
    Dim wsDB As Worksheet
    
    Set wsDB = ActiveSheet
    rowDB = WorksheetFunction.Match(CDate("30.06.2020") & "EX0500-0001", wsDB.Range("C7:C366") & wsDB.Range("E7:E366"))
End Sub

我得到的错误是“错误13:类型不匹配”,所以我不确定这里是否还有其他问题,或者只是缺少数组公式。

1 个答案:

答案 0 :(得分:1)

我玩了一段时间,发现了几个问题:

似乎CDate()不喜欢“ 30.06.2020”作为输入并得到类型错误。似乎对“ 30-06-2020”感到满意,因此可以改用该格式,或者只是搜索字符串“ 30.06.2020”?只要所有日期格式都一致,就可以。

第二个参数WorksheetFunction.Match()必须是连续范围,而您的不是。另外,我认为!表达式没有意义;如果要合并范围,请使用Union()函数。但这在这里不起作用,因为如上所述,范围不连续。

我认为无法使用WorksheetFunction.Match()搜索多个值,因此您可能必须分别在Coulmn C中搜索日期和E列中的字符串。

这是我为搜索一个值而工作的一些vba:

wsDB.Range("C7:C366") & wsDB.Range("E7:E366")

此外,如果未找到匹配项,则会收到“应用程序定义的错误或对象定义的错误”,因此您需要实施一些错误处理。