2016-06-13 63 views
0

我在工作表「ClaimAnalysis」中擁有一個名稱列表,並在工作表「Analysis」中具有這些名稱值的子集。要在「Analysis1」中選擇具有值的名稱,我對「ClaimAnalysis」列中的每個值使用了Index-Match函數(frow是「ClaimAnalysis」中總行數的計數)。我正在應用的公式可以很好地手動運行公式欄,但會在VBA中引發運行時錯誤。VBA:無法獲取WorkSheetFunction類的匹配屬性

公式欄 「= INDEX(分析1 $ B $ 2:$ B $ 717 MATCH(ClaimAnalysis A2,分析2 $ 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

一目瞭然,它看起來像您提供不正確的參數來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 
相關問題