엑셀 VBA Application.ScreenUpdating 사용법 (매크로 속도 개선)
명령문 앞에서 ScreenUpdating 을 False 로 두면 실행 중 화면 갱신이 멈춰, 셀을 많이 건드리는 매크로일수록 속도가 크게 빨라집니다.
매크로가 느린 가장 흔한 이유는 계산이 아니라 셀을 건드릴 때마다 엑셀이 화면을 다시 그리기 때문입니다. 명령문 앞뒤에 한 줄씩만 넣어 화면 갱신을 잠시 멈추면, 코드를 고치지 않고도 속도가 크게 달라집니다.
어떤 원리인가요
Application.ScreenUpdating 을 False 로 두면 매크로가 도는 동안 엑셀이 화면을 갱신하지 않습니다. 계산은 그대로 하되 그리는 일만 건너뛰는 것이라, 아래 경우에 효과가 특히 큽니다.
- 여러 시트나 여러 셀을 오가며 값을 읽고 쓰는 매크로
- 실행 도중 차트·표·피벗테이블이 다시 그려지는 매크로
기본 사용법
명령문을 아래 두 줄 사이에 넣기만 하면 됩니다.
'// 명령문 시작 전 화면 갱신 중단 Application.ScreenUpdating = False '########################### '// 동작할 실제 명령문... '########################### '// 명령문 종료 후 화면 갱신 재개 Application.ScreenUpdating = True
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
엑셀 VBA Timer 사용법 (매크로 속도 측정)
Timer 는 자정부터 지난 시간을 초 단위로 돌려주는 VBA 함수로, 명령문 앞뒤에서 두 번 읽어 빼면 매크로 실행 시간을 잴 수 있습니다.
엑셀 개발 도구(매크로) 활성화 방법
[파일] - [옵션] - [리본 사용자 지정]에서 '개발 도구'에 체크하면 매크로와 VBA 편집기를 쓸 수 있는 탭이 리본에 나타납니다.
엑셀 VBA 마지막 셀 찾기 (마지막 행·열 번호 구하기)
시트 전체는 UsedRange 로, 특정 행·열은 End(xlUp)·End(xlToLeft) 로 마지막 셀을 찾아 행·열 번호를 구합니다.