엑셀 오늘 날짜 자동 입력, IF 함수로 쉽게 해결하는 방법
엑셀 오늘 날짜 자동 입력 목차 바로가기
영상 강의
예제파일 다운로드
오빠두엑셀의 강의 예제파일은 여러분을 위해 자유롭게 제공하고 있습니다.
- [실무기초] 엑셀 오늘 날짜 자동 입력예제파일[실무기초] 엑셀 오늘 날짜 자동 입력완성파일
이번 강의에 사용된 기초 함수
엑셀 단축키를 활용하면 오늘 날짜 및 현재 시간을 매우 편리하게 입력할 수 있습니다. 아래 단축키를 사용하여 날짜와 시간을 입력하면 기존에 적용되어 있던 서식은 초기화됩니다.
- 오늘 날짜 입력하기
단축키 : Ctrl + ;
단축키 Ctrl + ; 는 오늘 날짜를 입력합니다. - 현재 시간 입력하기
단축키 : Ctrl + Shift + ;
단축키 Ctrl + Shift + ; 는 현재 시간을 입력합니다. - 오늘 날짜 + 현재 시간 입력
단축키 : Ctrl + ; → Space → Ctrl + Shift + ;
단축키 Ctrl + ; 와 Ctrl + Shift + ; 로 오늘날짜/시간을 동시에 입력할 수 있습니다.
만약 오늘 날짜나 현재 시간을 매번 입력해줘야 할 경우에는 함수를 활용하여 작업시간을 대폭 단축하고 자동화 시킬 수 있습니다. 단, 오늘 날짜 자동입력을 함수로 구현하려면 해당 파일의 수식 반복계산을 허용해줘야 하는데요.
반복계산을 허용한다는 것은, 수식의 '순환 참조'를 허용한다는 뜻입니다. 따라서, 사용자가 의도치 않게 순환참조가 된 수식을 잘못 입력할 경우 파일 내 처리속도가 느려지는 영향을 미칠 수 있다는 점에 주의해야 합니다.
엑셀 순환 참조가 발생하는 원인 및 해결 방법에 대한 자세한 설명은 아래 관련포스트를 확인해주세요.
- 예제파일의 E5셀을 선택한 뒤, 아래 수식을 입력한 뒤, 아래로 자동채우기 합니다.
=IF(D5<>"",IF(E5="",TODAY(),E5),"")
수식을 예제파일 E5셀에 입력한 뒤 아래로 자동채우기 합니다. - 입력한 수식은 E5셀(자기 자신)이 참조된 수식이므로, D5셀에 완료여부를 "O"로 입력하면 '순환 참조로 인해 올바르게 계산하지 못할 수 있습니다' 라는 안내메시지가 출력됩니다.
완료여부에 값을 입력하면 순환참조 오류메시지가 출력됩니다. - [파일] - [옵션] - [수식] 으로 이동한 뒤, '반복 계산 사용'을 활성화 한 후, [확인] 버튼을 클릭하여 설정을 변경합니다.
엑셀 수식 옵션에서 반복계산사용 하도록 설정을 변경합니다. - 이후 완료여부에 "O" (또는 다른 값)을 입력하면 배송일에 오늘 날짜가 자동으로 입력됩니다.
완료여부에 값을 입력하면 오늘 날짜가 자동으로 입력됩니다. - 만약 오늘 날짜가 아닌 현재시간을 입력하려면 수식의 TODAY 함수를 NOW 함수로 변경합니다.
=IF(D5<>"",IF(E5="",NOW(),E5),"")
함수를 사용하여 오늘 날짜 자동입력을 자동화 하게되면, 해당 파일이 실행되어 있는 동안 '반복 계산'이 허용되므로 순환참조 오류가 발생한 셀로 인하여 처리 속도가 느려지는 문제가 발생할 수 있습니다.
하지만 이 문제는, 이후에 순환 참조가 일어난 수식이 있는 파일을 다시 실행할 시에 엑셀이 자동으로 이를 감지하여 순환 참조 오류를 안내해주므로 쉽게 해결할 수 있는 문제이기도 합니다.
만약 이러한 문제를 근본적으로 해결하고 좀 더 확실하게 자동화를 구현하고자 한다면 아래 VBA 매크로를 사용할 수 있습니다.
- [개발도구] - [Visual Basic]을 클릭하거나, 단축키 Alt + F11 로 매크로 편집기로 이동합니다. 만약 [개발도구]가 안보이실 경우, 아래 개발도구 활성화 방법 관련 포스트를 참고하세요.
- VBA 편집기 좌측에서, 오늘 날짜 자동 입력을 적용할 시트를 찾아 더블클릭합니다. 시트를 더블클릭하면 해당 시트의 모듈이 활성화됩니다.
시트를 더블클릭하면 시트 모듈이 활성화됩니다. - 아래 명령문을 복사한 뒤, 시트 모듈 안에 붙여넣기 합니다.
Private Sub Worksheet_Change(ByVal Target As Range) Dim Rng As Range: Dim TimeRng As Range: Dim DateRng As Range: Dim dtRng As Range Dim tC As Long: Dim dC As Long: Dim R As Long On Error Resume Next Application.EnableEvents = False Set Rng = Me.Range("D:D") '<-- 오늘 날짜/시간이 입력되도록 감지할 범위를 입력합니다. Set DateRng = Me.Range("E:E") '<-- 오늘 날짜가 입력될 범위입니다. (또는 날짜가 입력될 범위가 없을 경우 문장을 삭제) Set TimeRng = Me.Range("F:F") '<-- 오늘 시간이 입력될 범위입니다. (또는 시간이 입력될 범위가 없을 경우 문장을 삭제) Set dtRng = Me.Range("G:G") '<-- 오늘 시간/날짜가 모두 입력될 범위입니다. (또는 범위가 없을 경우 문장을 삭제) If Not Intersect(Target, Rng) Is Nothing Then '행 삭제 시 데이터가 초기화 되는 문제를 해결하려면, 아래 코드를 추가합니다. 'If IsNull(Target.Text) Then Exit Sub If Target.Text <> "" Then R = Target.Row If Not IsEmpty(DateRng) Then dC = DateRng.Column: Me.Cells(R, dC).Value = Date If Not IsEmpty(TimeRng) Then tC = TimeRng.Column: Me.Cells(R, tC).Value = Time If Not IsEmpty(dtRng) Then tC = dtRng.Column: Me.Cells(R, tC).Value = Now Else R = Target.Row If Not IsEmpty(DateRng) Then dC = DateRng.Column: Me.Cells(R, dC).Value = "" If Not IsEmpty(TimeRng) Then tC = TimeRng.Column: Me.Cells(R, tC).Value = "" If Not IsEmpty(dtRng) Then tC = dtRng.Column: Me.Cells(R, tC).Value = "" End If End If Application.EnableEvents = True End Sub
- 명령문에 미리 작성된 4개의 범위를 필요에 따라 적절히 수정합니다. 작성된 코드 맨 앞에 어퍼스트로피(')를 추가하면 해당 부분이 주석처리 됩니다.
명령문 앞에 어퍼스트로피(')를 입력하면 해당 부분이 주석처리 됩니다. - 시트로 돌아온 뒤, 완료여부에 값을 입력하면 배송일과 배송시간이 자동으로 입력됩니다.
완료여부에 값을 입력하면 오늘 날짜 / 시간이 자동 입력됩니다.
자주 묻는 질문
질문1. 데이터가 삭제 되더라도, 기존 날짜를 그대로 유지하고 싶습니다.
기존 공식은 완료가 입력되어있을 경우 (예: 값이 처음 입력되거나, 완료 여부가 다른 값으로 바뀔 때)에만 날짜가 유지됩니다. 그리고 완료 여부를 지우면 날짜가 빈칸으로 초기화 되는데요.
만약 완료를 입력한 뒤, 완료를 삭제하더라도 기존 날짜를 유지해야 한다면 아래 공식을 사용하여 문제를 해결할 수 있습니다. (질문주신 가비24님께 감사드립니다.)
=IF(D5<>"",IF(E5="",TODAY(),E5),IF(E5>0,E5,""))
'완료여부가 빈칸이 아니고, 날짜가 입력되어 있을 경우에는 기존 날짜를 유지합니다.