Excel VBA 가속화
소개
Excel VBA는 비IT의 현장에서도 자주 사용되는 언어입니다만, 무거운 처리를 하면 처리 속도가 느려져 버리는 것이 좋다. 이번에는 그런 때에 고속화하는 방법을 소개합니다.
가속화 목록
업데이트 설정 변경
셀에 대한 액세스 감소
업데이트 설정 변경
ScreenUpdating
처리중에 화면의 묘사를 정지하는 것으로 처리를 빠르게 할 수 있습니다.
Application.ScreenUpdating = False
일련의 처리가 끝나면 자동으로 True로 돌아갑니다.
Calculation
처리하는 동안 Sheet에서 재계산을 중지하여 가속화됩니다.
Application.Calculation = xlCalclationManual
처리 후에 자동으로 돌아가는 일이 없으므로 처리의 끝에
Application.Calculation = xlCalclationAutomatic
로 자동 계산을 활성화하십시오.
에러로 떨어졌을 때도 자동으로는 돌아오지 않으므로 주의해 주세요.
EnableEvents
이벤트 발생을 비활성화하고 가속화합니다.
무효로 하는 것으로 셀의 Change 이벤트등이 발생하지 않게 됩니다.
Application.EnableEvents = False
Calculation 마찬가지로 처리 종료 후에 True로 돌아오는 일은 없으므로 주의해 주세요
Application.EnableEvents = True
커서
커서의 표시를 wait로 하면 고속화됩니다.
(커서의 변경을 판정하거나 씨 없어져 빨라진다?)
Application.Cursor = xlWait
이것도 자동으로 돌아 가지 않으므로 마지막으로 되돌리자.
Application.Cursor = xlDefault
일괄 처리
상기는 자주 사용하기 때문에 묶어 프로시저로 해 두면 편리합니다.
가속화
Sub EnableAcceleration()
With Application
.ScreenUpdating = False
.Calculation = xlCalclationManual
.EnableEvents = False
.Cursor = xlWait
End With
End Sub
고속화 해제
Sub DisableAcceleration()
With Application
.Calculation = xlCalclationAutomatic
.EnableEvents = True
.Cursor = xlDefault
End With
End Sub
셀에 대한 액세스 감소
셀에 대한 액세스가 늘어나면 처리가 느려지므로 셀에 대한 액세스를 최대한 줄여 고속화합니다.
배열에 넣기
일괄로 배열화함으로써 셀에의 액세스가 줄어 처리를 고속화할 수 있습니다.
Range형을 Variant형에 대입하면 자동적으로는 2차원 배열로서 취급됩니다.
Dim rng As Variant
rng = Worksheets("Sheet1").UsedRange
배열을 셀에 일괄 쓰기를 할 수도 있습니다.
셀에 쓰기는 읽기보다 무거운 처리이므로 특히 일괄 쓰기는 유효합니다.
※단 셀 범위가 2차원 배열과 같은 사이즈로 없어서는 안됩니다.
Dim arr(1 to 2, 1 to 2) As Variant
arr(1, 1) = "foo"
arr(1, 2) = "bar"
arr(2, 1) = "hoge"
arr(2, 2) = "hage"
'これはOK
Worksheets("Sheet1").Range("A1:B2").value = arr
'これはNG
Worksheets("Sheet1").Range("A1:B1").value = arr
변수에 넣기
셀에 여러 번 액세스하는 경우 변수에 할당하면 빨라집니다.
Dim rng As Range
Dim i As Long
set rng = Worksheets("Sheet1").Range("A1")
For i = 1 To 100000
rng.Value = i
Next
단 한 번만의 경우는 직접 액세스하는 것이 빠릅니다.
관련 기사
내 계정
Reference
이 문제에 관하여(Excel VBA 가속화), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/loach/items/3ae9100034ecf2d804ce텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)