Sub vlookup2차원배열_variant()
Dim rngS As Variant
Dim rngF As Variant
Dim i As Long
Dim j As Long
Dim k As Long
Dim rngS_Col As Long
Dim arr()
Dim COL As Long '추출열 갯수
'worksheet 셀의 범위를 배열로 집어 넣을 때는 variant 타입으로 선언해야 한다
Application.ScreenUpdating = False
If Not IsEmpty(Sheets("Sheet2").Range("B2")) Then
Sheets("Sheet2").Range("B2", Cells(Rows.Count, "B").End(xlUp)).Resize(, 4).ClearContents
End If
rngS_Col = Sheets("Sheet2").UsedRange.Columns.Count
rngS = Sheets("Sheet1").Range("A2", Sheets("Sheet1").Cells(Rows.Count, "A").End(xlUp)).Resize(, rngS_Col) '기준열
rngF = Sheets("Sheet2").Range("A2", Sheets("Sheet2").Cells(Rows.Count, "A").End(xlUp)) '타겟열
' COL = 5 '추출열 갯수
COL = Sheets("Sheet2").UsedRange.Columns.Count - 1
ReDim arr(1 To UBound(rngF), 1 To COL) ' 7행 5열
For i = 1 To UBound(rngF, 1) '특정 배열의 index의 최대값, 1차원
For j = 1 To UBound(rngS, 1)
If rngF(i, 1) = rngS(j, 1) Then
' arr(i, 1) = rngS(j, 2)
' arr(i, 2) = rngS(j, 3)
' arr(i, 3) = rngS(j, 4)
' arr(i, 4) = rngS(j, 5)
' arr(i, 5) = rngS(j, 6)
For k = 1 To COL
arr(i, k) = rngS(j, k + 1) ' k+1 그 다음 열부터, A다음 열부터
Next k
Exit For
End If
Next j
Next i
Sheets("Sheet2").Cells(2, "B").Resize(UBound(arr, 1), COL) = arr
Application.ScreenUpdating = True
End Sub
Sub vlookup2차원배열_BDF가져오기()
Dim rngS As Variant
Dim rngF As Variant
Dim i As Long
Dim j As Long
Dim k As Long
Dim rngS_Col As Long
Dim arr()
Dim COL As Long '추출열 갯수
'worksheet 셀의 범위를 배열로 집어 넣을 때는 variant 타입으로 선언해야 한다
Application.ScreenUpdating = False
If Not IsEmpty(Sheets("Sheet2").Range("B2")) Then
Sheets("Sheet2").Range("B2:F" & Cells(Rows.Count, "B").End(xlUp).Row).ClearContents
End If
rngS_Col = Sheets("Sheet2").UsedRange.Columns.Count
rngS = Sheets("Sheet1").Range("A2", Sheets("Sheet1").Cells(Rows.Count, "A").End(xlUp)).Resize(, rngS_Col) '기준열
rngF = Sheets("Sheet2").Range("A2", Sheets("Sheet2").Cells(Rows.Count, "A").End(xlUp)) '타겟열
COL = 5 '추출열 갯수
ReDim arr(1 To UBound(rngF), 1 To COL) ' 7행 5열
For i = 1 To UBound(rngF, 1) '특정 배열의 index의 최대값, 1차원
For j = 1 To UBound(rngS, 1)
If rngF(i, 1) = rngS(j, 1) Then
arr(i, 1) = rngS(j, 2) ' B열 가져오기
arr(i, 3) = rngS(j, 4) ' D열 가져오기
arr(i, 5) = rngS(j, 6) ' F열 가져오기
Exit For
End If
Next j
Next i
Sheets("Sheet2").Cells(2, "B").Resize(UBound(arr, 1), COL) = arr
Application.ScreenUpdating = True
End Sub
Sub vlookup2차원배열_range()
Dim rngS As Range
Dim rngF As Range ' 변경된 부분
Dim i As Long
Dim j As Long
Dim k As Long
Dim rngS_Col As Long
Dim arr()
Dim COL As Long '추출열 갯수
'worksheet 셀의 범위를 배열로 집어 넣을 때는 variant 타입으로 선언해야 한다
Application.ScreenUpdating = False
If Not IsEmpty(Sheets("Sheet2").Range("B2")) Then
Sheets("Sheet2").Range("B2", Cells(Rows.Count, "B").End(xlUp)).Resize(, 4).ClearContents
End If
rngS_Col = Sheets("Sheet2").UsedRange.Columns.Count
Set rngS = Sheets("Sheet1").Range("A2", Sheets("Sheet1").Cells(Rows.Count, "A").End(xlUp)).Resize(, rngS_Col) ' 변경된 부분 '기준열
Set rngF = Sheets("Sheet2").Range("A2", Sheets("Sheet2").Cells(Rows.Count, "A").End(xlUp)) ' 변경된 부분 '타겟열
COL = Sheets("Sheet2").UsedRange.Columns.Count - 1
ReDim arr(1 To rngF.Rows.Count, 1 To COL) ' 변경된 부분 '타겟 범위의 행 수만큼 배열 크기 설정
For i = 1 To rngF.Rows.Count ' 변경된 부분 '타겟 범위의 행 수만큼 반복
For j = 1 To rngS.Rows.Count
If rngF.Cells(i, 1).Value = rngS.Cells(j, 1).Value Then
For k = 1 To COL
' arr(i, 1) = rngS(j, 2) ' B열 가져오기
' arr(i, 3) = rngS(j, 4) ' D열 가져오기
' arr(i, 5) = rngS(j, 6) ' F열 가져오기
arr(i, k) = rngS.Cells(j, k + 1).Value
Next k
Exit For
End If
Next j
Next i
Sheets("Sheet2").Cells(2, "B").Resize(rngF.Rows.Count, COL) = arr ' 변경된 부분 '타겟 범위의 행 수에 맞게 배열 출력
Application.ScreenUpdating = True
End Sub
'컴퓨터 > 엑셀' 카테고리의 다른 글
vba 선택한 셀 주소 배열에 담아서 합계 처리 (0) | 2024.07.24 |
---|---|
vba 임대료 주소 배열에 저장 배열에 저장된 주소에 셀색 칠하기, access 외부데이터 가져오기 (0) | 2024.04.20 |
엑셀vba arraylist [엑셀 실무]Dictionary+ArrayList를 이용한 Key(Name+Id) 별로 데이타 통합 (0) | 2024.03.01 |
엑셀vba 시트 지우기 (0) | 2024.03.01 |
엑셀vba 항목별 각 시트로 나누기-계정별원장-ADODB.Recordset-excelandvba (0) | 2024.02.29 |