엑셀 VBA에서 Calculate 이벤트는 해당 워크시트(Worksheet) 또는 워크북(Workbook)의 수식이 다시 계산될 때 자동으로 실행되는 이벤트입니다.
즉, 셀의 값이 변경되거나 자동 계산이 발생할 때 특정 동작을 실행할 수 있습니다.
1. 기본 문법
📌 Worksheet_Calculate 이벤트 (워크시트에서 발생)
Private Sub Worksheet_Calculate()
' 실행할 코드
End Sub
|
📌 현재 워크시트에서 수식이 다시 계산될 때 실행됨
📌 이 코드는 특정 워크시트(Sheet1, Sheet2 등)에 작성해야 함
📌 Workbook_SheetCalculate 이벤트 (워크북 전체에서 발생)
Private Sub Workbook_SheetCalculate(ByVal Sh As Object)
' 실행할 코드
End Sub
|
📌 워크북 내 모든 시트에서 계산이 발생할 때 실행됨
📌 이 코드는 ThisWorkbook 모듈에 작성해야 함
2. 수식이 다시 계산될 때 메시지 표시 (Worksheet_Calculate)
Private Sub Worksheet_Calculate()
MsgBox "이 워크시트에서 수식이 다시 계산되었습니다!"
End Sub
|
📌 워크시트의 수식이 다시 계산될 때 메시지 표시
3. 수식이 다시 계산될 때 특정 셀의 값을 변경
Private Sub Worksheet_Calculate()
Range("B1").Value = "마지막 계산 시간: " & Now
End Sub
|
📌 수식이 다시 계산될 때 B1 셀에 현재 시간을 입력
4. 워크북 전체에서 계산될 때 실행 (Workbook_SheetCalculate)
Private Sub Workbook_SheetCalculate(ByVal Sh As Object)
MsgBox Sh.Name & " 시트에서 수식이 다시 계산되었습니다!"
End Sub
|
📌 워크북 내 어떤 시트에서든 수식이 다시 계산될 때 실행됨
📌 계산이 발생한 시트 이름을 메시지로 표시
5. 수식이 다시 계산될 때 특정 값 변경 (Worksheet_Calculate)
Private Sub Worksheet_Calculate()
If Range("A1").Value > 100 Then
Range("C1").Value = "100 초과!"
Else
Range("C1").Value = "100 이하"
End If
End Sub
|
📌 A1 셀의 값이 100을 초과하면 C1에 "100 초과!"를 표시, 아니면 "100 이하"를 표시
6. 수식이 다시 계산될 때 특정 색상 변경
Private Sub Worksheet_Calculate()
If Range("D1").Value > 50 Then
Range("D1").Interior.Color = RGB(255, 0, 0) ' 빨간색
Else
Range("D1").Interior.Color = RGB(0, 255, 0) ' 초록색
End If
End Sub
|
📌 D1 셀의 값이 50보다 크면 빨간색, 작거나 같으면 초록색으로 변경
7. 수식이 다시 계산될 때 특정 시트로 이동
Private Sub Worksheet_Calculate()
If Range("E1").Value = "완료" Then
Sheets("보고서").Activate
End If
End Sub
|
📌 E1 셀의 값이 "완료"이면 "보고서" 시트로 자동 이동
8. 수식이 다시 계산될 때 특정 행 숨기기
Private Sub Worksheet_Calculate()
If Range("F1").Value = "숨김" Then
Rows("5:5").Hidden = True
Else
Rows("5:5").Hidden = False
End If
End Sub
|
📌 F1 셀의 값이 "숨김"이면 5번째 행을 숨기고, 그렇지 않으면 표시
9. 워크북의 모든 시트에서 계산이 발생할 때 실행 (Workbook_SheetCalculate)
Private Sub Workbook_SheetCalculate(ByVal Sh As Object)
Debug.Print Sh.Name & " 시트가 다시 계산됨: " & Now
End Sub
|
📌 워크북 내 모든 시트에서 계산이 발생할 때 즉시 창(Immediate Window)에 계산된 시트 이름과 시간을 출력
10. 수식이 다시 계산될 때 특정 매크로 실행
Private Sub Worksheet_Calculate()
Call 내매크로
End Sub
Sub 내매크로()
MsgBox "수식이 다시 계산될 때 실행되는 매크로입니다!"
End Sub
|
📌 수식이 계산될 때 내매크로 실행
11. 수식이 다시 계산될 때 자동으로 파일 저장
Private Sub Workbook_SheetCalculate(ByVal Sh As Object)
ThisWorkbook.Save
MsgBox "파일이 자동으로 저장되었습니다!"
End Sub
|
📌 워크북의 수식이 다시 계산될 때 파일을 자동으로 저장
12. 특정 셀 값이 변할 때만 실행되도록 제한
Dim 이전값 As Double
Private Sub Worksheet_Calculate()
Dim 현재값 As Double
현재값 = Range("G1").Value
If 현재값 <> 이전값 Then
MsgBox "G1 셀이 변경되었습니다!"
이전값 = 현재값
End If
End Sub
|
📌 G1 셀 값이 변경될 때만 메시지 표시 (기존 값과 비교)
📌 Calculate 이벤트 사용 시 주의할 점
- 모든 수식이 다시 계산될 때마다 실행되므로 빈번한 실행 가능성
- 불필요한 반복 실행을 막기 위해 특정 셀 값 비교(이전값 저장 후 비교)를 활용
- 자동 계산(Automatic Calculation)이 켜져 있어야 함
- Application.Calculation = xlCalculationAutomatic 필요
- 수식이 많을 경우 성능 저하 가능성
- 코드 실행 시간이 오래 걸리면 엑셀 속도 저하 가능
📝 정리
기능
|
VBA 코드 (Calculate 이벤트)
|
수식이 다시 계산될 때 메시지 표시
|
MsgBox "수식이 다시 계산되었습니다!"
|
계산 후 특정 셀에 현재 시간 입력
|
Range("B1").Value = "마지막 계산 시간: " & Now
|
워크북 전체에서 계산 시 실행
|
Workbook_SheetCalculate(ByVal Sh As Object)
|
셀 값이 특정 조건이면 다른 셀 변경
|
If Range("A1").Value > 100 Then Range("C1").Value = "100 초과!"
|
셀 값이 특정 조건이면 색상 변경
|
If Range("D1").Value > 50 Then Range("D1").Interior.Color = RGB(255,0,0)
|
계산 후 특정 시트로 이동
|
If Range("E1").Value = "완료" Then Sheets("보고서").Activate
|
특정 행 숨기기/보이기
|
If Range("F1").Value = "숨김" Then Rows("5:5").Hidden = True
|
수식 계산 시 파일 자동 저장
|
ThisWorkbook.Save
|
이전 값과 비교하여 실행 제한
|
If 현재값 <> 이전값 Then ...
|
🔥 VBA의 Calculate 이벤트를 활용하면 자동 계산이 발생할 때 특정 작업을 실행할 수 있습니다! 🚀