728x90

다량의 자료를 반복작업을 할 경우, 메모리 크기를 너무 많이 잡으면 오히려 처리가 늦어지게 됩니다.

그래서 적당한 크기로 메모리를 할당하고 반복 작업이 끝나면 메모리 비우는 작업을 한 다음에

반복해서 수행하도록 하면 처리가 빨라집니다.


이중 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

728x90
블로그 이미지

Link2Me

,