지인으로 부터 부탁을 받아 셀에 입력한 날짜가 남는 메크로를 작성했습니다.
조건은 아래와 같습니다.
조건 1. B열의 값이 변하면 A열에 날짜가 기록될 것
조건 2. 값이 변해야만 기록되고, 새로 바꾸면 또 기록할 것
조건 3. B열의 값이 지워져서 공백이면 A열도 공백이 될 것
[상단매뉴] - [개발] - [Visual Basic]을 클릭하거나 Alt + F11로 Visual Basic for Applications (VBA) 에디터를 엽니다.
혹시 창이 없으신 분은 "링크 : 개발 도구 활성화" 에서 개발도구를 활성화 시키는 방법을 알아보세요.
VBA 에디터는 기본으로 오른쪽에 프로젝트 리스트가 있습니다.
여기에 VBAProject (파일이름) 아래 개체가 있고, 시트의 리스트가 있습니다.
Sheet1이나 원하는 시트를 더블클릭하면 해당 시트와 연결된 에디터 창을 열 수 있습니다.

처음 창을 열면 상단에 (일반) / (선언)이라고 되어 있는 매뉴를 확인할 수 있습니다.
먼저 일반을 클릭해서 Worksheet로 변경합다.
오른쪽에 선언도 변경이 되는데 리스트에서 Change를 찾아 바꿀 수 있습니다.
이제 셀에 값이 변경되면 이벤트가 일어나는 CHANGE 매소스를 사용합니다.

다음으로는 소스를 보겠습니다.
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 확장자로 저장해야 코드가 날아가는 참사를 피할 수 있습니다.
그리고 소스에서 열너비와 서식을 설정했지만 그건 원래는 따로 설정하는것도 편리합니다.

'엑셀' 카테고리의 다른 글
엑셀(EXCEL) FIXED 함수로 반올림을 해서 자리수를 맞추고 유효숫자의 개수를 일정하게 하는 법( + 유효숫자의 중요성) (0) | 2023.06.18 |
---|---|
엑셀(EXCEL) 셀의 서식과 상태 정보를 알려주는 CELL 함수로 사용자 서식 적용여부 알아보기(셀의 위치, 파일이름과 경로, 서식 알기) (0) | 2023.06.10 |
엑셀(EXCEL) 하이퍼링크 글꼴 형식 바꾸기(글자색, 밑줄 바꾸기, 서식 스타일 매뉴) (0) | 2023.06.05 |
엑셀(EXCEL) 하이퍼링크와 HYPERLINK함수로 내용을 연결하여 문서 편리하게 꾸미기(인터넷주소, 로컬파일, 엑셀 다른 시트 연결하기) (0) | 2023.06.05 |
엑셀(EXCEL) 하이퍼 링크를 해제하거나 입력 안되도록 하는 방법 (0) | 2023.06.04 |