VBA Calculate(자동계산기능) – 통합문서, 워크시트, 범위
이 튜토리얼에서는 VBA의 다양한 Calculate 옵션에 대해 설명합니다.
기본적으로 Excel은 통합 문서가 변경될 때마다 열려 있는 모든 통합 문서에서 계산을 수행합니다. A1셀이 변경되면 A1셀에 의존하는 모든 셀을 업데이트하는 식으로 계산을 수행합니다. 하지만 이렇게 하면 셀이 변경될 때마다 Excel에서 다시 계산해야 하므로 VBA 코드가 매우 느리게 실행될 수 있습니다.
VBA 속도를 높이기 위해 절차를 시작할 때 자동 계산을 비활성화해야 하는 경우도 있습니다.
Application.Calculation = xlManual
코드의 끝부분에서 자동계산을 다시 활성화시킵니다:
Application.Calculation = xlAutomatic
통합 문서의 전체(또는 일부)를 계산하려는 경우에는 어떻게 해야 할까요? 이 튜토리얼을 끝까지 학습하시면 방법을 습득하실 수 있습니다.
지금 계산하기
Calculate 명령을 사용하여 모든 통합 문서를 다시 계산할 수 있습니다(열려 있는 모든 통합 문서에서):
Calculate
일반적으로 이 방법을 많이 사용합니다. 속도를 더 향상시키고 싶다면 좁은 범위의 계산을 수행할 수도 있습니다.
시트만 계산하기
특정 시트만 계산하도록 코드를 작성할 수도 있습니다.
아래 코드는 활성 시트에서만 Calculate 명령을 수행합니다:
ActiveSheet.Calculate
아래 코드는 Sheet1에서만 Calculate 명령을 수행합니다:
Sheets("Sheet1").Calculate
범위만 계산하기
더 좁은 범위의 계산이 필요한 경우 셀 범위에서만 Calculate 명령을 수행하도록 코드를 작성할 수 있습니다:
Sheets("Sheet1").Range("a1:a10").Calculate
개별 수식 계산하기
아래 코드는 개별 셀 수식만 계산합니다:
Range("a1").Calculate
통합 문서 계산하기
전체 통합 문서만 계산하는 옵션은 따로 없습니다. 전체 통합 문서를 계산해야 하는 경우 Calculate 명령을 단독으로 사용하면 됩니다:
Calculate
이 명령은 열려 있는 모든 통합 문서에서 Calculate 명령을 수행합니다. 전체 통합 문서에서 Calculate 명령을 수행할 때 속도가 중요시된다면 열려있는 통합문서를 지정해야 합니다.
통합문서 계산하기 – 잘못된 메서드 사용
VBA가 통합 문서 하나만 계산하도록 강제하는 데 사용할 수 있는 몇 가지 방법이 있지만 제대로 작동하지 않습니다.
이 코드는 통합 문서의 각 워크시트를 반복하여 한 번에 한 시트씩 Calculate 명령을 수행합니다:
Sub Recalculate_Workbook()
Dim ws As Worksheet
For Each ws In Worksheets
ws.Calculate
Next ws
End Sub
이 코드는 모든 워크시트가 “독립형”인 경우, 즉 다른 시트를 참조하는 계산이 없는 경우 잘 작동합니다.
그러나 워크시트가 다른 시트를 참조하는 경우 계산이 제대로 업데이트되지 않을 수 있습니다. 예를 들어 Sheet2보다 먼저 Sheet1을 계산할 경우 Sheet1의 수식이 Sheet2에서 수행한 계산에 의존하는 경우 수식에 최신 값이 포함되지 않습니다.
모든 시트를 한 번에 선택하고 활성 시트를 계산해 볼 수도 있습니다:
ThisWorkbook.Sheets.Select
ActiveSheet.Calculate
하지만 이 경우에도 동일한 문제가 발생합니다.