728x90
320x100

 

 

지인으로 부터 부탁을 받아 셀에 입력한 날짜가 남는 메크로를 작성했습니다.

조건은 아래와 같습니다.

 

조건 1. B열의 값이 변하면 A열에 날짜가 기록될 것
조건 2. 값이 변해야만 기록되고, 새로 바꾸면 또 기록할 것
조건 3. B열의 값이 지워져서 공백이면 A열도 공백이 될 것 

 

[상단매뉴] - [개발] - [Visual Basic]을 클릭하거나 Alt + F11로 Visual Basic for Applications (VBA) 에디터를 엽니다.

혹시 창이 없으신 분은 "링크 : 개발 도구 활성화" 에서 개발도구를 활성화 시키는 방법을 알아보세요.

 

VBA 에디터는 기본으로 오른쪽에 프로젝트 리스트가 있습니다.

여기에 VBAProject (파일이름) 아래 개체가 있고, 시트의 리스트가 있습니다.

Sheet1이나 원하는 시트를 더블클릭하면 해당 시트와 연결된 에디터 창을 열 수 있습니다.

 

프로젝트 탐색기 창

 

처음 창을 열면 상단에 (일반) / (선언)이라고 되어 있는 매뉴를 확인할 수 있습니다.

먼저 일반을 클릭해서 Worksheet로 변경합다.
오른쪽에 선언도 변경이 되는데 리스트에서 Change를 찾아 바꿀 수 있습니다.

이제 셀에 값이 변경되면 이벤트가 일어나는 CHANGE 매소스를 사용합니다.

 

CHAGE 선언하기

 

다음으로는 소스를 보겠습니다.

 

Private Sub Worksheet_Change(ByVal Target As Range)   '자동으로 입력됩니다.
    Dim rng As Range
    
    Columns("A:A").NumberFormatLocal = "yy""년 ""mm""월 ""dd""일 "" hh:mm:ss"
    'A열의 날짜 형식으로 입력하고 초까지 표시되게 만든다.
    Set rng = Intersect(Target, Me.Range("B:B"))
    'B:B 범위를 타겟으로 하고 범위 rng에 입력합니다.
    Columns("A:A").ColumnWidth = 22       '열의 너비를 22.0로 변경한다
    
    If Not rng Is Nothing Then         '타겟범위 rng가 비어있지 않을 때
        Dim cell As Range
        For Each cell In rng
            If cell.Value <> "" Then
                Me.Cells(cell.Row, "A").Value = Now()
                '공백이 아니라면 NOW()를 A에 같은 열번호에 입력한다.
            Else
                Me.Cells(cell.Row, "A").ClearContents
                'else(공백이면) A에 같은 위치에 값을 지운다.
            End If
        Next cell
    End If
End Sub

 

변경한 순간 시간이 A열에 같은 칸에 자동으로 기록될 것입니다.

문서가 열려 있으면 계속해서 동작해서 B열의 값이 변경되면 A열이 변경됩니다.

지금은 "Sheet1"의 코드 창에 작성되어 해당 시트에서 동작하지만 다른 시트에도 코드를 복사/붙여넣기하면 됩니다.

엑셀문서를 저장할 때는 xlsm 확장자로 저장해야 코드가 날아가는 참사를 피할 수 있습니다.

그리고 소스에서 열너비와 서식을 설정했지만 그건 원래는 따로 설정하는것도 편리합니다.

 

사용결과

 

 

예제 시간남기기.xlsm
0.02MB

 

 

 

 

반응형

+ Recent posts