• 최초 작성일: 2002-06-08
  • 최종 수정일: 2026-09-30
  • 조회수: 11 회
  • 작성자: 권현욱 (엑셀러)
  • 강의 제목: 숫자를 시간으로 바꾸기

들어가기 전에

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

이번 시간에는 숫자로 입력된 시간 데이터를 시간 형태로 바꾸는 방법을 살펴봅니다.

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

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

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


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

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

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

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

숫자를 시간으로 바꾸기

핵심 요약: 숫자를 시간으로 변환하기

뒤 두 자리를 분, 나머지를 시간으로 나누어 TimeSerial 함수에 넣으면 자릿수가 다른 숫자도 시간으로 바꿀 수 있습니다.

  • 1단계: 값이 숫자이고 3~4자리인지 확인합니다.
  • 2단계: 뒤 두 자리는 분, 그 앞은 시간으로 나누어 범위를 검사합니다.
  • 3단계: TimeSerial로 변환하고 hh:mm 서식을 지정합니다.

Step 1: 어떤 질문이었을까요?

셀에 숫자가 들어 있는데 실제로는 시간입니다. 예를 들어 0930이라는 숫자를 09:30으로 바꾸어야 합니다. 그런데 숫자가 모두 자릿수가 같다면 Time 함수를 쓰면 되지만, 130처럼 세 자리로 된 값도 있어서 곤란하다는 질문이었습니다.

Step 2: 자릿수가 같다면 TIME 함수로 간단히

데이터의 자릿수가 모두 네 자리로 같다면 워크시트의 TIME 함수로 간단히 해결됩니다.

입력값=TIME(LEFT(B23,2),RIGHT(B23,2),0)
10300.4375 (10:30)
12300.520833... (12:30)

그러나 세 자리와 네 자리가 섞여 있고, 문자열 데이터나 시간으로 바꿀 수 없는 데이터까지 섞여 있다면 어떻게 해야 할까요? 예제의 표에서 버튼을 누르면 변환 가능한 값은 시간 형태로, 그렇지 않은 값은 오류 메시지로 옆 셀에 표시됩니다.

입력값변환 결과
74007:40
84508:45
113011:30
83잘못된 데이터입니다!
abcd잘못된 데이터입니다!
9910잘못된 데이터입니다!
10000잘못된 데이터입니다!

Step 3: 코드 살펴보기

잘 되지요? 코드를 볼까요?

Sub ChangeNumToTime()

    Dim i As Long
    Dim rngStart As Range
    Dim strVal As String
    Dim lngHour As Long
    Dim lngMin As Long
    Set rngStart = [Start]
    rngStart.CurrentRegion.Columns(2).ClearContents

    Do
    ' Do ~ Loop 문으로 순환을 합니다. 언제까지 순환을 하느냐 하면 rngStart 셀에서
    ' 아래로 내려 가다가 공백 셀이 나타날 때까지 합니다.

        With rngStart
        ' 셀 값을 순차적으로 접근하면서 조건 검색을 합니다.
            strVal = Trim(.Offset(i, 0).Value)

            If Not IsNumeric(strVal) Or Len(strVal) > 4 Or Len(strVal) < 3 Then
            ' 만약 셀 값이 숫자 형태가 아니거나 데이터 자리수가 4보다 크거나 3자리 보다 작으면
            ' 에러 메시지를 옆 셀에 표시합니다.
                .Offset(i, 1) = "잘못된 데이터입니다!"
            Else
                ' 뒤의 두 자리는 분, 그 앞의 한두 자리는 시간으로 처리합니다. 이 때 TimeSerial 이라는
                ' VBA 함수를 사용하였습니다. 시간이 23 이하, 분이 59 이하인 경우에만 변환합니다.
                lngMin = CLng(Right(strVal, 2))
                lngHour = CLng(Left(strVal, Len(strVal) - 2))
                If lngHour > 23 Or lngMin > 59 Then
                    .Offset(i, 1) = "잘못된 데이터입니다!"
                Else
                    .Offset(i, 1) = TimeSerial(lngHour, lngMin, 0)
                    .Offset(i, 1).NumberFormatLocal = "hh:mm"
                    ' 데이터 변환 작업이 끝났으면 셀 서식을 바꾸어 줍니다.
                End If
            End If
        End With
        i = i + 1
    Loop Until IsEmpty(rngStart.Offset(i, 0))

End Sub

세 자리 값은 앞 한 자리를 시간으로, 네 자리 값은 앞 두 자리를 시간으로 처리하고 뒤의 두 자리는 언제나 분으로 처리합니다. 숫자가 아니거나 자릿수가 맞지 않거나 시간·분의 범위를 벗어나는 값은 '잘못된 데이터입니다!'로 표시합니다.

다음 시간에 또…

정리 — 숫자를 시간으로 변환하는 핵심 코드

구분 사용한 코드 역할
숫자 검사 IsNumeric(strVal) 숫자 형태 확인
분 추출 Right(strVal, 2) 뒤 두 자리
시간 추출 Left(strVal, Len(strVal) - 2) 앞 한두 자리
변환 TimeSerial(시, 분, 0) 시간 값 만들기
서식 NumberFormatLocal = "hh:mm" 시:분 표시

자주 묻는 질문 (FAQ)

Q1. TIME 함수만으로는 왜 부족한가요?

TIME(LEFT(),RIGHT())는 값이 모두 네 자리일 때만 정확합니다. 세 자리 값은 앞 한 자리를 시간으로 처리해야 하므로 자릿수에 따라 나누어 처리해야 합니다.

Q2. TimeSerial 함수는 무엇인가요?

시, 분, 초를 인수로 받아 시간 값을 만들어 주는 VBA 함수입니다.

Q3. 잘못된 값은 어떻게 걸러 내나요?

숫자 여부, 자릿수, 시간(23 이하)과 분(59 이하)의 범위를 검사해 벗어나면 오류 문구를 옆 셀에 표시합니다.

마치며

데이터를 변환할 때는 정상적인 경우뿐 아니라 잘못된 값이 들어왔을 때의 처리까지 함께 고려해 두는 것이 좋습니다.