엑셀

Change 이벤트와 Calculate 이벤트

파란바람이 2020. 7. 11. 11:57

안녕하세요.

 

특정 셀의 값이 바뀌면 자동으로 다른 셀에 값을 복사하는 작업을 하려고 합니다.

이렇게 복사된 값을 이용해 차트를 만드는 일도 있습니다.

 

완성 파일 다운로드

매번 바뀌는 데이터 딴 셀에 저장하고 차트로 만들기(Change).xlsm
0.02MB
매번 바뀌는 데이터 딴 셀에 저장하고 차트로 만들기(Calculate).xlsm
0.02MB

 

사용자의 추가 작업 없이 동작해야 하므로 이벤트(Events)를 이용해야 합니다.

 

딱 생각난게 Change 이벤트 입니다.

 

<Alt + F11>키를 눌러 VBE를 엽니다.

Sheet1 시트 Worksheet 개체 Change 이벤트에 작성합니다.

Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Intersect(Target, Me.Range("A1")) Is Nothing Then

        Application.EnableEvents = False

        If Range("C2").Value <> "" Then
            위치 = Range("C1").End(xlDown).Row
        Else
            위치 = 1
        End If

        위치 = 위치 + 1

        Range("C" & 위치).Value = Date & " " & Format(Time, "hh:mm:ss")

        Range("A1").Copy
        Range("D" & 위치).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
        
        Range("A1").Select

        Application.EnableEvents = True
    End If
End Sub

 

이렇게 작성하고 [A1] 셀 값을 바꾸면 바뀐 값이 저장됩니다.

 

그런데 [A1] 셀에 수식이 작성되어 수식의 결과값이 바뀌는 경우에는 [A1] 셀에 입력된 값 자체가 바뀌는게 아니기 때문에 Change 이벤트가 아니라 Calculate 이벤트가 동작합니다.

 

Private Sub Worksheet_Calculate()
    Application.EnableEvents = False
    
    If Range("C2").Value <> "" Then
        위치 = Range("C1").End(xlDown).Row
    Else
        위치 = 1
    End If
    
    위치 = 위치 + 1
    
    Range("C" & 위치).Value = Date & " " & Format(Time, "hh:mm:ss")
    
    Range("A1").Copy
    Range("D" & 위치).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
    :=False, Transpose:=False
    
    Range("A1").Select
    
    Application.EnableEvents = True
End Sub

 

두 이벤트 모두에 코드를 작성하면 안됩니다.

 

 

추가된 데이터를 기반으로 바뀌는 차트는 데이터를 로 바꿔, 표를 기반으로 차트를 만들었습니다.

 

Change 이벤트와 Calculate 이벤트 이용하기 여기까지 입니다.

 

수고하셨습니다.