我在“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
答案 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