다량의 자료를 반복작업을 할 경우, 메모리 크기를 너무 많이 잡으면 오히려 처리가 늦어지게 됩니다.
그래서 적당한 크기로 메모리를 할당하고 반복 작업이 끝나면 메모리 비우는 작업을 한 다음에
반복해서 수행하도록 하면 처리가 빨라집니다.
이중 For 문을 사용하여 안쪽에 있는 For문에서는 SplitLine 만큼 반복해서 수행하도록 합니다.
바깥쪽 For 문에서는 반복할 횟수를 지정합니다.
안쪽 For 문은 실제 원하는 걸 구할 사항을 코딩하는 부분입니다. 즉 가장 핵심적인 사항이죠.
다른 부분은 핵심적인 부분을 얼마나 효율적으로 얻을 수 있게 해주느냐라고 보면 됩니다.
Sub address_merge()
Dim rngC As Range
Dim rngAll As Range
Dim rngDB As Range
Dim i, k, n As Double
Dim SplitLine, startRow, LastRow As Double
Application.ScreenUpdating = False '// 화면 업데이트 (일시) 중지
oldTime = Timer '// 시간 변수 설정
startRow = 2
SplitLine = 3000
For n = 1 To (Cells(Rows.Count, "E").End(3).Row \ SplitLine) + 1
If (SplitLine + startRow) > Cells(Rows.Count, "E").End(3).Row Then
LastRow = Cells(Rows.Count, "E").End(3).Row '// 마지막 행이 SplitLine 보다 작으면
Else
LastRow = SplitLine + startRow '// 마지막 행이 SplitLine 보다 크면
End If
Set rngDB = Range(Cells(startRow, "E"), Cells(LastRow, "E"))
For i = startRow To LastRow '// SplitLine 만큼 반복 수행하라
If Cells(i, "G") = 0 Then
Cells(i, "I") = Cells(i, "E") & " " & Cells(i, "F")
Else
Cells(i, "I") = Cells(i, "E") & " " & Cells(i, "F") & "-" & Cells(i, "G")
End If
Next i
Set rngDB = Nothing
startRow = i '// 시작행으로 지정
Next n
MsgBox "총 " & Format(Timer - oldTime, "#0.00") & " : 초 소요"
End Sub
'업무 능력 향상 > 엑셀 VBA 활용' 카테고리의 다른 글
요일별 최대값, 최소값 구하는 VBA (0) | 2015.05.05 |
---|---|
[VBA] 범위구간의 행 전체가 비어 있을 경우 삭제 (0) | 2015.05.04 |
특정 워크시트를 파일로 저장하기 (1) | 2015.04.26 |
엑셀 각 시트를 각각의 파일로 저장 (0) | 2015.04.25 |
[VBA] 다른 시트에 일치하는 내용이 있는지 검사하여 포함되어 있는 행 출력 (0) | 2015.04.23 |