- 최초 작성일: 2005-03-09
- 최종 수정일: 2026-09-30
- 조회수: 8 회
- 작성자: 권현욱 (엑셀러)
- 강의 제목: 즉석계산기능 흉내내기
들어가기 전에
오래 전 엑셀 파일로 진행하던 강의를 웹 글로 복원한 것이라, "버튼을 눌러보세요"처럼 엑셀에서 직접 조작하라는 표현이 남아 있을 수 있습니다. 결과는 본문의 그림이나 표로 확인하실 수 있으며, 현재와 맞지 않는 내용은 보완하되 전반적인 스타일은 당시의 갬성(?)을 유지했습니다.
Once long long time ago… 아주 아주 오래 전에 Exceller가 '즉석 계산기능'이라고 이름붙인 기능이 있었는데 기억이 나십니까? 상태표시줄 부분을 오른쪽 마우스 버튼으로 클릭하면 짠~ 하고 나타나는 단축 메뉴 있지 않습니까? 요런거 말입니다.
즉석계산기능 흉내내기
핵심 요약: 상태 표시줄에 여러 계산 결과 표시하기
기본 상태 표시줄은 선택한 한두 가지 계산 결과만 보여 주지만, SheetSelectionChange 이벤트를 사용하면 개수, 합계, 평균을 동시에 표시할 수 있습니다.
- 1단계: ThisWorkbook 개체에 Workbook_SheetSelectionChange 이벤트 프로시저를 만듭니다.
- 2단계: Target(선택 영역)에 Count, Sum, Average 함수를 적용합니다.
- 3단계: 결과를 문자열로 만들어 Application.StatusBar에 표시합니다.
Step 1: 즉석 계산기능 살펴보기
보시는 것처럼 여섯 가지의 계산 방법 중에서 하나를 선택한 다음, 숫자가 입력된 영역을 선택하면 그 결과가 바로 작업 표시줄에 나타납니다(그래서 즉석 계산기능 이라고 명명해 본 것입니다).
그건 그렇다 치고… 계산 방법을 굳이 한 가지만 선택할 것이 아니라 두 개 혹은 그 이상의 계산 결과가 동시에 나타나도록 하면 더욱 편리하지 않을까요?
눈썰미가 있는 분이라면 이미 눈치 채셨을 법도 합니다만, 숫자가 들어있는 영역을 선택하면 개수, 합계, 평균 이 세 가지 계산 방법이 함께 표시되도록 이 파일은 이미 설정이 되어 있습니다.
숫자가 들어있는 영역을 선택하신 다음, 7시 방향으로 시선을 그윽하게 내려보면 상태 표시줄에 다음과 같이 세 종류의 계산 결과가 나타나 있음을 볼 수 있습니다.
Step 2: 이벤트 프로시저 만들기
이러한 기능은 ThisWorkbook 오브젝트의 SheetSelectionChange 이벤트 핸들러 프로시저를 사용하면 가능합니다.
(1) <Alt> + F11 키를 눌러 VB Editor를 활성화시킵니다.
(2) 화면 왼쪽에 있는 프로젝트 탐색기에서 이 기능을 구현하려는 VBAProject, 즉 파일의 ThisWorkbook 개체를 더블 클릭합니다.
(3) 코드 창(Code Window)이 열리는데, 코드 창 상단에 있는 두 개의 드롭다운 버튼을 이용하여 Workbook과 SheetSelectionChange를 각각 선택하면 다음과 같이 Workbook_SheetSelectionChange 이벤트 프로시저가 생성됩니다.
Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
End Sub
여기서 파라미터(parameter, 매개변수)로 사용된 두 개의 변수 중 Sh는 해당 워크시트를, Target은 선택된 영역을 의미합니다.
(4) 이 이벤트 프로시저에 다음과 같은 코드를 작성합니다.
Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
Dim dblCount As Double
Dim dblSum As Double
Dim dblAverage As Double
Dim strCalcResult As String
On Error GoTo ErrorHandler
' 상태 표시줄에 표시할 계산 결과값을 각각의 변수에 저장해 둡니다.
dblCount = Application.WorksheetFunction.Count(Target)
dblSum = Application.WorksheetFunction.Sum(Target)
dblAverage = Application.WorksheetFunction.Average(Target)
If dblCount <> 0 Then
' Count 함수의 계산 결과가 0이 아니면 strCalcResult 변수에 Count, Sum, Average 함수의
' 사용 결과값을 문자열 형태로 담아둡니다.
strCalcResult = "개수: " & dblCount & _
" / 합계: " & dblSum & _
" / 평균: " & dblAverage
Application.StatusBar = strCalcResult
' 상태 표시줄에 계산 결과값을 뿌려줍니다.
Else
' 계산 결과값이 0이면, 즉 오류가 발생하였으면 상태 표시줄을 초기 상태(default)로
' 되돌리고 프로시저를 빠져 나갑니다.
Application.StatusBar = False
End If
Exit Sub
ErrorHandler:
On Error GoTo 0
Application.StatusBar = False
End Sub
조금만 응용력을 발휘하면 분산이나 표준편차, Median값 등에 대해서도 추가하실 수 있을 것입니다. 여력이 되는 분은 여러 가지 계산 방법 중에서 사용자가 마음대로 조합을 해서 표시할 수 있도록 인터페이스를 바꾸어 보시면 재미있겠지요?
오늘은 여기까지…
정리 — 즉석 계산 코드 핵심
| 구분 | 사용한 코드 | 역할 |
|---|---|---|
| 이벤트 | Workbook_SheetSelectionChange | 선택 영역이 바뀔 때마다 실행 |
| 선택 영역 | Target | 선택된 영역 |
| 계산 | WorksheetFunction.Count / Sum / Average | 개수, 합계, 평균 계산 |
| 표시 | Application.StatusBar = strCalcResult | 상태 표시줄에 결과 표시 |
| 초기화 | Application.StatusBar = False | 상태 표시줄을 기본 상태로 복원 |
자주 묻는 질문 (FAQ)
Q1. Workbook_SheetSelectionChange 이벤트는 언제 발생하나요?
통합 문서의 어느 시트에서든 선택 영역이 바뀔 때마다 발생합니다. 매개변수 Sh는 해당 시트를, Target은 선택된 영역을 의미합니다.
Q2. 상태 표시줄을 원래대로 되돌리려면 어떻게 하나요?
Application.StatusBar = False를 실행하면 상태 표시줄이 기본 상태로 돌아갑니다.
Q3. 분산이나 표준편차, 중앙값도 표시할 수 있나요?
네, WorksheetFunction에 Var, StDev, Median 같은 함수를 추가로 호출해 문자열에 이어 붙이면 됩니다.
마치며
조금만 응용력을 발휘하면 분산, 표준편차, 중앙값 등도 추가할 수 있고, 사용자가 원하는 계산 방법을 직접 고르도록 인터페이스를 바꿔 볼 수도 있습니다.