2013-03-22 2 views
1

여기에 이러한 질문이 많이 있음을 알고 있습니다. 그러나 나는 틀린 것을 볼 수 없습니다.Excel vba Vlookup 속성을 가져올 수 없습니다.

값이 다른 통합 문서의 열에 있는지 확인하는 다음 코드가 있습니다.

Dim masterWbk As Workbook 
Dim oWbk As Workbook 
Dim RowCount As Integer 
Dim LookupRange As Range 
Dim Exists As Variant 
Dim a As Integer 
Dim i As Integer 
Dim jobnumber As String 

    RowCount = WorksheetFunction.CountA(Sheets("Sheet1").Range("A1").EntireColumn) 

    masterWbk.Activate 

Set LookupRange = masterWbk.Sheets("Sheet1").Range("C1:C100") 

    a = 0 

    For i = 0 To RowCount - 1 

     jobnumber = oWbk.Sheets("Sheet1").Range("A2").Offset(i, 0).Value 

     ' On Error GoTo ExistsError: 

     Exists = Application.WorksheetFunction.VLookup(jobnumber, LookupRange, 1, False) 

값이 조회 범위에 있으며 형식이 동일하지만 Vlookup이 작동하지 않습니다. 그것은 엑셀 공식으로 잘 작동합니다.

내가 무엇을 놓쳤는가?

+0

Vlookup 대신 .Find를 사용할 수 있습니다. – scott

+0

어디에서'masterWbk'와'oWbk'을 설정 했습니까? –

+0

코드에서 추가로 설정했지만 문제가되는 원인이 아니기 때문에 코드를 남겨 둡니다. – evoandy

답변

3

그것이 내가 WorksheetFunction.Vlookup의 문서에 문제가 있다고 생각 this-

Dim masterWbk As Workbook 
Dim oWbk As Workbook 
Dim RowCount As Integer 
Dim LookupRange As Range 
Dim Exists As Variant 
Dim a As Integer 
Dim i As Integer 
Dim jobnumber As String 

    RowCount = WorksheetFunction.CountA(Sheets("Sheet1").Range("A1").EntireColumn) 

    masterWbk.Activate 

Set LookupRange = masterWbk.Sheets("Sheet1").Range("C1:C100") 

    a = 0 

    For i = 0 To RowCount - 1 

    jobnumber = oWbk.Sheets("Sheet1").Range("A2").Offset(i, 0).Value 
    If Trim(jobnumer) <> "" Then 
    With lookuprange 
     Set Rng = .Find(What:=jobnumber, _ 
         After:=.Cells(.Cells.Count), _ 
         LookIn:=xlValues, _ 
         LookAt:=xlWhole, _ 
         SearchOrder:=xlByRows, _ 
         SearchDirection:=xlNext, _ 
         MatchCase:=False) 
     If Not Rng Is Nothing Then 
      Exists = 1 
     Else 
      Exist = 0 
     End If 
    End With 
    End If 
+0

감사합니다. 이것은 완벽하게 작동합니다. 나는 여전히 vlookup이 작동하지 않는 이유에 관심이있을 것입니다. – evoandy

0

처럼 보일 것입니다 찾을 사용. Excel 2007의 테스트에서 검색 문자열을 찾으면 해당 셀의 값이 반환됩니다. 당신이 정확히 일치하는 검색하는 경우, 당신은이 엑셀 2010에서 잘 작동하는 것 같다

... 

Dim FoundText as String 

... 

FoundText="" 

On Error Resume Next 

FoundText=Application.WorksheetFunction.VLookup(jobnumber, LookupRange, 1, False) 

On Error Goto 0 

Exists= (FoundText <> "") 

... 
+0

감사합니다. 나는 이것을 미래의 사용을 위해 메모 할 것입니다. 그래서 나는 퍼지 (fuzzy) 경기에만 vlookup을 사용할 수 있습니까? – evoandy

+1

'Application.WorksheetFunction.VLookup()'대신'Application.Vlookup()'을 사용하면 검색 값을 찾지 못한 경우 에러가 발생하는 대신 리턴 값은 에러가됩니다. IsError()를 사용하여 테스트 할 수 있습니다. 다른 WSFunctions에도 똑같이 적용됩니다 : 'WorkSheetFunction'을 삭제하면 모든 것이 더 쉽게 처리됩니다. –

+1

VLookup은 정확한 일치를 반환 할 수 있어야합니다. VLOOKUP은 Excel 2010에서 올바르게 작동합니다. 1 열 조회 배열에서 정확한 일치 값을 반환 할 수 있습니다. –

0

1004

당신은 VLOOKUP을 사용하려면 ...

나는 것 공포의 오류를 얻을 jobNumber을 문자열로 지정했으며 워크 시트/셀 "서식 지정"에도 불구하고 VLOOKUP에서 오류가 발생할 가능성이 높습니다. 워크 시트의 작업 번호는 숫자 값으로 저장 될 가능성이 큽니다.

문제는 "123"<> 123입니다. jobNumber가 숫자인지 테스트 한 다음 올바른 종류의 데이터를 함수에 전달하는지 확인하십시오.

If IsNumeric(jobNumber) Then 
    Exists = Application.WorksheetFunction.VLookup(CLng(jobNumber), lookupRange, 1, False) 
Else: 
    Exists = Application.WorksheetFunction.VLookup(jobNumber, lookupRange, 1, False) 
End If 
관련 문제