Excel VBA 가속화

9139 단어 VBAExcel가속화

소개



Excel VBA는 비IT의 현장에서도 자주 사용되는 언어입니다만, 무거운 처리를 하면 처리 속도가 느려져 버리는 것이 좋다. 이번에는 그런 때에 고속화하는 방법을 소개합니다.

가속화 목록



  • 업데이트 설정 변경
  • ScreenUpdating
  • Calculation
  • EnableEvents
  • 커서
  • 일괄 처리


  • 셀에 대한 액세스 감소
  • 배열에 넣기
  • 변수에 넣기


  • 업데이트 설정 변경



    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
    

    단 한 번만의 경우는 직접 액세스하는 것이 빠릅니다.

    관련 기사


  • EXCEL VBA 가속화 클래스 생성
  • VBA에서 자주 사용하는 프로 시저 (FileSystemObject)

  • 내 계정



    좋은 웹페이지 즐겨찾기