|
* 답변하시는 분들께 도움이 되도록 자신의 환경을 아래 항목 옆에 기재해 주세요.
- 엑셀 버전(95,97,2000,xp,2003,2007): 2007
* 아래줄에 질문을 작성하세요 >>
안녕하세요. 항상 많은 도움을 얻고 있습니다.감사합니다.
다름이 아니라, 매크로 속도향상에 대한 고수님들의 의견이 필요합니다.
데이터 추출 상황은 아래와 같습니다.
1. A데이터, B데이터 존재
2. A데이터의 ID를 기준으로, B데이터의 ID를 매칭
3. 매칭된 B데이터 ID의 시간 조건에 충족하는 값을 A데이터에 찍기
아웃풋은 잘 나오지만, 문제는 데이터의 양이 매우 큽니다.
=> A데이터 2만행 / B데이터 55만행
그럼, 고수님들의 조언 부탁 드리겠습니다.
-실행코드-
Dim sht1, sht2 As Worksheet
Dim Target1, Target2 As Range
Dim rng1, rng2 As Range
Dim i As Integer
Dim endRow As Long
Set sht1 = Worksheets("A")
Set sht2 = Worksheets("B")
i = 0
endRow = 1048576
sht1.Activate
Set Target1 = sht1.Range("B2:B" & CStr(sht1.Cells(endRow, 2).End(xlUp).Row))
realRowCnt = sht1.Cells(endRow, 2).End(xlUp).Row
sht2.Activate
Set Target2 = sht2.Range("B2:B" & CStr(sht2.Cells(endRow, 2).End(xlUp).Row))
sht2EndRow = sht2.Cells(endRow, 2).End(xlUp).Row
sht1.Activate
Application.ScreenUpdating = False
Application.DisplayStatusBar = True
Application.EnableEvents = False
For Each rng1 In Target1
Set rng2 = Nothing
Set rng2 = Target2.Find(rng1, Lookat:=xlWhole)
If Not rng2 Is Nothing Then
strAddress = rng2.Address
Do
With rng2
'ID매칭
If rng1.Offset(0, -1) = .Offset(0, 16) Then
'시간 비교1
If rng1.Offset(0, 3) >= .Offset(0, 15) Then
'시간 비교2
If rng1.Offset(0, 3) <= .Offset(0, 17) Then
'B데이터 값을 A데이터에 찍기
rng1.Offset(0, 7) = .Offset(0, 13)
Exit Do
End If
End If
End If
End With
Set rng2 = Target2.FindNext(after:=rng2)
Loop While rng2.Address <> strAddress
End If
i = i + 1: Application.StatusBar = i & " / " & realRowCnt
Next
Application.StatusBar = ""
Application.ScreenUpdating = True
Application.DisplayStatusBar = True
Application.EnableEvents = True
|
|