VBA:无法获取WorkSheetFunction类的Match属性

时间:2016-06-13 06:41:36

标签: excel-vba vba excel

我在“ClaimAnalysis”表格中有一个名单列表,以及“分析”表格中这些名称值的子集。要选择“Analysis1”中具有值的名称,我对“ClaimAnalysis”列中的每个值使用了Index-Match函数(frow是“ClaimAnalysis”中总行数)。我正在应用的公式可以手动运行Formula Bar但在VBA中抛出'运行时错误。

Formula Bar“= INDEX(Analysis1!$ B $ 2:$ B $ 717,MATCH(ClaimAnalysis!A2,Analysis2!$ A $ 2:$ A $ 727,0))”

和是变量frow根据公式栏中的需要使我的范围

For x = 2 To frow - 1        
ThisWorkbook.Sheets("ClaimAnalysis").Cells(x, 2).Value = Application.WorksheetFunction.Index(Sheets("Analysis1").Range("B2").End(xlDown), Application.WorksheetFunction.Match(ThisWorkbook.Sheets("ClaimAnalysis").Cells(x, 1), Sheets("Analysis1").Range("A2").End(xlDown), 0))
Next x

1 个答案:

答案 0 :(得分:0)

乍一看,您似乎向MATCH提供了错误的参数。您正在提供单个单元格地址,它需要一个数组。这可能是错误的来源。

MATCH功能中,更改此内容:

Sheets("Analysis1").Range("A2").End(xlDown)
对此:
Sheets("Analysis1").Range(Range("A2"), Range("A2").End(xlUp))

另一种可能性是MATCH实际上找不到任何东西,这意味着它会返回错误。

此外,使用End(xlDown)可以获得最低的单元格,而不是最后一个单元格。如果您正在寻找后者,End(xlUp)将是更好的选择。

也许你可以试试这段代码:

Dim ws As Worksheet
Dim matched As Variant
Set ws = ThisWorkbook.Worksheets("ClaimAnalysis")

For x = 2 To frow - 1
    matched = Application.Match(ws.Cells(x, 1), ws.Range(Range("A2"), Range("A2").End(xlUp)), 0)
    If Not IsError(matched) Then ws.Cells(x, 2).Value = Application.Index(ws.Range("B2").End(xlUp), matched, 0)
Next x