VBA:使用数组公式

VBA:使用数组公式,vba,array-formulas,Vba,Array Formulas,我想在C列和E列中根据两个条件查找行号。我的数据如下所示: 我在谷歌上搜索了我的问题,并使用Match函数作为数组公式来解决这个问题(当我在Excel中使用它时,它是有效的,而不是VBA),但我不知道如何在VBA中将其作为数组公式。不同的解决方案,无论是使用“[]”还是.Evaluate,对我都不起作用(不过,这可能是我的错误)。那么,我将如何修改此代码以获得我想要的结果: Sub Test1() Dim rowDB As Long Dim wsDB As Worksheet

我想在C列和E列中根据两个条件查找行号。我的数据如下所示:

我在谷歌上搜索了我的问题,并使用
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:类型不匹配”,因此我不确定这里是否还有其他问题,或者只是缺少数组公式。

我对此进行了一段时间的研究,发现了几个问题:

CDate()似乎不喜欢将“30.06.2020”作为输入,并得到一个类型错误。它似乎对“30-06-2020”很满意,所以可能使用该格式,或者只搜索字符串“30.06.2020”?只要所有的日期格式都一致,这应该是可以的

第二个参数必须是连续范围,而您的参数不是。另外,我认为表达式
wsDB.Range(“C7:C366”)和wsDB.Range(“E7:E366”)
没有意义;如果要合并范围,请使用该功能。但这在这里不起作用,因为正如前面提到的,范围不是连续的

我认为不可能使用WorksheetFunction.Match()来搜索多个值,因此您可能需要分别在coulmn C中搜索日期,在E列中搜索字符串

以下是我为搜索一个值而使用的一些vba:

Sub Test4()
    Dim rowDB As Long
    Dim wsDB As Worksheet

    Set wsDB = ActiveSheet
    rowDB = WorksheetFunction.Match("30.06.2020", wsDB.Range("C7:C366"))
    Debug.Print rowDB
End Sub

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

谢谢您的帮助。我不确定VBA函数,但在Excel中,您可以使用多个条件的
match
:在我的德语Excel版本中,
=VERGLEICH(DATWERT(“30.06.2020”)&“EX0500-0001”;C7:C366&E7:E366;0)
适用于我,在英文版本中应该是
=匹配(DATVALUE(“30.06.2020”)和“EX0500-0001”,C7:C366&E7:E366,0)
至于单独查看列n:这是否意味着每个循环有两个?两列都有重复的值,例如EX0500-0001,用于多个日期,因此类似于
.Find()
的内容不会有帮助,对吗?我在这方面做了更多的工作,对于CDate():由于windows的区域日期格式,我似乎收到了类型错误。当我将其更改为D-M-Y时,它工作正常。我无法使excel公式为我工作,我不知道为什么。至于vba:使用for循环检查C列中的每个单元格是否与日期值匹配,如果找到与该行匹配的单元格,请检查If E列中的值与其他值匹配:如果匹配,则完成,如果不匹配,则检查C列中的下一个单元格,等等。。。