【问题标题】:VBA : Unable to get the Match property of WorkSheetFunction classVBA:无法获取 WorkSheetFunction 类的 Match 属性
【发布时间】:2016-10-13 11:43:18
【问题描述】:

我在“ClaimAnalysis”表中有一个名称列表,在“Analysis”表中有这些名称值的子集。为了选择在“Analysis1”中具有值的名称,我对“ClaimAnalysis”列中的每个值使用了 Index-Match 函数(frow 是“ClaimAnalysis”中的总行数)。我正在应用的公式手动工作正常公式栏但在 VBA 中引发“运行时错误”。

公式栏“=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

【问题讨论】:

    标签: excel vba


    【解决方案1】:

    乍一看,您似乎向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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-06-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-05-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多