문제

VBA에는 아래 두 가지 기능이 있습니다.그만큼 abb00 잘 작동하지만 abb11 하지 않습니다.

내 질문은 Range 변수를 매개변수로 사용 VLookup 기능?

Function abb00() 'demo func
    abb00 = Application.WorksheetFunction.VLookup("a", _ 
        Worksheets("SheetCache").Range("A:B"), 2, False)
End Function

Function abb11() 'demo func
    rangeVar = Worksheets("SheetCache").Range("A:B")
    abb11 = Application.WorksheetFunction.VLookup("a", rangeVar, 2, False)
End Function
도움이 되었습니까?

해결책

두 가지 방법 으로이 작업을 수행 할 수 있습니다

기능 고정
현재 기능이 범위 변수를 설정하지 않습니다.그것은 이렇게 처럼 작동합니다

Function abb11()
    Dim rangeVar as Range
    Set rangeVar = Worksheets("SheetCache").Range("A:B")
    abb11 = Application.WorksheetFunction.VLookup("a", rangeVar, 2, False)
End Function
.

의 범위를 전달합니다
또는 이와 같은 함수에 범위를 전달할 수 있습니다

Sub GetRange()
    Dim rangeVar As Range
    Set rangeVar = Worksheets("SheetCache").Range("A:B")
    MsgBox abb2(rangeVar)
End Sub
Function abb2(ByVal rangeVar)
       abb2 = Application.WorksheetFunction.VLookup("a", rangeVar, 2, False)
End Function
.

다른 팁

범위를 전달하려면 먼저 범위에 대한 참조를 가져와야 합니다.

현재 다음이 있습니다.

rangeVar = Worksheets("SheetCache").Range("A:B")

이것은 범위를 얻지 못합니다.전체 범위를 읽습니다 A:B Variant 배열로.범위 참조를 얻으려면 다음을 사용해야 합니다. Set 예어.

Set rangeVar = Worksheets("SheetCache").Range("A:B")

아이러니하게도 이는 결과에 영향을 미치지 않습니다. abb11 기능 (편집하다:엑셀 2003에서), 왜냐하면 VLookup Range뿐만 아니라 Variant 배열에도 적용할 수 있습니다.그러나 두 개의 전체 열을 배열로 읽는 것은 다소 비효율적이므로 범위 참조(Set rangeVar = ...). 편집하다 Excel 2007/2010에서는 두 개의 전체 열을 Variant 배열로 읽으면 함수가 중단될 수 있습니다. 왜냐하면 제가 테스트한 Excel 2003의 65536과 달리 로드할 행이 백만 개이기 때문입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top