VLookup 기능에 대한 Range 매개변수를 전달하는 방법은 무엇입니까?
문제
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과 달리 로드할 행이 백만 개이기 때문입니다.