엑셀 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
'엑셀로 풀어가는 세상' 카테고리의 다른 글
엑셀 VBA #127 / Vlookup시리즈3_배열+Dictionary활용 [VBA] (0) | 2023.12.28 |
---|---|
VBA - Dictionary(Late vs Early Binding) by 우노사설 (0) | 2023.12.23 |
[엑셀이뭐니]매크로 기초 11강-Match 함수로 찾기(응용편)/ 중단모드 해제하기/ 엑셀 VBA 기초 (0) | 2023.12.21 |
엑셀 VBA #122 / 헷갈리는 시트, 셀 제어 [VBA] (0) | 2023.12.20 |
엑셀 VBA #119 / Dictionary 개체_실무 [VBA] (0) | 2023.12.19 |
엑셀 VBA #118 / Dictionary 개체_기본 [VBA] (0) | 2023.12.19 |
엑셀 VBA #65 / 질문 답변(데이터 취합) [VBA] (0) | 2023.12.19 |
엑셀 VBA #52 / 중복데이터 처리_5 [VBA]-고유항목별 합계구하기 (0) | 2023.12.16 |