• 최초 작성일: 2001-03-25
  • 최종 수정일: 2026-09-30
  • 조회수: 8 회
  • 작성자: 권현욱 (엑셀러)
  • 강의 제목: 시계 만들기

들어가기 전에

오래 전 엑셀 파일로 진행하던 강의를 웹 글로 복원한 것이라, "버튼을 눌러보세요"처럼 엑셀에서 직접 조작하라는 표현이 남아 있을 수 있습니다. 결과는 본문의 그림이나 표로 확인하실 수 있으며, 현재와 맞지 않는 내용은 보완하되 전반적인 스타일은 당시의 갬성(?)을 유지했습니다.

드디어 VBA 강좌도 오늘로 100회를 맞이하게 되었습니다. 우리의 삶은 매일매일이 이벤트입니다. 어느 하루, 어느 한 순간, 소중하지 않은 적이 없겠지만 오늘같은 날은 그래도 뭔가 조금은 더 특별한 감흥에 젖게 됩니다.

VBA 강좌가 100회를 맞이하면 보통 때와는 뭔가 다른 사건(이벤트)를 하나쯤은 마련해야지 잔뜩 벼뤘었는데 여러 가지 이유와 핑계로 인해 자신과 한 그 약속은 지키지 못할 듯 합니다.

대신 얼마 전에 읽은 아주 감동적인(전적으로 개인적인 견해임!) 글 한 편을 소개하는 것으로 대신하고자 합니다. 아래의 글은 한근태 님의 글로서 다른 분의 사이트에 놀러 갔다가 얻은 것입니다.

한근태 님의 「산다는 것」은 대략 다음과 같은 내용입니다(원문은 길어서 요약해 옮깁니다).

사람은 누구나 저마다의 고민과 문제를 안고 살아갑니다. 대학에 들어가면, 취업하면, 결혼하면 모든 것이 해결될 것 같지만 그때마다 새로운 문제가 기다리고 있습니다. 그래서 아무 근심 없는 곳으로 떠나고 싶어 하지만 그런 곳은 세상 어디에도 없습니다. 자연이 폭우와 태풍으로 스스로를 정화하듯, 우리에게 닥치는 어려움도 재앙이 아니라 우리를 깨우치고 정화하는 과정일 수 있습니다. 세상에서 벌어지는 일은 어쩔 수 없지만 그것을 어떻게 해석하고 어떻게 반응할지는 우리의 자유라는 이야기입니다.

사람은 저마다 자신만의 고민거리를 안고 사는 듯 합니다. 우리의 인생은 흡사 영화관에서 자리를 차지하는 것과 비슷하다는 생각을 해 봅니다. 이 자리에 앉으면 저 자리가 더 좋아 보이고, 저 자리에 가서 보면 다시 또 다른 자리가 더 편안해 보이지만 실제로는 별 차이가 없으며 더 중요한 것은 한 사람이 하나의 자리밖에 차지할 수 없다는 사실…

어느 대기업 총수의 운명과 여러 가지 다른 것을 짚어보다가 Exceller도 이와 같은 도사 비스무리한 생각을 해 보았습니다. ^^;

권현욱(엑셀러)
저자: 권현욱(엑셀러), 아이엑셀러 대표

필자는 Excel 컨설턴트, 작가, 그리고 크리에이터입니다. 현재 Microsoft Excel MVP이며, 『챗GPT+엑셀 업무자동화 정석』을 비롯한 10여 권의 도서를 집필했습니다. Excel 자동화 및 생산성 향상 분야에서 25년 넘는 경력을 보유하고 있습니다.

권현욱(엑셀러) 님의 최신 포스트:
  • 최신 글을 불러오는 중...


26년 경력 Microsoft MVP 권현욱(엑셀러) 대표 직강 1강 무료

🎁 파워툴스 마스터클래스 · 엑셀 바이브 코딩

AI에게 말로 지시해서 '나만의 엑셀 도구'를 만들고 리본에 장착합니다.

  • 코딩 지식 없이 시작 · 코드는 AI가 작성
  • 엑셀 리본에 내 탭과 버튼을 만들고 XLAM으로 공유
  • 1강 무료 수강 가능
수강 신청하기 강의 소개 보기

시계 만들기

핵심 요약: OnTime 시계

OnTime으로 1초 뒤 자기 자신을 다시 호출하도록 예약하면 시계가 만들어지고, 예약 취소로 멈출 수 있습니다.

  • 1단계: datTime에 Now + TimeSerial(0, 0, 1)을 지정합니다.
  • 2단계: 지정한 셀에 시각을 쓰고 OnTime으로 자기 자신을 다시 예약합니다.
  • 3단계: OnTime의 마지막 인수에 False를 지정해 예약을 취소합니다.

Step 1: 워크시트에 시계 만들기

그래도 명색이 100회 강좌인데 그냥 넘어가기는 뭐하고 해서 워크시트 상에 시계를 하나 만들어 보도록 하겠습니다. 오래 전 강좌에서 소개해 드린 재귀적 호출구조를 사용한 것으로 논리 자체는 아주 간단합니다.

일정한 시간마다 특정한 작업을 반복해서 실행하고자 할 때 OnTime Method를 사용합니다. Start 버튼을 누르세요(시계를 멈추시려면 Stop 버튼을…).

매초마다 값이 갱신되는, 즉 시계가 워크시트 상에 만들어 졌지요? 코드는 엄청 간단합니다. 겨우 넉 줄입니다. ^^

Dim datTime As Date
'//다른 프로시저에서도 사용하기 위해 외부 변수로 선언하였습니다.

Sub MakeTimer()
    datTime = Now + TimeSerial(0, 0, 1)
    '//1초마다 시계를 Update 하기 위해 Now + TimeSerial(0,0,1)을 해 줍니다.

    Beep
    Range("start") = Format(Now, "hh:mm:ss AM/PM")
    Application.OnTime datTime, "MakeTimer"
    '//Application.OnTime datTime에서 datTime 변수에는 현재 시간 +1초라는 시간값이
    '//들어 있으니까 매초마다 MakeTimer, 즉 자기자신을 호출하게 됩니다.
    '//바로 재귀적 호출이지요.
    '//여기서 Beep는 Beep, 즉 삑삑 거리는 소리가 나도록 하는 명령입니다.

End Sub
Sub StopTimer()
'//위의 MakeTimer 프로시저는 재귀적 호출구조를 가진 것으로 외부에서 다른 특별한
'//명령을 주지 않는 이상 무한 루핑을 합니다. 따라서 프로시저를 종료하기 위한 장치를
'//마련해 두는 것입니다. Ctrl + Pause 키를 눌러도 종료됩니다.

    On Error Resume Next
    Application.OnTime datTime, "MakeTimer", , False
End Sub

OnTime으로 예약한 작업은 통합 문서를 닫아도 남아 있어 엑셀이 다시 실행되며 파일이 열릴 수 있습니다. 시계를 사용한 뒤에는 반드시 Stop 버튼(StopTimer)을 눌러 예약을 취소하시고, 통합 문서를 닫을 때 자동으로 취소되도록 Workbook_BeforeClose 이벤트에 StopTimer를 호출해 두시면 안전합니다. 또 Beep는 매초 소리가 나므로 불필요하면 삭제하시기 바랍니다.

Step 2: 또 하나의 예제 - 차트 움직이기

이것으로 오늘 강좌 끝… 하려니까 뭔가 아쉽지요? 또다른 예제 하나를 보도록 합니다. 버튼을 누르세요.

아주 형이상학적(?)인 히안한 모양들이 마구마구 생겨나지요? 이와 같은 것을 Hypocycloid Curve라고 한다는군요. Stage 시트에 입력되어 있는 복잡한 수학공식은 Exceller도 잘 모르는 내용이니까 싸인과 코싸인 값을 가지고 어떻게 이러한 모양이 나오는 지에 대해서는 질문하지 마시기 바랍니다. ^^ 중요한 것은 그것이 아니니까요.

Sub MakeChart()
    datTime = Now + TimeSerial(0, 0, 1)

    ActiveSheet.Calculate
    Application.OnTime datTime, "MakeChart"
End Sub

Sub StopMakeChart()
    On Error Resume Next
    Application.OnTime datTime, "MakeChart", , False
End Sub

위 코드에 대한 설명은 생략합니다. 시계 만드는 과정과 거의 같으니까요. 많이들 응용해 보시기 바랍니다.

마무리

다음 시간에…

정리 — OnTime 시계 핵심

구분 사용한 코드 역할
다음 실행 시각 datTime = Now + TimeSerial(0, 0, 1) 1초 뒤 시각
시각 표시 Range("start") = Format(Now, "hh:mm:ss AM/PM") 현재 시각 기록
재귀 호출 Application.OnTime datTime, "MakeTimer" 자기 자신 예약
예약 취소 Application.OnTime datTime, "MakeTimer", , False 시계 정지
차트 갱신 ActiveSheet.Calculate 수식 재계산

자주 묻는 질문 (FAQ)

Q1. 워크시트에 시계를 만들려면 어떻게 하나요?

Application.OnTime으로 1초 뒤 자기 자신을 다시 실행하도록 예약하는 재귀적 호출 구조를 만들면 됩니다.

Q2. 시계를 멈추려면?

OnTime 메서드의 마지막 인수 Schedule에 False를 지정해 예약된 시각의 프로시저를 취소합니다.

Q3. 차트를 움직이게 할 수도 있나요?

RAND 함수가 들어 있는 시트를 OnTime으로 1초마다 Calculate하면 차트 모양이 계속 바뀝니다.

마치며

OnTime의 재귀적 호출 구조를 이해하면 시계는 물론 일정 시간마다 반복되는 작업을 쉽게 만들 수 있습니다.