- 최초 작성일: 2003-04-17
- 최종 수정일: 2026-09-30
- 조회수: 10 회
- 작성자: 권현욱 (엑셀러)
- 강의 제목: 셀 변경 내용을 메모에 기록하기
들어가기 전에
오래 전 엑셀 파일로 진행하던 강의를 웹 글로 복원한 것이라, "버튼을 눌러보세요"처럼 엑셀에서 직접 조작하라는 표현이 남아 있을 수 있습니다. 결과는 본문의 그림이나 표로 확인하실 수 있으며, 현재와 맞지 않는 내용은 보완하되 전반적인 스타일은 당시의 갬성(?)을 유지했습니다.
Take care of the pence, and the pounds will take care of themselves. 동전을 돌보면, 파운드는 그들 스스로를 돌본다.
그대로 직역하면 위와 같이 되겠습니다만, 약간 의역을 하면... 우리 속담의 티끌모아 태산에 해당되는 말이 되겠습니다. 꼭 재물에만 해당되는 말은 아닐 것입니다. 작은 일을 소홀히 하지 않으면 큰 일도 이루게 되겠지요?
셀 변경 내용을 메모에 기록하기
핵심 요약: 셀 변경 이력을 메모에 기록하기
시트의 Change 이벤트를 이용하면 셀이 수정될 때마다 누가 언제 고쳤는지를 메모에 계속 쌓아 둘 수 있습니다.
- 1단계: 시트 탭에서 코드 보기를 선택합니다.
- 2단계: Worksheet 개체의 Change 이벤트를 선택합니다.
- 3단계: 기존 메모에 사용자 이름과 수정 시각을 덧붙이는 코드를 작성합니다.
Step 1: 어떤 질문이었을까요?
셀의 내용이 변경될 때마다 표시를 할 수 없느냐는 질문을 주신 분이 있었습니다. 다른 방법도 있을 수 있습니다만, Worksheet 오브젝트의 Change 이벤트를 잘 이용하면 충분히 가능합니다.
아래의 버튼을 눌러 Stage 시트로 가신 다음 셀의 내용을 마음대로 바꾸어 보세요.
어떤 셀이든 내용에 변경이 있을 경우 변경된 이력이 메모에 차곡차곡 담기게 됩니다.
Step 2: Worksheet_Change 이벤트 작성하기
(1) 이력이 계속 기록되도록 할 워크시트의 시트탭을 오른쪽 마우스 버튼으로 클릭하고 '코드 보기' 메뉴를 선택합니다.
(2) Worksheet 오브젝트의 Change 이벤트를 선택합니다.
(3) 아래와 같은 코드를 작성합니다.
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
Dim rngCell As Range
Dim strOld As String
Dim strNew As String
For Each rngCell In Target
With rngCell
If Not .Comment Is Nothing Then strOld = .Comment.Text Else strOld = ""
' 셀에 기존에 입력된 메모 내용이 있으면 strOld 라는 문자열 변수에 담아 둡니다.
If .Comment Is Nothing Then .AddComment
strNew = strOld & Application.UserName & "님에 의해 " _
& Now & "에 수정되었습니다" & vbLf
' 기존 메모 내용에 새로운 정보(변경된 이력 정보)를 계속 추가해 나갑니다.
.Comment.Text Text:=strNew
.Comment.Shape.TextFrame.AutoSize = True
' 메모의 크기를 내용에 맞게 조절합니다.
End With
Next rngCell
End Sub
Change 이벤트는 워크시트의 셀 내용이 바뀔 때마다 실행되며, 바뀐 셀이 Target 인수로 전달됩니다. 각 셀의 기존 메모 내용에 사용자 이름과 수정 시각을 한 줄씩 덧붙이는 방식이므로 변경 이력이 차곡차곡 쌓입니다.
싱거우리만치 간단하지 않습니까? ^^ 어떤 곳에 응용을 하면 좋을 지 골똘히 고민해 보세요.
이번 시간은 여기까지…
정리 — 변경 이력 메모 핵심 코드
| 구분 | 사용한 코드 | 역할 |
|---|---|---|
| 이벤트 | Worksheet_Change(ByVal Target) | 셀 변경 시 자동 실행 |
| 기존 메모 | .Comment.Text | 이전 이력 보관 |
| 메모 만들기 | .AddComment | 메모가 없을 때 생성 |
| 사용자 이름 | Application.UserName | 수정한 사람 |
| 수정 시각 | Now | 수정한 날짜와 시간 |
자주 묻는 질문 (FAQ)
Q1. Worksheet_Change 이벤트는 어디에 작성하나요?
이력을 기록할 워크시트의 코드 창(시트 모듈)에 작성합니다. 시트 탭을 마우스 오른쪽 버튼으로 눌러 코드 보기를 선택하면 됩니다.
Q2. 변경된 셀은 어떻게 알 수 있나요?
이벤트 프로시저의 Target 인수에 변경된 셀이 전달되므로 For Each로 각 셀을 순환하며 처리합니다.
Q3. 메모의 크기는 어떻게 맞추나요?
메모 도형의 TextFrame.AutoSize 속성을 True로 지정하면 내용에 맞게 크기가 조절됩니다.
마치며
이벤트 프로시저를 활용하면 별도의 조작 없이 변경 이력을 자동으로 남길 수 있습니다. 어떤 업무에 응용할지 고민해 보시기 바랍니다.