2017-04-25 5 views
0

왼쪽에 vlookup을 수행하려고합니다. 찾을 수없는 값이 있지만 이해가 안되는 이유는 응용 프로그램 정의 오류 또는 개체 정의 오류가 루프의 중간에 튀어 나오는 이유입니다. 사전에 도움을 주셔서 감사합니다.왼쪽 vlookup 오류

With Sheet3 
x = 2 
Do Until IsEmpty(.Range("E" & x).value) 
look = .Range("E" & x).value 
result = WorksheetFunction.Index(Sheet2.Range("A:A"), 
WorksheetFunction.Match(look, Sheet2.Range("B:B"), 0)) 
    If Not IsError(result) Then 
     .Range("F" & x).value = result 
    Else 
     .Range("F" & x).value = " " 
    End If 
    x = x + 1 
Loop 
End With 
+0

에 행 1에 –

+0

는 값의 일부는 VLOOKUP에서 찾을 수 없다는 것을 의미하고 나는 그것을 반환 할 공백으로 –

+0

어떤 셀 값에서 오류가 발생합니까? –

답변

0

VBA에서 IsErrror 함수는 Variant가 vbError 값을 보유하고 있으면 true를 반환합니다. 이 값은 변종 인 경우에도 Result 변수에 할당되지 않으며 오류가 발생하면 일치 항목을 찾지 못합니다. On Error Goto ... 메서드를 사용하여 해당 오류를 캡처해야합니다.

큰 문제는 아닙니다. 코드는 다음과 같을 수 있습니다.

Result = "" 
On Error Resume Next 
Result = WorksheetFunction.Index(Sheet2.Range("A:A"), _ 
     WorksheetFunction.Match(look, Sheet2.Range("B:B"), 0)) 
.Range("F" & x).Value = Result 

오류가 발생하면 결과 변수에 이전에 있었던 값이 유지됩니다. 따라서 함수 앞에 ""로 설정됩니다. 따라서 오류가 있는지 테스트 할 필요가 없습니다.

이 코드를 작성하는 과정에서 색인 기능의 줄 바꿈에서 밑줄을 놓친 것을 발견했습니다.

+0

이 방법은 vlookup에서 작동하지만 그 이유는 무엇입니까? –

+0

일치하는 항목에 대해 작동하지 않습니다. – Variatus

+0

당신의 도움에 감사드립니다! –

0

이 배열 수식이 작업을 수행합니까?

=INDEX($B$1:$B$8,SMALL(IF($A$1:$A$8=$E$1,ROW($A$1:$A$8)),ROW‌​S($G$1:$G1))) 

는 "나는 내가 발견 할 수없는 가치를 가지고 이해"를 지정하십시오 8