엑셀 수정 시간 기록 - egsel sujeong sigan gilog

이것저것

엑셀) 데이터를 입력하면 입력시간이 고정된 값으로 자동 입력 함수

데이터를 입력하면 다른 셀에 입력시간이 자동으로 입력하는 방법 입니다.

Ctrl + Shift + ; 을 누르면 현재 시간이 고정된 값으로 입력이 되지만

이 키를 매번 눌러줘야 하는 불편이 있습니다.

단순히 now()함수로 처리하려고 하다보면

함수계산할때 마다 현재시간이 갱신 되어서 계속 값이 변하는 문제가 있더군요

인터넷 찾아 보면 매크로도 나오는데 예를 들어 다음과 같습니다.

Private Sub Worksheet_Change(ByVal Target As Range)
Application.EnableEvents = False
Dim r As Range
Set r = Columns(Target.Column)
If Application.WorksheetFunction.CountIf(r, "식별코드") > 0 And IsNumeric(Target.Offset(, -1)) Then
    Target.Offset(, 3) = Now
End If
Set r = Columns(Target.Column)
If Application.WorksheetFunction.CountIf(r, "식별코드") > 0 And IsNumeric(Target.Offset(, -1)) Then
    Target.Offset(, 4) = Now
End If
Set r = Nothing
Application.EnableEvents = True
End Sub 

'식별코드'라는 항목에 값이 있으면 3칸 옆과 4칸 옆에 현재시간을 입력하는 매크로인데

매크로가 익숙하지 않다보니 코드가 있어도 넣기가 어렵고

넣고 나서 열을 삽입하는 경우 버그가 생기는데 VBA를 잘 모르니 버그를 처리할 방법을 모르겠더라구요

매크로에 익숙하다면 매크로가 더 좋을 수도 있는데

그냥 함수로 처리할 수 있는 방법이 있을까...찾아보았더니

어렵게 찾았어요

if문과 now()함수를 순환참조를 이용한 방법이에요

=IF(LEN(C7)=0,"",IF(B7="",NOW(),B7))

C7에 데이터가 입력이 되면 B7셀에 데이터 입력한 시간이 자동으로 입력되는 함수입니다.

C7셀에 값이 없으면, 그냥 공란으로 놔두고

값이 있을 경우, B7셀이 공란이면 현재시간을 입력하고, 이미 입력한 현재시간이 있으면 그냥 현재시간을 입력하라는 조건문이에요

이 함수를 사용하기 전에 반드시 설정 변경해야 할 것이 있어요

엑셀 2007이상에서

엑셀 > 파일 > 옵션 > 수식 에서 "반복 계산 사용"을 체크해야 사용 가능합니다.

안할 경우 순환 참조 오류가 나와요

알지 못하면 생각하기 어렵드라구요

상당히 유용한 함수입니다.

엑셀 오늘 날짜 자동 입력 목차 바로가기

  1. 엑셀 순환참조 오류 발생원인 및 해결방법 :: 엑셀위키
  2. 예제파일 다운로드
  3. 엑셀 날짜/시간을 단축키로 입력하는 방법
  4. 엑셀 오늘 날짜 자동 입력, 함수로 구현하기
  5. 오늘 날짜 자동입력 매크로 명령문
  6. 질문: 데이터가 삭제되더라도, 기존 날짜를 그대로 유지하고 싶습니다.

영상 강의

예제파일 다운로드

오빠두엑셀의 강의 예제파일은 여러분을 위해 자유롭게 제공하고 있습니다.

이번 강의에 사용된 기초 함수

엑셀 날짜/시간을 단축키로 입력하는 방법

엑셀 단축키를 활용하면 오늘 날짜 및 현재 시간을 매우 편리하게 입력할 수 있습니다. 아래 단축키를 사용하여 날짜와 시간을 입력하면 기존에 적용되어 있던 서식은 초기화됩니다.

  1. 오늘 날짜 입력하기

    단축키 : Ctrl + ;

    단축키 Ctrl + ; 는 오늘 날짜를 입력합니다.
  2. 현재 시간 입력하기

    단축키 : Ctrl + Shift + ;

    단축키 Ctrl + Shift + ; 는 현재 시간을 입력합니다.
  3. 오늘 날짜 + 현재 시간 입력

    단축키 : Ctrl + ; → Space →  Ctrl + Shift + ;

    단축키 Ctrl + ; 와 Ctrl + Shift + ; 로 오늘날짜/시간을 동시에 입력할 수 있습니다.

엑셀 오늘 날짜 자동 입력, 함수로 구현하기

만약 오늘 날짜나 현재 시간을 매번 입력해줘야 할 경우에는 함수를 활용하여 작업시간을 대폭 단축하고 자동화 시킬 수 있습니다. 단, 오늘 날짜 자동입력을 함수로 구현하려면 해당 파일의 수식 반복계산을 허용해줘야 하는데요.

반복계산을 허용한다는 것은, 수식의 '순환 참조'를 허용한다는 뜻입니다. 따라서, 사용자가 의도치 않게 순환참조가 된 수식을 잘못 입력할 경우 파일 내 처리속도가 느려지는 영향을 미칠 수 있다는 점에 주의해야 합니다.

엑셀 순환 참조가 발생하는 원인 및 해결 방법에 대한 자세한 설명은 아래 관련포스트를 확인해주세요.

  1. 예제파일의 E5셀을 선택한 뒤, 아래 수식을 입력한 뒤, 아래로 자동채우기 합니다.

    =IF(D5<>"",IF(E5="",TODAY(),E5),"")

    수식을 예제파일 E5셀에 입력한 뒤 아래로 자동채우기 합니다.
  2. 입력한 수식은 E5셀(자기 자신)이 참조된 수식이므로, D5셀에 완료여부를 "O"로 입력하면 '순환 참조로 인해 올바르게 계산하지 못할 수 있습니다' 라는 안내메시지가 출력됩니다.
    완료여부에 값을 입력하면 순환참조 오류메시지가 출력됩니다.
  3. [파일] - [옵션] - [수식] 으로 이동한 뒤, '반복 계산 사용'을 활성화 한 후, [확인] 버튼을 클릭하여 설정을 변경합니다.
    엑셀 수식 옵션에서 반복계산사용 하도록 설정을 변경합니다.
  4. 이후 완료여부에 "O" (또는 다른 값)을 입력하면 배송일에 오늘 날짜가 자동으로 입력됩니다.
    완료여부에 값을 입력하면 오늘 날짜가 자동으로 입력됩니다.
  5. 만약 오늘 날짜가 아닌 현재시간을 입력하려면 수식의 TODAY 함수를 NOW 함수로 변경합니다.

    =IF(D5<>"",IF(E5="",NOW(),E5),"")

오늘 날짜 자동 입력 VBA 매크로 명령문

함수를 사용하여 오늘 날짜 자동입력을 자동화 하게되면, 해당 파일이 실행되어 있는 동안 '반복 계산'이 허용되므로 순환참조 오류가 발생한 셀로 인하여 처리 속도가 느려지는 문제가 발생할 수 있습니다.

하지만 이 문제는, 이후에 순환 참조가 일어난 수식이 있는 파일을 다시 실행할 시에 엑셀이 자동으로 이를 감지하여 순환 참조 오류를 안내해주므로 쉽게 해결할 수 있는 문제이기도 합니다.

만약 이러한 문제를 근본적으로 해결하고 좀 더 확실하게 자동화를 구현하고자 한다면 아래 VBA 매크로를 사용할 수 있습니다.

  1. [개발도구] - [Visual Basic]을 클릭하거나, 단축키 Alt + F11 로 매크로 편집기로 이동합니다. 만약 [개발도구]가 안보이실 경우, 아래 개발도구 활성화 방법 관련 포스트를 참고하세요.
  2. VBA 편집기 좌측에서, 오늘 날짜 자동 입력을 적용할 시트를 찾아 더블클릭합니다. 시트를 더블클릭하면 해당 시트의 모듈이 활성화됩니다.
    시트를 더블클릭하면 시트 모듈이 활성화됩니다.
  3. 아래 명령문을 복사한 뒤, 시트 모듈 안에 붙여넣기 합니다.

    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 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. 명령문에 미리 작성된 4개의 범위를 필요에 따라 적절히 수정합니다. 작성된 코드 맨 앞에 어퍼스트로피(')를 추가하면 해당 부분이 주석처리 됩니다.
    명령문 앞에 어퍼스트로피(')를 입력하면 해당 부분이 주석처리 됩니다.
  5. 시트로 돌아온 뒤, 완료여부에 값을 입력하면 배송일과 배송시간이 자동으로 입력됩니다.
    완료여부에 값을 입력하면 오늘 날짜 / 시간이 자동 입력됩니다.

자주 묻는 질문

질문1. 데이터가 삭제 되더라도, 기존 날짜를 그대로 유지하고 싶습니다.

기존 공식은 완료가 입력되어있을 경우 (예: 값이 처음 입력되거나, 완료 여부가 다른 값으로 바뀔 때)에만 날짜가 유지됩니다. 그리고 완료 여부를 지우면 날짜가 빈칸으로 초기화 되는데요.

만약 완료를 입력한 뒤, 완료를 삭제하더라도 기존 날짜를 유지해야 한다면 아래 공식을 사용하여 문제를 해결할 수 있습니다. (질문주신 가비24님께 감사드립니다.)

=IF(D5<>"",IF(E5="",TODAY(),E5),IF(E5>0,E5,""))
'완료여부가 빈칸이 아니고, 날짜가 입력되어 있을 경우에는 기존 날짜를 유지합니다.

Toplist

최신 우편물

태그