엑셀 VBA #126 / Vlookup시리즈2_배열 활용 [VBA]
엑셀 VBA #126 / Vlookup시리즈2_배열 활용 [VBA]
Vlookup 함수같은 기능
1. 파워쿼리
2. 배열
3. 배열 + Dictionary
Sub VlookupVBA_1() '배열로 Vlookup기능실현
Dim rngS As Variant '워크시트의 셀범위를 배열로 집어 넣을 땐 항상 Variant임
Dim rngF As Variant ' "
Dim arr()
Application.ScreenUpdating = False
Sheet2.Range("E2:E" & Sheet2.Range("A2").End(xlDown).Row).Clear
rngS = Sheet1.Range("A2", Sheet1.Cells(Rows.Count, "B").End(3))
셀 범위'Sheet1.Range("A2", Sheet1.Cells(Rows.Count, "B").End(3))'를 rngS방에 넣기
rngF = Sheet2.Range("A2", Sheet2.Cells(Rows.Count, "A").End(3))
셀 범위'Sheet2.Range("A2", Sheet2.Cells(Rows.Count, "A").End(3))'를 rngS방에 넣기
ReDim arr(1 To UBound(rngF, 1), 1 To 1) '?????
For i = 1 To UBound(rngF, 1) 'UBound(rngF,1) : rngF의 1차원영역의 최대값
For j = 1 To UBound(rngS, 1) 'UBound(rngS,1) : rngS의 1차원영역의 최대값
'Sheet2.Cells(i, "E") = rngS(j, 2) '본 코드사용시 속도저하(배열코드가 아니라 워크시트 코드?이므로)
If rngF(i, 1) = rngS(j, 1) Then
arr(i, 1) = rngS(j, 2)
Exit For '영상에서 이 코드는 빼먹었습니다. 넣어야 합니다.
'1:1로 매칭되므로 값을 찾았으면 안쪽 for문을 빠져나와야지
'그렇지 않으면 끝까지 루프를 돌므로 시간이 더 소요가 됩니다.
End If
Next
Next
Sheet2.Range("E2").Resize(UBound(arr, 1), 1) = arr
Application.ScreenUpdating = True
End Sub
https://www.youtube.com/watch?v=QM-o-95daIc&list=PLfxvqpVCYZ8e0qlyc_FU46neoWjO7yTWj&index=128