2016-06-13 3 views
0

"ClaimAnalysis"시트에 이름 목록이 있고 "Analysis"시트에 이러한 이름 값의 하위 집합이 있습니다. "Analysis1"에 값이있는 이름을 선택하려면 "ClaimAnalysis"열의 각 값에 대해 Index-Match 함수를 사용했습니다 (frow는 "ClaimAnalysis"의 총 행 수 임). 내가 적용 할 수식은 수동으로 수식 바를 잘 동작하지만 VBA에서 런타임 오류가 발생합니다.VBA : WorkSheetFunction 클래스의 Match 속성을 가져올 수 없습니다.

수식 입력 줄 "= INDEX (Analysis1 2 $ B $! $ 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

에 원하는에 따라 당신이 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 
:

아마 당신은이 코드를 시도 할 수 있습니다

관련 문제