엑셀 VBA 코드 실행 속도를 향상시킬 수 있는 기본적인 4가지 방법으로
코드 시작과 끝 부분에 추가하면 실행속도를 개선할 수 있습니다.

<본문 이동 링크>
▼▼▼속도 개선을 위한 코드작성법 관련글▼▼▼
[엑셀/엑셀 VBA] - [엑셀 VBA] 매크로 속도 향상 방법_심화편(코드 작성법)
[엑셀 VBA] 매크로 속도 향상 방법_심화편(코드 작성법)
엑셀 VBA 매크로 속도 향상에 도움이 되는 주요 코드 작성법을 소개합니다. Activate, Select 사용 자제하기 Copy, Paste 사용 자제하기 For문에 Each 구문 사용하기 변수 사전에 선언하기 With 구문 사용하
han8849.tistory.com
화면 움직임 끄기(ScreenUpdating)
별도 설정이 없다면 작성된 코드에 따라 화면이 바뀌게 됩니다.
너무 빠르게 전환되기도 하고 불필요한 실행시간으로 잡아먹기 때문에
아래와 같은 코드를 코드 시작과 끝에 작성해두면 실행시간이 단축됩니다.
Application.ScreenUpdating = False
'----실행할 코드----
Application.ScreenUpdating = True
(예시) 행과 열을 각 1,000번째까지 순환하면 test 문자를 넣는 코드 실행시 약 14% 속도 향상
※ 코드에 따라 단축효과는 달라질 수 있음
Sub DisableScreenUpdating()
Application.ScreenUpdating = False
Dim r, c As Integer
For r = 1 To 1000
For c = 1 To 1000
Cells(r, c).Value = "test"
Next c
Next r
Application.ScreenUpdating = True
End Sub

자동계산 끄기(Manual Calculation)
엑셀 파일 내 함수가 있는 경우 기본적으로 셀 값이 바뀌면 모든 함수가 재계산되기 때문에 별도의 설정을 해놓지 않는 이상 VBA 동작시에도 동일하게 반복적인 함수 재계산이 실행되어 속도에 영향을 줌
자동계산이 아닌 수동 계산을 하도록 설정해놓고 필요한 순간에만 "Calculate"를 추가하여 불필요한 반복 계산을 개선할 수 있음
Application.Calculation = xlCalculationManual
'----실행할 코드----
Calculate
Application.Calculation = xlAutomatic
(예시) C열에 A열 값 + B열 값 함수가 작성되어 있고 행1~1,000번째 열 1~2번째 값을 변경하였을 때 자동/수동 계산 여부에 따라 약 85% 속도 향상
※ 코드에 따라 단축효과는 달라질 수 있음
Sub Manual_Calculation()
Application.Calculation = xlCalculationManual
Dim r, c As Integer
For r = 1 To 1000
For c = 1 To 2
Cells(r, c).Value = 2
Next c
Next r
Calculate
Application.Calculation = xlAutomatic
End Sub

이벤트 끄기(Events)
이벤트 프로시저가 있는 경우 VBA 실행 중 변화는 값들로 Event 프로시저가 동작해 실행 속도에 영향을 줄 수 있음
작성된 이벤트 프로시저가 매크로 실행에 필요 없는 경우 아래 명령어로 속도를 일부 개선할 수 있음
Application.EnableEvents = False
'----실행할 코드----
Application.EnableEvents = True
※ 매크로 실행 중간에 이벤트가 모두 비활성됨에 따라 전체 실행결과에 영향이 없도록 주의할 것
(예시) 두 번째 수동 계산 예시문에서 셀 값 변경 시 D열에 값을 추가하는 이벤트 프로시저가 작성되어 있는 경우 이벤트 비활성화로 약 30% 속도 향상
※ 코드에 따라 단축효과는 달라질 수 있음

페이지 분할 끄기(PageBreaks)
셀 값이 채워짐에 따라 출력 범위가 자동으로 변경되어 전체 실행시간에 영향을 줌
여러 테스트를 했지만 개인적으로 크게 개선되는 것처럼 보이진 않음
(해당 코드가 효과적일 때가 있었던 분은 댓글로 남겨주세요^^)
ActiveSheet.DisplayPageBreaks = False
'----실행할 코드----
ActiveSheet.DisplayPageBreaks = True
'엑셀 > 엑셀 VBA' 카테고리의 다른 글
[엑셀 VBA] 글자/배경 색상 변경하는 방법 5가지 (0) | 2022.11.20 |
---|---|
[엑셀 VBA] 작성자/사용자 정보 가져오기(이력관리) (0) | 2022.11.20 |
[엑셀 VBA] 매크로 속도 향상 방법_심화편(코드 작성법) (0) | 2022.11.20 |
[엑셀 VBA] 코드 실행 시간 측정하는 방법 (0) | 2022.11.19 |
[엑셀 VBA] 편집창(화면) 초기세팅 (0) | 2022.11.18 |