Note: The other languages of the website are Google-translated. Back to English

Excel에서 변경된 셀의 이전 셀 값을 기억하거나 저장하는 방법은 무엇입니까?

일반적으로 새 내용으로 셀을 업데이트할 때 Excel에서 작업을 취소하지 않는 한 이전 값이 적용됩니다. 그러나 업데이트된 값과 비교하기 위해 이전 값을 유지하려면 이전 셀 값을 다른 셀이나 셀 주석에 저장하는 것이 좋습니다. 이 기사의 방법은 이를 달성하는 데 도움이 될 것입니다.

Excel에서 VBA 코드로 이전 셀 값 저장


Excel에서 VBA 코드로 이전 셀 값 저장


아래 스크린 샷과 같은 테이블이 있다고 가정합니다. C 열의 셀이 변경된 경우 이전 값을 G 열의 해당 셀에 저장하거나 자동으로 주석에 저장하려고합니다. 그것을 달성하기 위해 다음과 같이하십시오.

1. 업데이트 할 때 저장할 값이있는 워크 시트에서 시트 탭을 마우스 오른쪽 버튼으로 클릭하고 코드보기 오른쪽 클릭 메뉴에서. 스크린 샷보기 :

2. 오프닝에서 응용 프로그램 용 Microsoft Visual Basic 창에서 아래 VBA 코드를 코드 창에 복사하십시오.

다음 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 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

주의 사항: 코드에서 숫자 7은 이전 셀을 저장할 G 열을 나타내고 C : C는 이전 셀 값을 저장할 열입니다. 필요에 따라 변경하십시오.

3. 클릭 도구 > 참조 를 열려면 심판 – VBAProject 대화 상자에서 Microsoft 스크립팅 런타임 상자를 클릭하고 마지막으로 OK 단추. 스크린 샷보기 :

4. 누르세요 다른 + Q 닫는 키 응용 프로그램 용 Microsoft Visual Basic 창.

이제부터 C 열의 셀 값이 업데이트되면 해당 셀의 이전 값이 G 열의 해당 셀에 저장되거나 아래 스크린 샷과 같이 주석으로 저장됩니다.

다른 셀에 이전 셀 값 저장:

주석에 이전 셀 값 저장:


최고의 사무 생산성 도구

Excel 용 Kutools는 대부분의 문제를 해결하고 생산성을 80 % 향상시킵니다.

  • 재사용: 빠르게 삽입 복잡한 공식, 차트 그리고 이전에 사용한 모든 것; 셀 암호화 암호로; 메일 링리스트 생성 이메일 보내기 ...
  • 슈퍼 포뮬러 바 (여러 줄의 텍스트와 수식을 쉽게 편집 할 수 있습니다.) 레이아웃 읽기 (많은 수의 셀을 쉽게 읽고 편집합니다.) 필터링 된 범위에 붙여 넣기...
  • 셀 / 행 / 열 병합 데이터 손실없이; 셀 내용 분할; 중복 행 / 열 결합... 중복 셀 방지; 범위 비교...
  • 중복 또는 고유 선택 행; 빈 행 선택 (모든 셀이 비어 있음); 슈퍼 찾기 및 퍼지 찾기 많은 통합 문서에서; 무작위 선택 ...
  • 정확한 사본 수식 참조를 변경하지 않고 여러 셀; 참조 자동 생성 여러 시트에; 글 머리 기호 삽입, 확인란 등 ...
  • 텍스트 추출, 텍스트 추가, 위치 별 제거, 공간 제거; 페이징 부분합을 만들고 인쇄합니다. 셀 내용과 주석 간 변환...
  • 슈퍼 필터 (다른 시트에 필터 구성표 저장 및 적용) 고급 정렬 월 / 주 / 일, 빈도 등 특수 필터 굵은 기울임 꼴로 ...
  • 통합 문서와 워크 시트 결합; 키 열을 기반으로 테이블 병합; 데이터를 여러 시트로 분할; xls, xlsx 및 PDF 일괄 변환...
  • 300 개 이상의 강력한 기능. Office / Excel 2007-2019 및 365를 지원합니다. 모든 언어를 지원합니다. 기업 또는 조직에 쉽게 배포 할 수 있습니다. 전체 기능 30 일 무료 평가판. 60 일 환불 보장.
kte 탭 201905

Office Tab은 Office에 탭 인터페이스를 제공하여 작업을 훨씬 쉽게 만듭니다.

  • Word, Excel, PowerPoint에서 탭 편집 및 읽기 사용, Publisher, Access, Visio 및 Project.
  • 새 창이 아닌 동일한 창의 새 탭에서 여러 문서를 열고 만듭니다.
  • 생산성을 50 % 향상시키고 매일 수백 번의 마우스 클릭을 줄입니다!
officetab 하단
코멘트 (14)
아직 평가가 없습니다. 가장 먼저 평가하세요!
이 댓글은 사이트의 중재자에 의해 최소화되었습니다
나는 이와 같은 것이 필요하지만 특정 셀에서만 (예 : H12에 이전 값을 표시하는 G23)
이 댓글은 사이트의 중재자에 의해 최소화되었습니다
그리고 기타 ... 결과에 의해 셀이 변경될 때 이 실행이 필요합니다(예: A1 + B1 = C1... A 또는 B 값을 변경하면 스크립트가 작동하지 않습니다 - G 셀에서는 아무 일도 일어나지 않음)
이 댓글은 사이트의 중재자에 의해 최소화되었습니다
안녕 ! 셀에 여러 변경 사항을 등록할 수 있는지 알고 싶었습니다. 즉, 셀 C2에 데이터를 넣은 다음 다른 정보를 위해 해당 데이터를 변경하면 이전 데이터가 셀 G2로 전달됩니다(이 게시물에서와 같이 ) 하지만 C2 셀에서 값을 한 번 더 변경하면 H2 셀에 두 번째 변경(예를 들어)을 전달하고 이제 깨달은 3가지 움직임의 정보를 등록하고 거의 5번 수행합니다. more(이전 셀 값을 5번 저장). 당신이 나를 도울 수 있다면 나는 당신의 게시물에서 내 문제를 부분적으로 해결할 수있는 유일한 장소이기 때문에 대단히 감사 할 것입니다. 이 콘텐츠를 공유해 주셔서 감사합니다!!!!
이 댓글은 사이트의 중재자에 의해 최소화되었습니다
이 작업을 수행하는 방법을 찾았습니까?
이 댓글은 사이트의 중재자에 의해 최소화되었습니다
"If/else"라는 문장에서 생각하고 있었지만 VBA를 처음 사용하므로 저를 도울 수 있는 다른 게시물이 있으면 공유해 주세요. 다시 한 번 감사드립니다! 지식을 계속 공유
이 댓글은 사이트의 중재자에 의해 최소화되었습니다
위의 코드가 DDE 데이터에 대해 작동하지 않는 이유는 dde를 통해 변경되는 열에 데이터가 있지만 해당 열의 이전 값을 다른 열에 저장하기 위해 이 코드를 적용한 순간 아무 것도 하지 않는 것입니다.

이를 달성하는 데 도움을 주시면 감사하겠습니다.
이 댓글은 사이트의 중재자에 의해 최소화되었습니다
안녕하세요!

훌륭한 기능이지만 VLOOKUP이 포함된 값을 기억하고 싶은 셀에서도 작동하도록 어떻게 수정할 수 있습니까? 불행히도 VLOOKUP에서 값을 저장하기 위해 수정할 항목을 찾지 못했습니다. VLOOKUP이 중간에있을 때 작동하지 않기 때문에 :(

도움을 주셔서 미리 감사드립니다!
이 댓글은 사이트의 중재자에 의해 최소화되었습니다
안녕하세요, 귀하가 만든 "VBA 코드: 이전 셀 값을 다른 열 셀에 저장" 코드를 수정했지만 몇 가지 질문이 있습니다.

1. 코드는 어떤 열에 새 값이 있는지 어떻게 알 수 있습니까? (다른 업데이트 후에 다른 열에 값이 표시됨)
2. 이것을 어떻게 매크로로 만들 수 있습니까? 또는 다른 프로그램이 xlsm을 호출할 때 자동으로 실행되도록 합니다. 파일?

감사
이 댓글은 사이트의 중재자에 의해 최소화되었습니다
이것은 하나의 셀 값에 대한 것이지만 여러 셀 값에 대해 어떻게 해야 합니까? 예를 들어 C, D, E, F 셀 데이터를 각각 G, H, I, J 셀로 4개의 셀 데이터 저장 및 업데이트를 원합니다. 어떻게 할 수 있습니까? 도와주세요
이 댓글은 사이트의 중재자에 의해 최소화되었습니다
저장하고 싶은 셀이 수식이라면 G 셀은 수식만 저장하고 값을 계산합니다. 공식이 아니라 값을 저장해야 합니다. 수식은 변경되지 않았지만 값이 변경되었음을 VBA 코드에 어떻게 알릴 수 있습니까? 안부 플레밍
이 댓글은 사이트의 중재자에 의해 최소화되었습니다
모든 변경 사항에 대해 이를 반복할 수 있는 방법이 있습니까? 가능하면 댓글 상자에 이전 항목이 모두 표시되기를 바랍니다.
이 댓글은 사이트의 중재자에 의해 최소화되었습니다
안녕 제니! 이 문제를 해결하셨습니까? 또한 모든 새 항목을 주석 상자에 수집하려고 하지만 VBA 코드를 여기에 적용하는 데 어려움을 겪고 있습니다. 고맙습니다!
이 댓글은 사이트의 중재자에 의해 최소화되었습니다
입력하면 잘 됩니다. DDE(Dynamic Data Exchange)의 함수 값도 사용하여 데이터 입력 시 작업을 도와주실 수 있나요?
이 댓글은 사이트의 중재자에 의해 최소화되었습니다
안녕,
죄송합니다. 이 문제를 해결할 수 없습니다. 다른 Excel 애호가의 도움을 받으려면 아래 포럼에 문제를 게시하는 것이 좋습니다.
https://www.extendoffice.com/forum/kutools-for-excel.html
아직 코멘트가 없습니다
여러분의 의견을 남겨
게스트로 게시
×
이 게시물 평가 :
0  등장 인물
추천 위치