Excel VBA匹配功能不起作用

时间:2014-09-18 15:15:18

标签: vba

我正在使用INDEX和MATCH函数来拉取数据,这些数据是来自D列的G2和H2的串联字符串(抱歉,我没有足够的点来附加图片)。列D具有INDEX(列A和列B),列A和列B具有直到第12行的值。 MATCH工作正常,给我在工作表上的位置6。但是当我在VBA代码中使用它时,如下所示,INDEX在VBA代码中工作(可以通过MsgBox看到),但MATCH函数将为变量'check'分配值不起作用。我一直在打破我的头脑。需要专家的帮助。有人请告诉我哪里出错了?

Sub testindex()

Dim check As Long

Set sh = Sheets("Sheet1")

For j = 1 To 11

'Index value is correctly shown
MsgBox "Index Value=" & Application.WorksheetFunction.Index(sh.Range("A2:B12"), j, 1) & Application.WorksheetFunction.Index(sh.Range("A2:B12"), j, 2)

'Cells(7, 4)=ISA737775 same as G2&H2
MsgBox "Cells(7,4)=" & Cells(7, 4)
check = Application.WorksheetFunction.Match(Cells(7, 4), Application.WorksheetFunction.Index(sh.Range("A2:B12"), j, 1) & Application.WorksheetFunction.Index(sh.Range("A2:B12"), j, 2), 0)

Next j

End Sub

由于

1 个答案:

答案 0 :(得分:0)

匹配期望第二个参数以范围的形式出现。当您通过VBA调用匹配时,范围实际上需要是一个范围对象,而不仅仅是像“A1:A12”这样的字符串或者您的连接索引公式输出的任何内容。

无论如何,你已经在迭代了,那么为什么不直接调用这些值而不是通过Index拉出它们的值呢?

check = Application.WorksheetFunction.Match(Cells(7, 4), sh.Range("A" & 2 + j).value & sh.Range("B" & 2 + j), 0)

编写相同的内容但不必在VBA中使用税收INDEX函数来执行此操作。请注意,这仍然不起作用,因为匹配的第二个参数仍然只是一个字符串,它是来自A列和B列的连接值。您可以通过将它们粘贴到范围对象中来转换为范围:

check = Application.WorksheetFunction.Match(Cells(7, 4), sh.Range(sh.Range("A" & 2 + j).value & sh.Range("B" & 2 + j)), 0)

我假设A和B中的值是实际的单元名称,当连接时会产生一个范围。就像j=1那样,它就像check = Match(Cells(7,4),sh.Range(“G2:H50”),0)或其他......