엑셀 VBA Application.ScreenUpdating 사용법 (매크로 속도 개선)
명령문 앞에서 ScreenUpdating 을 False 로 두면 실행 중 화면 갱신이 멈춰, 셀을 많이 건드리는 매크로일수록 속도가 크게 빨라집니다.
매크로가 느린 가장 흔한 이유는 계산이 아니라 셀을 건드릴 때마다 엑셀이 화면을 다시 그리기 때문입니다. 명령문 앞뒤에 한 줄씩만 넣어 화면 갱신을 잠시 멈추면, 코드를 고치지 않고도 속도가 크게 달라집니다.
어떤 원리인가요
Application.ScreenUpdating 을 False 로 두면 매크로가 도는 동안 엑셀이 화면을 갱신하지 않습니다. 계산은 그대로 하되 그리는 일만 건너뛰는 것이라, 아래 경우에 효과가 특히 큽니다.
- 여러 시트나 여러 셀을 오가며 값을 읽고 쓰는 매크로
- 실행 도중 차트·표·피벗테이블이 다시 그려지는 매크로
기본 사용법
명령문을 아래 두 줄 사이에 넣기만 하면 됩니다.
'// 명령문 시작 전 화면 갱신 중단 Application.ScreenUpdating = False '########################### '// 동작할 실제 명령문... '########################### '// 명령문 종료 후 화면 갱신 재개 Application.ScreenUpdating = True
주의 : 반드시 True 로 되돌려야 합니다. 매크로가 중간에 오류로 멈추면 False 인 채로 남아 화면이 갱신되지 않고, 엑셀이 멈춘 것처럼 보입니다. 그럴 때는 직접 실행 창에
Application.ScreenUpdating = True 를 입력해 되돌리세요.속도 비교해 보기
A1셀부터 100행 100열까지 각 셀에 자기 주소를 적는 매크로입니다. 셀을 1만 번 건드리므로 차이가 뚜렷합니다.
For i = 1 To 100
For j = 1 To 100
Sheet1.Cells(i, j) = Sheet1.Cells(i, j).Address
Next
Next
같은 명령문을 화면 갱신을 끈 채와 켠 채로 각각 돌려 걸린 시간을 비교합니다.
Sub UpdateFalse()
Dim StartTime As Double
Dim SecondsElapsed As Double
Dim i As Long, j As Long
Application.ScreenUpdating = False '// 화면 갱신 중단
StartTime = Timer
Sheet1.UsedRange.Clear
For i = 1 To 100
For j = 1 To 100
Sheet1.Cells(i, j) = Sheet1.Cells(i, j).Address
Next
Next
SecondsElapsed = Round(Timer - StartTime, 3)
Application.ScreenUpdating = True '// 화면 갱신 재개
MsgBox "총 매크로 동작시간은 '" & SecondsElapsed & "' 초 입니다."
End Sub
Sub UpdateTrue()
Dim StartTime As Double
Dim SecondsElapsed As Double
Dim i As Long, j As Long
StartTime = Timer
Sheet1.UsedRange.Clear
For i = 1 To 100
For j = 1 To 100
Sheet1.Cells(i, j) = Sheet1.Cells(i, j).Address
Next
Next
SecondsElapsed = Round(Timer - StartTime, 3)
MsgBox "총 매크로 동작시간은 '" & SecondsElapsed & "' 초 입니다."
End Sub
오빠두Tip : 짧게 끝나는 매크로라면 일부러 True 로 두는 것도 방법입니다. 화면이 멈춘 채 커서만 도는 것보다, 진행되는 모습이 보이는 편이 쓰는 사람에게 덜 답답합니다.
주의 : 예제파일에는 매크로가 들어 있습니다. 파일을 연 뒤 [콘텐츠 사용] 버튼을 눌러 매크로를 활성화해야 실행됩니다. 버튼이 보이지 않거나 실행이 막힌다면 매크로 실행이 안될 때를 참고하세요.
관련 게시글
엑셀 VBA Timer 사용법 (매크로 속도 측정)
Timer 는 자정부터 지난 시간을 초 단위로 돌려주는 VBA 함수로, 명령문 앞뒤에서 두 번 읽어 빼면 매크로 실행 시간을 잴 수 있습니다.
엑셀 개발 도구(매크로) 활성화 방법
[파일] - [옵션] - [리본 사용자 지정]에서 '개발 도구'에 체크하면 매크로와 VBA 편집기를 쓸 수 있는 탭이 리본에 나타납니다.
엑셀 VBA 마지막 셀 찾기 (마지막 행·열 번호 구하기)
시트 전체는 UsedRange 로, 특정 행·열은 End(xlUp)·End(xlToLeft) 로 마지막 셀을 찾아 행·열 번호를 구합니다.
댓글 3
로그인 후 댓글을 작성할 수 있습니다.
하월시아
2021.11.09 00:42
감사합니다..
태호당당당당
2024.08.02 14:44
감사합니다!!
강민준🤗
2024.08.10 16:01
좋은 강의 감사합니다.