엑셀 체크박스 체크하면 날짜 자동입력, 날짜가 매일 바뀔 때

2026-09-08

어제 체크해 둔 줄의 날짜가 오늘 파일을 열자 전부 오늘 날짜로 바뀌어 있다면, 수식이 잘못된 것이 아니라 TODAY() 함수의 성질 때문입니다. 먼저 안 되는 것부터 말씀드립니다. =IF(B3=TRUE, TODAY(), "") 같은 단순 수식으로는 체크한 날짜를 기록할 수 없습니다. TODAY()는 휘발성 함수라 파일을 열 때, 시트를 다시 계산할 때마다 그 시점의 날짜를 새로 냅니다. 값을 저장하는 것이 아니라 매번 다시 물어보는 구조입니다. 정산 시트에서 "입금 확인일"로 쓰셨다면 지난달 기록이 통째로 오늘 날짜로 덮여 보이게 됩니다.

왜 자기 셀을 참조해야 날짜가 고정되나

날짜를 남기려면 "이미 값이 있으면 손대지 않는다"는 조건이 필요합니다. 그 조건을 수식으로 쓰면 자기 자신을 참조하게 되고, 이것이 순환 참조입니다. 엑셀은 기본적으로 순환 참조를 오류로 막기 때문에 설정을 하나 풀어야 합니다.

파일 - 옵션 - 수식 - 반복 계산 사용 체크, 최대 반복 횟수 100.

C3에 넣을 수식입니다.

=IF(B3=TRUE, IF(C3="", TODAY(), C3), "")

C3 셀 서식을 날짜로 지정하십시오. 안 하면 46000 같은 일련번호로 보입니다.

함정이 둘입니다. 첫째, 반복 계산은 시트가 아니라 엑셀 계산 옵션 전체에 걸립니다. 켜 둔 동안에는 다른 파일에서 실수로 만든 순환 참조도 경고 없이 조용히 잘못된 값을 냅니다. 정산처럼 합계가 맞아야 하는 파일에서는 이 부작용을 감수할지 먼저 판단하십시오. 둘째, 그래도 완전한 고정은 아닙니다. 체크를 실수로 풀었다 다시 걸면 기존 날짜는 사라지고 오늘 날짜가 새로 들어갑니다.

확실히 고정하려면 VBA

시트 탭 우클릭 - 코드 보기에 붙여넣고, 파일을 .xlsm(매크로 사용 통합 문서)으로 저장하십시오. .xlsx로 저장하면 코드가 경고 후 사라집니다.

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim rng As Range, c As Range
    Set rng = Intersect(Target, Me.Range("B3:B1000"))
    If rng Is Nothing Then Exit Sub

    On Error GoTo 마무리
    Application.EnableEvents = False
    For Each c In rng
        If c.Value = True Then
            c.Offset(0, 1).NumberFormat = "yyyy-mm-dd"
            c.Offset(0, 1).Value = Date
        Else
            c.Offset(0, 1).ClearContents
        End If
    Next c
마무리:
    Application.EnableEvents = True
End Sub

On Error GoTo 마무리를 빼지 마십시오. 중간에 오류가 나면 EnableEvents가 False로 남고, 그 뒤부터는 이벤트 코드가 아무 반응도 하지 않습니다. 코드는 멀쩡한데 안 먹는다며 몇 시간을 보내게 되는 자리가 여기입니다. 이미 그 상태라면 VBA 창에서 Application.EnableEvents = True를 한 번 실행하거나 엑셀을 껐다 켜면 풀립니다.

여기서 갈리는 지점이 하나 더 있습니다. 확인란이 두 종류입니다. 마이크로소프트 365의 삽입 - 확인란은 셀 안에 들어가고 셀 값이 TRUE/FALSE라 위 코드가 동작합니다. 반면 개발 도구의 양식 컨트롤 체크박스는 셀 위에 떠 있는 도형이라 클릭해도 Worksheet_Change가 발생하지 않습니다. 이 경우 컨트롤 서식 - 셀 연결을 B3으로 잡고 반복 계산 방식을 쓰시거나, 체크박스에 매크로를 따로 지정해야 합니다. 양식 컨트롤은 행을 정렬·필터하면 도형만 제자리에 남는 문제도 있어, 365를 쓰신다면 셀 안 확인란을 권합니다.

또 하나, VBA로 넣은 값은 실행 취소가 되지 않습니다. Ctrl+Z를 눌러도 되돌아가지 않으니, 여러 행을 한꺼번에 체크 해제하기 전에 파일을 복사해 두시는 편이 안전합니다.

체크한 행에 색 넣기

C3:E3 선택 - 홈 - 조건부 서식 - 새 규칙 - 수식을 사용하여 서식을 지정할 셀 결정.

=$B3=TRUE

B 앞에만 $를 붙이는 것이 핵심입니다. 열은 고정하고 행은 풀어야 아래로 복사했을 때 각 행이 자기 행의 B열을 봅니다.

함정 셋입니다. 규칙을 만들 때 선택 영역의 활성 셀(혼자 흰 셀)이 C3이 아니면 참조가 그만큼 밀려 엉뚱한 행이 칠해집니다. 만든 뒤 조건부 서식 - 규칙 관리에서 적용 대상이 =$C$3:$E$3인지 확인하십시오. 반대 조건을 =$B3=FALSE로 만들면 아직 손대지 않은 빈 셀까지 FALSE로 잡혀 표 전체가 칠해집니다. 빈 칸을 빼려면 이렇게 쓰십시오.

=AND($B3<>"", $B3=FALSE)

마지막으로, 행을 복사해 붙여넣기를 반복하면 하나였던 규칙이 수십 개로 쪼개져 파일이 무거워지고 일부 행만 색이 안 들어옵니다. 규칙 관리 창에 같은 규칙이 여러 줄 보이면 전부 삭제하고 전체 범위에 한 번만 다시 만드십시오.


정리하면, 날짜를 기억시키려면 수식이 자기 값을 지키게 하거나(반복 계산) 값을 아예 써 넣어야 합니다(VBA). 쓰시는 엑셀 버전과 확인란 종류를 먼저 확인하시면 어느 쪽으로 갈지가 바로 정해집니다.

지금 그 파일, 어디가 문제인지 먼저 보시겠습니까

CSV 를 넣으면 계산이 틀어지는 자리를 찾아 드립니다. 무료이고 파일은 서버로 올라가지 않습니다 — 브라우저 안에서만 처리되고 저희도 내용을 볼 수 없습니다.

정산 파일 진단기 열기  ·  무료 자료실

매달 같은 순서로 고치고 계신다면 그 순서를 프로그램으로 옮겨둔 것이 있습니다 — 쇼핑몰 월 정산 자동화. 되는지부터 보시려면 무료 진단.

CHEONOK SYSTEM · 업무 자동화 제작
안 되는 파일이면 안 된다고 말씀드립니다 · 문의 actorlee007@gmail.com
매출이나 수익을 보장하지 않습니다.