728x90
반응형
데이터를 입력했을 때 그 데이터를 입력한 시간을 표시하는 VBA 코드입니다.
작 동 방 식
반응형
준 비 사 항
아래와 같이 간단한 표를 만들었습니다.
B열에 데이터를 입력하면 A열에 날짜와 시간이 자동으로 입력되는 코드입니다.
먼저 VBA 편집기를 실행한 후
워크시트(Sheet1) 더블클릭 → Worksheet 선택 → Change
를 선택합니다.
전체 코드
전체 코드는 아래와 같습니다.
Private Sub Worksheet_Change(ByVal Target As Range)
TargetColumn = 2
DateColumn = 1
If Not Intersect(Target, Me.Columns(TargetColumn)) Is Nothing Then
If Target.Value <> "" Then
Cells(Target.Row, DateColumn).Value = Now
Else
Cells(Target.Row, DateColumn).Value = ""
End If
End If
End Sub
코 드 분 석
TargetColumn은 데이터를 입력할 열이고
DateColumn은 날짜를 표시할 열입니다.
TargetColumn = 2
DateColumn = 1
Intersect 함수는 두 범위가 겹치는 부분을 반환합니다.
☞ 엑셀 VBA에서 두 개의 범위가 겹치는 공통 셀 찾기 : Intersect 함수
Target은 변경된 셀을 의미하고,
Me.Columns(TargetColumn)은 현재 워크시트의 B열을 의미합니다.
즉, 바뀐 데이터가 B열이 맞는지 확인을 하는 것이고
다른 열의 데이터가 바뀌었다면 해당 코드는 실행되지 않습니다.
If Not Intersect(Target, Me.Columns(TargetColumn)) Is Nothing Then
아래 코드는 변경된 셀의 값이 비어있지 않으면
A열에 현재 날짜와 시간을 입력합니다.
만약 비어있다면 빈문자열이 입력이 됩니다.
만약 B열의 데이터가 지워진다면 A열의 데이터도 지워집니다.
If Target.Value <> "" Then
Cells(Target.Row, DateColumn).Value = Now
Else
Cells(Target.Row, DateColumn).Value = ""
End If
728x90
마 치 며
위 코드는 셀 하나하나씩 조작할 때 동작합니다.
범위를 선택해서 지우면 에러가 발생합니다.
한 번에 여러개의 셀을 삭제하지 못하도록 제한하려면
코드를 아래와 같이 변경하시면 됩니다.
Private Sub Worksheet_Change(ByVal Target As Range)
Dim TargetColumn As Integer
Dim DateColumn As Integer
TargetColumn = 2
DateColumn = 1
If Target.Cells.Count > 1 Then
Application.EnableEvents = False
MsgBox "한 번에 하나의 셀만 변경할 수 있습니다."
Application.Undo
Set lastCell = Target.Cells(Target.Cells.Count)
lastCell.Select
Application.EnableEvents = True
Exit Sub
End If
If Not Intersect(Target, Me.Columns(TargetColumn)) Is Nothing Then
If Target.Value <> "" Then
Cells(Target.Row, DateColumn).Value = Now
Else
Cells(Target.Row, DateColumn).Value = ""
End If
End If
End Sub
여기를 방문하시면 더 많은 엑셀 관련 자료를 확인할 수 있습니다.
728x90
반응형
'EXCEL VBA' 카테고리의 다른 글
[ 엑셀 VBA ] 셀 병합 해제하고 자동 채우기 (0) | 2024.09.26 |
---|---|
[ 엑셀 VBA ] VBA 코드 보호하기 : VBA 코드 암호 걸기 (0) | 2024.09.26 |
[ 엑셀 VBA ] 선택한 범위의 셀 주소 표시하기 (0) | 2024.09.07 |
[ 엑셀 VBA ] VBA로 하이퍼링크(Hyperlinks) 추가하기 (0) | 2024.09.06 |
[ 엑셀 VBA ] 시트 이동하는 여러가지 방법, 시트 이동하기 (0) | 2024.09.06 |