Excel 에서 변경된 셀의 이전 값을 어떻게 기억하거나 저장하나요?
Excel 에서 셀을 편집하면 이전 값은 즉시 덮어쓰여지고 실행 취소를 하지 않는 한 더 이상 표시되지 않습니다. 비교, 감사 또는 롤백을 위해 이전 값을 보존해야 하는 경우, 짧은 VBA 루틴을 사용해 각 변경 전에 이전 값을 도우미 열에 자동으로 기록하거나, 파일이 OneDrive/SharePoint 에 저장된 경우 Microsoft 365 도구(변경 내용 표시 및 버전 기록)를 사용해 변경 사항을 검토할 수 있습니다。 이 튜토리얼에서는 두 가지 방법을 모두 설명하므로 워크플로 및 거버넌스 요구사항에 맞는 방법을 선택할 수 있습니다。
Excel 에서 VBA 코드로 이전 셀 값을 저장하기
다음 스크린샷과 같은 테이블이 있다고 가정해 보겠습니다. 열 C 의 셀이 편집될 때마다 해당 이전 값을 열 G 의 대응하는 셀에 저장하거나 나중에 참고 및 검토를 위해 자동으로 의견로 추가하고 싶을 수 있습니다。 이 방법은 지속적인 데이터 입력이나 품질 검사 중 이전 값을 쉽게 확인하고 참조해야 할 때 특히 유용합니다。

주요 시나리오:재고, 로그 또는 재무 추적과 같이 변경 사항을 자주 검토하거나 조정해야 하는 워크시트의 경우, 이전 값을 시각적으로 유지하면 저장 시간하고 실수로 인한 데이터 손실을 최소화할 수 있습니다。
시작하려면 이전 값을 기록할 워크시트를 엽니다。 그런 다음 다음 단계를 따르세요:
1. 시트 탭을 마우스 오른쪽 버튼으로 클릭하고 바로 가기 메뉴에서 「코드 보기」를 선택합니다。 그러면 Visual Basic for Applications(VBA) 편집기가 열립니다。 스크린샷 참조:
![Excel 워크시트 탭의 오른쪽 클릭 메뉴에서 [코드 보기] 옵션을 보여주는 스크린샷](http://cdn.extendoffice.com/images/stories/doc-excel/doc-save-previous-cell-value/doc-save-previous-cell-value-2.png)
2. 「Microsoft Visual Basic for Applications」 창에서 다음 VBA 코드를 코드 창에 붙여넣습니다。 이 매크로는 대상 열의 셀 이전 값을 다른 열에 저장하는 데 도움을 줍니다。
이 스크립트를 실행하기 전에 코드 내 대상 열 참조를 조정해야 합니다. 이 예제에서 「C:C」는 변경 사항을 추적할 열을 나타내며 숫자 "7"는 이전 값을 저장할 열 G 에 해당합니다。 레이아웃에 따라 이러한 참조를 사용자 지정할 수 있습니다。
VBA 코드: 이전 셀 값을 다른 열의 셀에 저장하기
Dim xRg As Range
Dim xChangeRg As Range
Dim xDependRg As Range
Dim xDic As New Dictionary
Private Sub Worksheet_Change(ByVal Target As Range)
Dim I As Long
Dim xCell As Range
Dim xDCell As Range
Dim xHeader As String
Dim xCommText As String
On Error Resume Next
Application.ScreenUpdating = False
Application.EnableEvents = False
xHeader = "Previous value :"
x = xDic.Keys
For I = 0 To UBound(xDic.Keys)
Set xCell = Range(xDic.Keys(I))
Set xDCell = Cells(xCell.Row, 7)
xDCell.Value = ""
xDCell.Value = xDic.Items(I)
Next
Application.EnableEvents = True
Application.ScreenUpdating = True
End Sub
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim I, J As Long
Dim xRgArea As Range
On Error GoTo Label1
If Target.Count > 1 Then Exit Sub
Application.EnableEvents = False
Set xDependRg = Target.Dependents
If xDependRg Is Nothing Then GoTo Label1
If Not xDependRg Is Nothing Then
Set xDependRg = Intersect(xDependRg, Range("C:C"))
End If
Label1:
Set xRg = Intersect(Target, Range("C:C"))
If (Not xRg Is Nothing) And (Not xDependRg Is Nothing) Then
Set xChangeRg = Union(xRg, xDependRg)
ElseIf (xRg Is Nothing) And (Not xDependRg Is Nothing) Then
Set xChangeRg = xDependRg
ElseIf (Not xRg Is Nothing) And (xDependRg Is Nothing) Then
Set xChangeRg = xRg
Else
Application.EnableEvents = True
Exit Sub
End If
xDic.RemoveAll
For I = 1 To xChangeRg.Areas.Count
Set xRgArea = xChangeRg.Areas(I)
For J = 1 To xRgArea.Count
xDic.Add xRgArea(J).Address, xRgArea(J).Formula
Next
Next
Set xChangeRg = Nothing
Set xRg = Nothing
Set xDependRg = Nothing
Application.EnableEvents = True
End Sub 이전 값을 의견로 저장하는 것이 더 적합한 경우(빠른 확인 및 주석용)—대상 열의 셀이 변경될 때마다 이를 자동으로 수행하는 다음 VBA 코드를 사용하세요:
VBA 코드: 이전 셀 값을 주석에 저장하기
Dim xRg As Range
Dim xChangeRg As Range
Dim xDependRg As Range
Dim xDic As New Dictionary
Private Sub Worksheet_Change(ByVal Target As Range)
Dim I As Long
Dim xCell As Range
Dim xHeader As String
Dim xCommText As String
On Error Resume Next
Application.ScreenUpdating = False
Application.EnableEvents = False
xHeader = "Previous value :"
For I = 0 To UBound(xDic.Keys)
Set xCell = Range(xDic.Keys(I))
If Not xCell.Comment Is Nothing Then xCell.Comment.Delete
With xCell
.AddComment
.Comment.Visible = False
.Comment.Text xHeader & vbCrLf & xDic.Items(I)
End With
Next
Application.EnableEvents = True
Application.ScreenUpdating = True
End Sub
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim I, J As Long
Dim xRgArea As Range
On Error GoTo Label1
If Target.Count > 1 Then Exit Sub
Application.EnableEvents = False
Set xDependRg = Target.Dependents
If xDependRg Is Nothing Then GoTo Label1
If Not xDependRg Is Nothing Then
Set xDependRg = Intersect(xDependRg, Range("C:C"))
End If
Label1:
Set xRg = Intersect(Target, Range("C:C"))
If (Not xRg Is Nothing) And (Not xDependRg Is Nothing) Then
Set xChangeRg = Union(xRg, xDependRg)
ElseIf (xRg Is Nothing) And (Not xDependRg Is Nothing) Then
Set xChangeRg = xDependRg
ElseIf (Not xRg Is Nothing) And (xDependRg Is Nothing) Then
Set xChangeRg = xRg
Else
Application.EnableEvents = True
Exit Sub
End If
xDic.RemoveAll
For I = 1 To xChangeRg.Areas.Count
Set xRgArea = xChangeRg.Areas(I)
For J = 1 To xRgArea.Count
xDic.Add xRgArea(J).Address, xRgArea(J).Text
Next
Next
Set xChangeRg = Nothing
Set xRg = Nothing
Set xDependRg = Nothing
Application.EnableEvents = True
End Sub 매개변수 참고 사항:
- Cells(xCell.Row,7)의
Number7은 열 G 를 가리킵니다。 다른 열에 이전 값을 저장하려면 이 값을 변경하세요。 Range("C:C")는 변경 사항을 추적할 열을 정의합니다. 필요에 따라 「D:D」와 같이 열 D 로 조정하세요。
3. 스크립트에 사전(Dictionary) 지원을 활성화하려면 VBA 편집기에서 「도구」 > 「참조...」로 이동합니다。 「참조 – VBAProject」 대화상자가 나타나면 「Microsoft Scripting Runtime」을 선택하고 아래 스크린샷과 같이 「확인」을 클릭합니다:

4. VBA 편집기를 닫고 워크시트로 돌아가려면 「Alt」 + 「Q」를 누릅니다。
이제부터 열 C 의 값이 수정될 때마다 Excel 은 자동으로 해당 이전 값을 열 G 에 복사하거나 셀의 주석에 추가합니다。 이를 통해 변경 사항을 편리하게 추적하고 검증하여 감사, 검토 또는 오류 수정을 위한 과거 데이터에 쉽게 접근할 수 있습니다。
다른 셀에 이전 셀 값을 저장한 예시 출력:

주석에 이전 셀 값을 저장한 예시 출력:

팁 및 문제 해결:
- VBA 매크로가 예상대로 작동하지 않으면 「파일」 > 「옵션」 > 「신뢰 센터」 > 「매크로 설정」에서 매크로 보안 설정을 확인하고 「모든 매크로 사용」으로 설정하세요。
- 값이 의도한 위치에 기록되지 않으면 열 참조를 다시 확인하세요。
- 오류가 지속되면 위와 같이 「Microsoft Scripting Runtime」 라이브러리가 제대로 활성화되어 있는지 확인하세요。
Microsoft 365 —변경 내용 표시및버전 기록
Microsoft 365 에서는 레거시 변경 내용 추적 없이도 편집 내역(누가 언제 무엇을 변경했는지, 이전/이후 값 포함)을 감사할 수 있습니다。 셀 단위 세부 정보는변경 내용 표시를 사용하고, 전체 파일 스냅샷 및 복원은버전 기록을 사용하세요。
요구 사항
- 통합 문서가OneDrive또는SharePoint에 저장되었습니다。
- Microsoft 365 계정으로 로그인했으며자동 저장이켜져있습니다。
- 최신 형식().xlsx)을 사용 중이며 레거시공유 통합 문서(레거시)는 사용하지 않습니다。
변경 내용 표시(셀 단위 감사)
1. 클라우드에 저장된 통합 문서를 열고검토 ▸ 변경 내용 표시를 선택해 패널을 엽니다。
2. (선택 사항) 결과 범위를 좁히려면 먼저 시트나 범위를 선택하세요。
3. 항목을 찾아 편집자, 타임스탬프 및이전 → 새값을 확인하고, 항목을 클릭해 해당 셀로 이동하세요。
버전 기록(비교 및 복원)
1. 파일 ▸ 정보 ▸ 버전 기록으로 이동합니다。
2. 이전 버전을 열어 비교하거나 셀을 복사하거나복원을 클릭해 전체 파일을 이전 상태로 되돌릴 수 있습니다。
- 변경 내용 표시가 비활성화되어 있나요?OneDrive/SharePoint 에 저장하고, 자동 저장을 켠 다음 호환 모드에서 변환하세요()파일 ▸ 정보 ▸ 변환)。 또한공유 통합 문서(레거시)가 꺼져 있는지 확인하세요. 데스크톱 버전이 계속 사용할 수 없으면 웹용 Excel 을 사용해 보세요。
- 보안/잠금:통합 문서/워크시트 보호, 암호화 또는 IRM 이 변경 내용 표시 기능을 비활성화할 수 있습니다。
- 로컬 파일:순수 로컬 파일의 경우 전체 기록이 유지되지 않습니다。 최상의 결과를 얻으려면 클라우드를 통해 버전 기록을 사용하세요。
- 셀에 값을 직접 기록해야 하나요?변경 내용 표시 및 버전 기록은 감사 도구입니다。 각 편집 시 “이전 값”을 도우미 열에 기록하려면 간단한
Worksheet_ChangeVBA 로거를 사용하세요。
장점
- 누가 언제 변경했는지 이전/이후 값을 포함해 자동으로 감사합니다。 매크로가 필요 없습니다。
- OneDrive/SharePoint 에 저장하면 Windows, Mac, 웹 등 크로스플랫폼에서 사용 가능합니다。
단점
- 클라우드 저장소 및 자동 저장이 필요하며 일부 일시적인 편집에 대해서는 세부 정보가 제한됩니다。
- 이전 값을 셀에 자동으로 입력하지 않습니다. 비즈니스 로직을 위해 해당 기능이 필요하면 VBA 를 사용하세요。
최고의 Office 생산성 도구
| 🤖 | KUTOOLS AI 도우미: 다음을 기반으로 데이터 분석 혁신하기:지능형 실행 | 코드 생성| 사용자 지정 수식 생성 | 데이터 분석 및 차트 생성| 향상된 함수 호출… |
| 인기 기능:찾기, 강조 표시 또는 중복 표시 | 빈 행 삭제 | 데이터 손실 없이 열 결합 또는 셀 제거 | 공식을 사용하지 않는 반올림... | |
| 슈퍼 LOOKUP:다중 조건 VLookup | 다중 값 VLookup | 여러 시트에서 VLookup | 퍼지 매치.... | |
| 고급 드롭다운 목록:드롭다운 목록 빠르게 생성 | 종속형 드롭다운 목록 | 다중 선택 드롭다운 목록.... | |
| 열 관리자:특정 수의 열 추가|열 이동|숨겨진 열의 표시 상태 전환|범위 및 열 비교... | |
| 주요 기능:그리드 포커스 | 디자인 보기 |향상된 수식 표시줄 | 워크북 및 시트 관리자 | 자원 라이브러리(자동 텍스트)| 날짜 선택기 | 워크시트 병합 | 암호화/셀 해독 | 목록으로 이메일 보내기 | 슈퍼 필터 | 특수 필터(굵은 글꼴이 있는 셀 필터링/기울임꼴/취소선。。。) 。。。 | |
| 상위 15 도구 모음:12 텍스트도구(텍스트 추가,특정 문자 삭제, ...)| 50+차트유형(간트 차트, ...)| 40+ 실용적인수식(생일을 기준으로 나이 계산, ...)| 19 삽입도구(QR 코드 삽입,경로에서 그림 삽입, ...)| 12 변환도구(단어로 변환하기,환율 변환, ...)| 7 병합 및 분할도구(고급 행 병합,셀 분할, ...)|그 외 더 많은 기능 |
Kutools for Excel 로 Excel 역량을 한 단계 업그레이드하고 전례 없는 효율성을 경험하세요。Kutools for Excel 는 생산성과 저장 시간을 향상시키는 300 개 이상의 고급 기능을 제공합니다。가장 필요한 기능을 지금 바로 확인하세요。。。
Office Tab 가 Office 에 탭 인터페이스를 제공하여 작업을 훨씬 쉽게 만들어 줍니다
- Word, Excel, PowerPoint 에서 탭 기반 편집 및 읽기 기능을 활성화합니다, Publisher, Access, Visio 및 Project 에서도 사용 가능합니다。
- 새 창이 아닌 동일한 창의 새 탭에서 여러 문서를 열고 생성할 수 있습니다。
- 50% 만큼 생산성을 높이고 매일 수백 번의 마우스 클릭을 줄여줍니다!
모든 Kutools 애드인。 하나의 설치 프로그램
Kutools for Office스위트 번들은 Excel, Word, Outlook 및 PowerPoint 용 애드인과 Office Tab Pro 를 포함하며, 다양한 Office 앱을 사용하는 팀에 이상적입니다。
- 올인원 스위트— Excel, Word, Outlook 및 PowerPoint 애드인 + Office Tab Pro
- 하나의 설치 프로그램, 하나의 라이선스— 몇 분 안에 설정 완료(MSI 지원)
- 함께 사용할수록 더 효과적입니다— Office 앱 전반에서 생산성 향상
- 30 일간 모든 기능 무료 체험— 등록이나 신용카드 필요 없음
- 최고의 가성비— 개별 애드인 구매 대비 절약