VBA,MATCH函数不返回正确的值

时间:2011-06-29 11:13:16

标签: vba date

我从VBA代码调用Match函数时遇到问题:它返回错误的值。 我有一个像这样的speadsheet(这是一个例子):

        a               b       c                   d
1   testRange               testValue   
2   01/01/2011 00:00        03/01/2011 00:00    testValue = A4
3   02/01/2011 00:00            
4   03/01/2011 00:00        result from match function  
5   04/01/2011 00:00        3                   testResult = MATCH(C2,A2:A20,1)
6   05/01/2011 00:00            
7   06/01/2011 00:00        testResult  
8   07/01/2011 00:00        9   
9   08/01/2011 00:00            
10  09/01/2011 00:00            
11  10/01/2011 00:00            
12  11/01/2011 00:00            
13  12/01/2011 00:00            
14  13/01/2011 00:00            
15  14/01/2011 00:00            
16  15/01/2011 00:00            
17  16/01/2011 00:00            
18  17/01/2011 00:00            
19  18/01/2011 00:00            
20  19/01/2011 00:00            

我正在搜索的范围在A1:A20中,我正在寻找在C2中写的值,正如您所看到的只是范围的值(这是为了确保该值在范围)。我希望Match函数返回数字3,就像从电子表格(单元格C5)调用时一样,但是在VBA中调用的函数返回值9(单元格C10)。我用了这段代码:

Sub testMatch()
    testRange = Range("A2:A20")
    testValue = Range("C2")
    testResult = Application.WorksheetFunction.Match(testValue, testRange, 1)
    Range("C8") = testResult
End Sub

我已经尝试将testValue转换为Date和Double(在其他论坛中建议的解决方案),但是使用Date我有相同的结果,而且我得到错误1004“无法获取WorksheetFunctions类的Match属性“

有什么建议吗?

由于

1 个答案:

答案 0 :(得分:4)

正如其他论坛所建议的那样,您应该键入变量(日期...)并使用Option Explicit

在这种情况下,错误来自match函数中日期的使用,试试这个:

Application.WorksheetFunction.Match(CLng(testValue), testRange, 0)

(编辑>来源:感谢此thread

我已经测试了你的例子,它对我有用。

此致

最高