본문 바로가기
VBA 라이브러리

날짜 및 시간 관련 함수

2023. 8. 25.

현재 날짜 및 시간 관련 함수

Calendar property

프로젝트에 사용할 달력 형식을 지정하는 값을 반환하거나 설정합니다.

아래 두 Calendar 설정 중 하나를 사용할 수 있습니다.

참고

Calendar 속성은 프로그래밍 방식으로만 설정할 수 있습니다. 예를 들어 회교식 달력을 사용하려면 다음을 사용합니다.

Calendar = vbCalHijri

Date 함수

현재 시스템 날짜를 포함한 Variant(Date) 값을 반환합니다.

Syntax
Date

설명
시스템 날짜를 설정하려면 Date 문을 사용합니다.

Date 함수(Calendar 속성 설정이 Gregorian(그레고리력)인 경우는 Date$ 함수도 포함) 동작은 Calendar 속성 설정에 영향을 받지 않습니다. Calendar 속성 설정이 Hijri(회교력)일 때 Date$는 mm-dd-yyyy 형식의 10문자로 된 문자열을 반환하며 이때 mm (01-12), dd (01-30) 및 yyyy (1400-1523)는 각각 Hijri(회교력)의 월, 날짜, 및 연도입니다. 동일한 Gregorian(그레고리오력) 범위는 1980년 1월 1일부터 2099년 12월 31일까지입니다.

현재 날짜 출력하기

Sub ShowCurrentDate()
    Dim currentDate
    currentDate = Date
    
    Debug.Print "현재 날짜 데이터 타입: " & TypeName(currentDate)
    Debug.Print "오늘의 날짜는 " & Date & " 입니다."
End Sub

' Output
' 현재 날짜 데이터 타입: Date
' 오늘의 날짜는 8/25/2023 입니다.

Sub DateExample()
    Dim currentDate

    ' Date$ 함수를 사용하여 현재 날짜를 문자열로 가져오기
    currentDate = Date$

    Debug.Print "현재 날짜 데이터 타입: "; TypeName(currentDate)
    Debug.Print "현재 날짜: " & currentDate
End Sub

' Output
' 현재 날짜 데이터 타입: String
' 현재 날짜: 08-25-2023

Sub DateAndFormatExample()
    Dim currentDate As Date
    Dim formattedDate As String

    ' 현재 날짜 가져오기
    currentDate = Date

    ' 날짜를 "YYYY년 MM월 DD일" 형식으로 변환
    formattedDate = Format(currentDate, "YYYY년 MM월 DD일")

    Debug.Print "형식 변환된 날짜: " & formattedDate
End Sub

' Output
' 형식 변환된 날짜: 2023년 08월 25일

Now function

컴퓨터의 시스템 날짜와 시간에 따른 현재 날짜와 시간을 지정하는 Variant(Date) 값을 반환합니다.

Syntax
Now

현재 날짜와 시간 출력하기

Sub NowExample()
    Dim currentDateTime As Date
    
    ' Now 함수를 사용하여 현재 날짜와 시간 가져오기
    currentDateTime = Now
    
    Debug.Print "현재 날짜와 시간: " & currentDateTime
End Sub

' Output
' 현재 날짜와 시간: 8/25/2023 10:13:04 AM

Sub FormatAndNowExample()
    Dim currentDateTime As Date
    Dim formattedDateTime As String
    
    ' 현재 날짜와 시간 가져오기
    currentDateTime = Now
    
    ' 날짜와 시간을 "YYYY-MM-DD HH:MM:SS" 형식으로 변환
    formattedDateTime = Format(currentDateTime, "YYYY-MM-DD HH:MM:SS")
    
    Debug.Print "형식 변환된 날짜와 시간: " & formattedDateTime
End Sub

' Output
' 형식 변환된 날짜와 시간: 2023-08-25 10:24:51

Time function

현재 시스템 시간을 나타내는 Variant(Date) 값을 반환합니다.

Syntax

Time

현재 시간 출력하기

Sub TimeExample()
    Dim currentTime
    
    ' 현재 시간 가져오기
    currentTime = Time
    Debug.Print "현재 시간의 데이터 타입: " & TypeName(currentTime)
    Debug.Print "현재 시간: " & currentTime
End Sub

' Output
' 현재 시간의 데이터 타입: Date
' 현재 시간: 10:28:24 AM

Sub TimeExample()
    Dim currentTime
    
    ' Time$ 함수를 사용하여 현재 시간을 문자열로 가져오기
    currentTime = Time$
    Debug.Print "현재 시간의 데이터 타입: " & TypeName(currentTime)
    Debug.Print "현재 시간: " & currentTime
End Sub

' Output
' 현재 시간의 데이터 타입: String
' 현재 시간: 10:31:53

Sub FormatAndTimeExample()
    Dim currentTime As Date
    Dim formattedTime As String
    
    ' 현재 시간 가져오기
    currentTime = Time
    
    ' 시간을 "HH:MM AM/PM" 형식으로 변환
    formattedTime = Format(currentTime, "HH:MM AM/PM")
    
    ' 메시지 박스를 통해 형식 변환된 시간 출력
    Debug.Print "형식 변환된 시간: " & formattedTime
End Sub

' Output
' 형식 변환된 시간: 10:29 AM

Timer 함수

자정부터 경과한 시간(초)을 나타내는 Single 값을 반환합니다.

Syntax
Timer

Windows에서 Timer 함수는 초를 분수식으로 반환합니다.매킨토시에서 타이머 기록은 일 초입니다.

아래 예제에서는 Timer 함수를 사용하여 응용 프로그램을 잠시 멈추게 합니다. 또한 DoEvents를 사용하여 잠시 멈추는 동안 다른 프로세스를 제공합니다.

Sub PauseForSeconds()
    Dim PauseTime As Long, Start As Double, Finish As Double, TotalTime As Double
    Dim userResponse As VbMsgBoxResult
    
    userResponse = MsgBox("예를 눌러서 5초 동안 중지합니다", vbYesNo)
    
    If userResponse = vbYes Then
        PauseTime = 5    ' 대기 시간을 지정합니다.
        Start = Timer    ' 시작 시간을 기록합니다.
        
        Do While Timer < Start + PauseTime
            DoEvents    ' 다른 프로시저로 넘깁니다.
        Loop
        
        Finish = Timer    ' 종료 시간을 기록합니다.
        TotalTime = Finish - Start    ' 총 시간을 계산합니다.
        
        MsgBox TotalTime & " 초 동안 중지되었습니다", vbInformation
    Else
        End
    End If
End Sub

날짜 및 시간 요소 추출 함수

Year 함수

연도를 나타내는 정수를 포함한 Variant(Integer) 값을 반환합니다.

Syntax
Year(date)

필수 요소인 date 인수는 날짜를 나타내는 Variant, 수식, 문자식 또는 조합형입니다. 만약 date에 Null이 포함되어 있으면 Null을 반환합니다.

메모

Calendar 속성 설정이 Gregorian(그레고리력)인 경우 반환되는 정수는 date 인수의 Gregorian(그레고리력) 연도를 나타냅니다. Calendar 속성 설정이 Hijri(회교력)인 경우 반환되는 정수는 date 인수의 Hijri(회교력) 연도를 나타냅니다. Hijri(회교력) 날짜에서 인수는 1/1/100(그레고리오력 718년 8월 2일)부터 4/3/9666(그레고리오력 9999년 12월 31일)까지 날짜나 시간을 나타내는 모든 수식이 될 수 있습니다.

Calendar 속성을 지정하지 않으면 그레고리력을 기본값으로 사용합니다.

Sub YearExample()
    Dim myDate As Date
    Dim myYear As Integer
    
    'Calendar속성을 그레고리력으로 설정합니다.
    Calendar = vbCalGreg
    ' 날짜 값을 설정합니다.
    myDate = #8/25/2023#
    
    ' 날짜에서 연도를 추출합니다.
    myYear = Year(myDate)
    
    ' 결과를 출력합니다.
    Debug.Print "Year: " & myYear
End Sub

' Output
' Year: 2023

Calendar 속성을 회계력으로 설정한 예제입니다.

Sub YearExample()
    Dim myDate As Date
    Dim myYear As Integer
    
    'Calendar속성을 회계력으로 설정합니다.
    Calendar = vbCalHijri
    ' 날짜 값을 설정합니다.
    myDate = #8/25/2023#
    
    ' 날짜에서 연도를 추출합니다.
    myYear = Year(myDate)
    
    ' 결과를 출력합니다.
    Debug.Print "Year: " & myYear
End Sub

' Output
' Year: 1445

Month 함수

연도를 기준으로 해서 월을 나타내는 1부터 12까지의 정수를 지정하는 Variant(Integer) 값을 반환합니다.

Syntax
Month(date)

필수 요소인 date 인수는 날짜를 표현하는 Variant, 수식, 문자식 또는 조합형을 사용합니다. date가 Null을 포함하면 Null을 반환합니다.

메모 Calendar 속성 설정이 Gregorian(그레고리오력)인 경우 반환되는 정수는 date 인수의 Gregorian(그레고리오력) 요일을 나타냅니다. Calendar 속성 설정이 Hijri(회교력)인 경우 반환되는 정수는 date 인수의 Hijri(회교력) 요일을 나타냅니다. Hijri(회교력) 날짜에서 인수는 1/1/100(그레고리오력 718년 8월 2일)부터 4/3/9666(그레고리오력 9999년 12월 31일)까지 날짜나 시간을 나타내는 모든 수식이 될 수 있습니다.

Calendar 속성을 지정하지 않으면 그레고리력을 기본값으로 사용합니다.

Sub MonthExample()
    Dim myDate As Date
    Dim myMonth As Integer
    
    'Calendar 속성을 그레고리력으로 설정합니다.
    Calendar = vbCalGreg
    
    ' 날짜 값을 설정합니다.
    myDate = #8/25/2023#
    
    ' 날짜에서 월을 추출합니다.
    myMonth = Month(myDate)
    
    ' 결과를 출력합니다.
    Debug.Print "Month: " & myMonth
End Sub

' Output
' Month: 8

Calendar 속성을 회계력으로 설정한 예제입니다.

Sub MonthExample()
    Dim myDate As Date
    Dim myMonth As Integer
    
    'Calendar 속성을 회계력으로 설정합니다.
    Calendar = vbCalHijri
    
    ' 날짜 값을 설정합니다.
    myDate = #8/25/2023#
    
    ' 날짜에서 월을 추출합니다.
    myMonth = Month(myDate)
    
    ' 결과를 출력합니다.
    Debug.Print "Month: " & myMonth
End Sub

' Output
' Month: 2

Day 함수

해당 월의 날짜를 나타내는 1에서 31까지의 정수를 지정하는 Variant(Integer) 값을 반환합니다.

Syntax
Day(date)

필수 요소인 date 인수는 날짜를 표현하는 Variant, 수식, 문자식 및 기타 형식 등을 사용합니다. date에 Null이 있으면 Null을 반환합니다.

메모

Calendar 속성 설정이 Gregorian(그레고리력)인 경우 반환되는 정수는 date 인수에 대해 해당 월의 Gregorian(그레고리력) 날짜를 나타냅니다. Calendar 속성 설정이 Hijri(회교력)인 경우 반환되는 정수는 date 인수에 대해 해당 월의 Hijri(회교력) 날짜를 나타냅니다.

Calendar 속성을 지정하지 않으면 그레고리력을 기본값으로 사용합니다.

Sub TestDayFunction()
    Dim myDate As Date
    Dim dayValue As Integer
       
    Calendar = vbCalGreg
    myDate = #8/25/2023# ' 2023년 8월 25일
    
    ' Day 함수를 사용하여 날짜의 일 부분을 추출합니다.
    dayValue = Day(myDate)
    
    ' 결과를 출력합니다.
    Debug.Print "날짜 " & myDate & "의 일(day) 부분: " & dayValue
End Sub

' Output
' 날짜 8/25/2023의 일(day) 부분: 25

Calendar 속성을 회교력으로 변경한 코드입니다.

Sub TestDayFunction()
    Dim myDate As Date
    Dim dayValue As Integer

    Calendar = vbCalHijri '회교력으로 변경
    myDate = #8/25/2023#    ' 2023년 8월 25일

    ' Day 함수를 사용하여 날짜의 일 부분을 추출합니다.
    dayValue = Day(myDate)

    ' 결과를 출력합니다.
    Debug.Print "날짜 " & myDate & "의 일(day) 부분: " & dayValue
End Sub

' Output
' 날짜 2/9/1445의 일(day) 부분: 9

Weekday 함수

요일을 나타내는 정수를 포함한 Variant(Integer) 값을 반환합니다.

Syntax

Weekday(date, [ firstdayofweek ])

date : 필수적인 요소. 날짜를 나타내는 Variant, 수식, 문자식 또는 그 조합형입니다. 만약 date에 Null이 포함되어 있으면 Null을 반환합니다.

firstdayofweek : 선택적인 요소. 첫 번째 요일을 지정하는 상수입니다. 지정하지 않으면 vbSunday로 간주됩니다.

반환값
Weekday 함수는 아래와 같은 값을 반환합니다.

참고

Calendar 속성 설정이 Gregorian(그레고리오력)인 경우 반환되는 정수는 date 인수의 Gregorian(그레고리오력) 요일을 나타냅니다. Calendar 속성 설정이 Hijri(회교력)인 경우 반환되는 정수는 date 인수의 Hijri(회교력) 요일을 나타냅니다. Hijri(회교력) 날짜에서 인수는 1/1/100(그레고리오력 718년 8월 2일)부터 4/3/9666(그레고리오력 9999년 12월 31일)까지 날짜나 시간을 나타내는 모든 수식이 될 수 있습니다.

현재 날짜의 요일 구하기

Sub Example1()
    Dim currentDay As Integer
    currentDay = Weekday(Date)
    Debug.Print "오늘의 요일 번호는 " & currentDay & " 입니다."
End Sub

' Output
' 오늘의 요일 번호는 6 입니다.

특정 날짜의 요일 구하기

Sub Example2()
    Dim specificDate As Date
    specificDate = #8/15/2023#
    
    Dim dayOfWeek As Integer
    dayOfWeek = Weekday(specificDate)
    
    Debug.Print "2023년 광복절의 요일 번호는 " & dayOfWeek & " 입니다."
End Sub

' Output
' 2023년 광복절의 요일 번호는 3 입니다.

요일 출력하기

Sub Example3()
   Dim myDate As Date, myDay As String
   
   myDate = Date '오늘 날짜 가져오기
   
   Select Case Weekday(myDate)
      Case 1:
         myDay = "일요일"
      Case 2:
         myDay = "월요일"
      Case 3:
         myDay = "화요일"
      Case 4:
         myDay = "수요일"
      Case 5:
         myDay = "목요일"
      Case 6:
         myDay = "금요일"
      Case Else:
         myDay = "토요일"
   End Select
   
   Debug.Print ("오늘은 ") & myDay & "입니다."

End Sub

' Output
' 오늘은 금요일입니다.

Hour 함수

시간을 나타내는 0에서 23 사이의 정수를 지정하는 Variant(Integer) 값을 반환합니다.

Syntax
Hour(time)

필수 요소인 time 인수는 시간을 표현하는 Variant, 수식, 문자식 또는 조합형을 사용합니다. time이 Null을 포함하면 Null을 반환합니다.

현재 시간의 '시' 부분만 추출하기

Sub UseHourFunction()

    Dim dt As Date
    Dim hr As Integer
    
    dt = Now '현재 시간 및 날짜 설정
    hr = Hour(dt) '현재 시간의 '시' 부분 추출
    
    Debug.Print "현재 시각은: " & hr & "시 입니다."

End Sub

' Output
' 현재 시각은: 10시 입니다.

시간 값이 특정 시간 범위에 속하는지 확인

Sub CheckTimeRange()

    Dim dt As Date
    Dim hr As Integer
    
    dt = Now '현재 시간 및 날짜 설정
    hr = Hour(dt) '현재 시간의 '시' 부분 추출
    
    If hr >= 9 And hr < 18 Then
        Debug.Print "현재는 근무시간입니다."
    Else
        Debug.Print "현재는 근무시간이 아닙니다."
    End If

End Sub

' Output
' 현재는 근무시간입니다.(9시 ~18시사이)
' 현재는 근무시간이 아닙니다.(9시~18시 사이가 아닌 경우)

시간 값에 따라 다른 작업을 수행

Sub PerformTaskBasedOnTime()

    Dim dt As Date
    Dim hr As Integer
    
    dt = Now '현재 시간 및 날짜 설정
    hr = Hour(dt) '현재 시간의 '시' 부분 추출
    
    Select Case hr
        Case 6 To 11
            Debug.Print "아침 작업을 수행합니다."
        Case 12 To 17
            Debug.Print "오후 작업을 수행합니다."
        Case Else
            Debug.Print "저녁 또는 새벽 작업을 수행합니다."
     End Select

End Sub

' Output
' 아침 작업을 수행합니다.(6시~11시)
' 오후 작업을 수행합니다.(12~17시)
' 저녁 또는 새벽 작업을 수행합니다.(6시~17시가 아닌 경우)

Minute 함수

시간의 분을 나타내는 0에서 59까지의 정수를 지정하는 Variant(Integer) 값을 반환합니다.

Syntax
Minute(time)

필수 요소인 time 인수는 시간을 표현하는 Variant, 수식, 문자식 또는 조합형을 사용합니다. time이 Null을 포함하면 Null을 반환합니다.

현재 시간에서 '분' 만 추출

Sub PrintCurrentMinute()

    Dim dt As Date
    Dim min As Integer
    
    dt = Now '현재 시간 및 날짜 설정
    min = Minute(dt) '현재 시간의 '분' 부분 추출
    
    Debug.Print "현재 분은: " & min & "분 입니다."

End Sub

' Output
' 현재 분은: 16분 입니다.

분 값에 따라 다른 작업을 수행

Sub PerformTaskBasedOnMinute()

    Dim dt As Date
    Dim min As Integer
    
    dt = Now '현재 시간 및 날짜 설정
    min = Minute(dt) '현재 시간의 '분' 부분 추출
    
    Select Case min
        Case 0 To 15
            Debug.Print "첫 번째 15분 구간입니다."
        Case 16 To 30
            Debug.Print "두 번째 15분 구간입니다."
        Case 31 To 45
            Debug.Print "세 번째 15분 구간입니다."
        Case Else
            Debug.Print "마지막 15분 구간입니다."
     End Select

End Sub

' Output
' 첫 번째 15분 구간입니다.(0~15)
' 두 번째 15분 구간입니다.(16~30)
' 세 번째 15분 구간입니다.(31~45)
' 마지막 15분 구간입니다.(0~45가 아닌 경우)

특정 기준(예: 매일 오전 8시 정각)으로부터 경과된 분 계산

Sub CalculateElapsedMinutes()

   Dim nowTime As Date
   Dim startTime As Date
   Dim elapsedMinutes As Double
   
   nowTime = Now() ' 현재 날짜와 시각 가져오기
   
   startTime = Date + TimeSerial(8, 0, 0) ' 오늘의 기준 시작시각 설정 (오전 8시)
   
   If nowTime < startTime Then
       Debug.Print "아직 기준시각인 오전 8시가 되지 않았습니다."
       Exit Sub
   End If
   
   elapsedMinutes = (nowTime - startTime) * 24 * 60
   
   Debug.Print "오전 8시로부터 지금까지 경과한 분은 약" & Round(elapsedMinutes, 2) & "분 입니다."

End Sub

' Output
' 오전 8시로부터 지금까지 경과한 분은 약154.9분 입니다.

Second 함수

분의 초를 나타내는 0에서 59 사이의 정수를 지정하는 Variant(Integer) 값을 반환합니다.

Syntax
Second(time)

필수 요소인 time 인수는 시간을 표현하는 Variant, 수식, 문자식 또는 조합형을 사용합니다. time이 Null을 포함하면 Null을 반환합니다.

Sub PrintCurrentSecond()

    Dim dt As Date
    Dim sec As Integer
    
    dt = Now '현재 시간 및 날짜 설정
    sec = Second(dt) '현재 시간의 '초' 부분 추출
    
    Debug.Print "현재 초는: " & sec & "초 입니다."

End Sub

' Output
' 현재 초는: 28초 입니다.

날짜 및 시간 변환 함수

DateSerial 함수

지정된 년, 월, 일의 Variant(Date) 값을 반환합니다.

DateSerial(year, month, day)

year : 필수적인 요소. Integer. 100에서 9999 까지의 수 또는 수식

month : 필수적인 요소. Integer. 모든 수식

day : 필수적인 요소. Integer. 모든 수식

참고

예를 들어 1991년 12월 31일처럼 어떤 날짜를 지정하려면 각 DateSerial 인수의 숫자는 해당 인수의 허용 범위 안에 있어야 합니다. 즉, 일은 1 – 31이며, 월은 1 - 12입니다. 그러나 특정 날짜의 앞 뒤에 년, 월, 일 등을 나타내는 수식을 사용하여 각 인수의 상대적인 날짜를 지정할 수 있습니다.

아래는 특정 일자를 지정하지 않고 수식을 사용한 예제입니다. DateSerial 함수는 1990의 10년 전(1990-10) 8월의 2개월 전(8-2) 첫째 날에서 하루를 뺀(1-1), 즉 1980년 5월 31일을 반환합니다.

DateSerial(1990 - 10, 8 - 2, 1 - 1)

인수가 허용되는 범위를 넘으면 적절한 상위 단위로 변환하여 계산합니다. 예를 들어 35일을 지정하면 적용 연도에 따라 1개월 며칠로 계산합니다. 그러나 한 인수가 -32,768 - 32,767 범위를 넘는 인수이거나 세 인수를 사용하여 지정된 날짜가 허용 범위를 넘을 경우 오류가 발생합니다.

메모

year, month, 및 day 의 경우 Calendar 속성 설정이 Gregorian(그레고리오력)이면 제공되는 값을 Gregorian(그레고리오력)으로 가정합니다. Calendar 속성 설정이 Hijri(회교력)이면 제공되는 값을 Hijri(회교력)으로 가정합니다.

반환되는 날짜 부분은 현재 Visual Basic에 설정된 달력의 시간 단위입니다. 예를 들어 현재 달력 설정이 Hijri(회교력)이고 반환될 날짜 부분이 연도이면 Hijri(회교력) 연도가 반환됩니다. Year 인수가 0-99 사이의 값이면 1400부터 1499년까지로 해석됩니다. 다른 모든 year 인수는 1520년처럼4 자릿수의 완전한 연도를 사용합니다.

특정 날짜 생성하기

Sub ExampleDateSerial1()
    Dim myDate As Date
    
    ' 연도, 월, 일 값을 사용하여 날짜 생성
    myDate = DateSerial(2023, 8, 26)
    
    Debug.Print "생성된 날짜: " & myDate
End Sub

' Output
' 생성된 날짜: 8/26/2023

현재 연도의 1월 1일

Sub GetFirstDayOfYear()
    Dim firstDayOfYear As Date
    firstDayOfYear = DateSerial(Year(Date), 1, 1)
    Debug.Print firstDayOfYear ' 출력: 현재 연도의 01-01일자
End Sub

' Output
' 1/1/2023

다음 달의 첫 번째 날짜 반환하기

Sub GetFirstDayOfNextMonth()
    Dim firstDayOfNextMonth As Date
    firstDayOfNextMonth = DateSerial(Year(Date), Month(Date) + 1, 1)
    Debug.Print firstDayOfNextMonth ' 출력: 다음 달의 첫날일자
End Sub

' Output
' 9/1/2023

현재 월의 마지막 날짜

Sub GetLastDayOfMonth()
   Dim lastDayOfMonth As Date
   lastDayOfMonth = DateSerial(Year(Date), Month(Date) + 1, 0)
   Debug.Print lastDayOfMonth ' 출력: 현재 월의 마지막날 일자
End Sub

' Output
' 8/31/2023

현재 연도와 월, 특정 일로 날짜 생성하기

Sub ExampleDateSerial2()
    Dim myDate As Date
    Dim currentYear As Integer
    Dim currentMonth As Integer
    
    ' 현재 연도와 월 값을 가져옴
    currentYear = Year(Date)
    currentMonth = Month(Date)
    
    ' 현재 연도와 월, 특정 일 값을 사용하여 날짜 생성
    myDate = DateSerial(currentYear, currentMonth, 15)
    
    Debug.Print "생성된 날짜: " & myDate
End Sub

' Output
' 생성된 날짜: 8/15/2023

TimeSerial 함수

특정 시, 분, 초에 대한 시간을 나타내는 Variant (Date) 값을 반환합니다.

Syntax
TimeSerial(hour, minute, second)

hour : 필수적인 요소. Variant(Integer). 0(오전 12:00)에서 23(오후 11:00) 사이의 수(0과 23 포함) 또는 수식

minute : 필수적인 요소. Variant(Integer). 모든 수식

second : 필수적인 요소. Variant(Integer). 모든 수식

참고
11시 59분 59초처럼 어떤 시간을 지정하려면 각 TimeSerial 인수의 숫자는 해당 인수의 허용 범위 안에 있어야 합니다. 즉, 시간은 0 – 23이며 분과 초는 0 – 59입니다. 특정 시간 전후의 시, 분, 초를 나타내는 수식을 사용하여 각 인수의 상대적인 시간을 지정할 수도 있습니다. 다음 예제는 절대 시간 대신에 식을 사용한 것입니다. TimeSerial 함수가 정오로부터 6시간 전(12 - 6)의 15분 전(-15) 시각, 즉 오전 5시 45분 00초를 반환합니다.

TimeSerial(12 - 6, -15, 0)

인수가 해당되는 허용 범위를 넘으면 적절한 상위 단위로 변환하여 계산합니다. 예를 들어 75분을 지정하면 이 값은 1시간 15분으로 계산됩니다. 어떤 하나의 인수 값이 -32,768에서 32,767의 범위를 초과하는 경우는 오류가 발생합니다. 세 인수에 따라 지정된 날짜가 허용된 범위를 초과하는 경우에도 오류가 발생합니다.

특정 시간 생성하기

Sub BasicExample()
    Dim myTime As Date
    myTime = TimeSerial(10, 30, 0) ' 오전 10시 30분
    Debug.Print "생성된 시간: " & myTime
End Sub


' Output
' 생성된 시간: 10:30:00 AM

시간 차이 계산

Sub TimeDifferenceExample()
    Dim startTime As Date
    Dim endTime As Date
    Dim timeDiff As Date
    
    startTime = TimeSerial(9, 0, 0)
    endTime = TimeSerial(15, 45, 0)
    
    timeDiff = endTime - startTime
    Debug.Print "시간 차이: " & Format(timeDiff, "hh:mm:ss")
End Sub

' Output
' 시간 차이: 06:45:00

날짜에 시간 추가

Sub AddTimeToDateExample()
    Dim currentDate As Date
    Dim newDateTime As Date
    
    currentDate = DateSerial(2023, 8, 1) ' August 1, 2023
    newDateTime = currentDate + TimeSerial(2, 30, 0) ' Adds 2 hours and 30 minutes
    
    Debug.Print "새로운 날짜 및 시간: " & newDateTime
End Sub

' Output
' 새로운 날짜 및 시간: 8/1/2023 2:30:00 AM

사용자 입력으로 시간 값 사용

Sub InputTimeExample()
    Dim hours As Integer
    Dim minutes As Integer
    Dim seconds As Integer
    Dim inputTime As Date
    
    hours = InputBox("Enter hours:")
    minutes = InputBox("Enter minutes:")
    seconds = InputBox("Enter seconds:")
    
    inputTime = TimeSerial(hours, minutes, seconds)
    Debug.Print "입력한 시간: " & Format(inputTime, "hh:mm:ss")
End Sub

' Output
' 입력한 시간: 17:39:25

시간 형식 지정

Sub TimeFormattingExample()
    Dim myTime As Date
    myTime = TimeSerial(20, 15, 0)
    
    Debug.Print "형식화된 시간: " & Format(myTime, "hh:mm AM/PM")
End Sub

' Output
' 형식화된 시간: 08:15 PM

DateValue 함수

Variant(Date) 값을 반환합니다.

Syntax
DateValue(date)

필수 요소인 date 인수는 100년 1월 1일에서 9999년 12월 31일까지를 나타내는 문자식입니다. date는 또한 이 범위에 있는 날짜, 시간 또는 날짜/시간을 나타내는 식입니다.

참고
date 인수가 유효한 날짜 구분 기호로 구분되는 숫자만 있는 문자열인 경우 DateValue 함수에서는 시스템에 지정한 간단한 날짜 형식에 따른 년, 월, 일에 대한 순서로 인식하게 됩니다. 또한 DateValue 함수는 약식 또는 정식 월 이름을 포함하고 있는 명확한 날짜 형식을 인식합니다. 예를 들어 DateValue 함수는 12/30/1991과 12/30/91 뿐만 아니라 12월 30일과 1991년 12월 30일을 모두 동일한 것으로 인식합니다.

date에서 연도 부분을 생략할 경우 DateValue 함수는 컴퓨터 시스템에 설정되어 있는 현재 연도를 사용합니다.

시간 정보를 포함하는 date 인수의 경우 DateVale 함수는 시간 정보를 반환하지 않습니다. 그러나 date 인수가 "89:98"처럼 유효하지 않은 시간 정보를 포함하고 있으면 오류가 발생합니다.

메모

date의 경우 Calendar 속성 설정이 Gregorian(그레고리력)이면 제공되는 날짜가 Gregorian(그레고리력)이어야 합니다. Calendar 속성 설정이 Hijri(회교력)이면 제공되는 날짜가 Hijri(회교력)이어야 합니다. 제공된 날짜가 Hijri(회교력)인 경우 인수 date는 1/1/100(그레고리력 718년 8월 2일)부터 4/3/9666(그레고리력 9999년 12월 31일)까지 날짜를 나타내는 String입니다.

특정 날짜 반환

Sub BasicExample()
    Dim dateString As String
    Dim actualDate As Date
    
    dateString = "2023-08-26" ' 날짜 형식의 텍스트
    actualDate = DateValue(dateString)
    
    Debug.Print "변환된 날짜: " & actualDate
End Sub

' Output
' 변환된 날짜: 8/26/2023

날짜 차이 계산

Sub DateDifferenceExample()
    Dim startDateString As String
    Dim endDateString As String
    Dim startDate As Date
    Dim endDate As Date
    Dim dateDiff As Long
    
    startDateString = "2023-08-20"
    endDateString = "2023-08-26"
    
    startDate = DateValue(startDateString)
    endDate = DateValue(endDateString)
    
    dateDiff = endDate - startDate
    Debug.Print "날짜 차이: " & dateDiff & "일"
End Sub

' Output
' 날짜 차이: 6일

사용자 입력으로 날짜 변환

Sub UserInputExample()
    Dim userInput As String
    Dim convertedDate As Date
    
    userInput = InputBox("날짜를 입력하세요 (YYYY-MM-DD 형식):")
    convertedDate = DateValue(userInput)
    
    Debug.Print "변환된 날짜: " & convertedDate
End Sub

' Output
' 변환된 날짜: 8/26/2023

날짜 형식 지정

Sub DateFormattingExample()
    Dim dateString As String
    Dim actualDate As Date
    
    dateString = "08/26/2023" ' MM/DD/YYYY 형식의 텍스트
    actualDate = DateValue(dateString)
    
    Debug.Print "변환된 날짜: " & Format(actualDate, "YYYY년 MM월 DD일")
End Sub

'Output
' 변환된 날짜: 2023년 08월 26일

오늘의 요일 얻기

Function GetKoreanDayOfWeek(dateValue As Date) As String
    Dim englishDay As String
    Dim koreanDay As String
    
    englishDay = Format(dateValue, "dddd")
    
    Select Case englishDay
        Case "Monday"
            koreanDay = "월요일"
        Case "Tuesday"
            koreanDay = "화요일"
        Case "Wednesday"
            koreanDay = "수요일"
        Case "Thursday"
            koreanDay = "목요일"
        Case "Friday"
            koreanDay = "금요일"
        Case "Saturday"
            koreanDay = "토요일"
        Case "Sunday"
            koreanDay = "일요일"
    End Select
    
    GetKoreanDayOfWeek = koreanDay
End Function
Sub TodaysWeekdayExample()
    Dim todayString As String
    Dim todayDate As Date
    Dim dayOfWeek As String
    
    todayString = "2023-08-26"
    todayDate = dateValue(todayString)
    
    dayOfWeek = GetKoreanDayOfWeek(todayDate)
    
    Debug.Print "오늘은 " & dayOfWeek & "입니다."
End Sub

' Output
' 오늘은 토요일입니다.

* 저는 영문판이라 코드가 길어졌을뿐 한글판을 사용하는 분은 당연히 사용자 정의 함수가 불필요합니다.

TimeValue 함수

시간을 포함하는 Variant(Date) 값을 반환합니다.

Syntax
TimeValue(time)

필수 요소인 time 인수는 0:00:00(오전 12:00:00)부터 23:59:59(오후 11:59:59)까지의 시간을 표현하는 문자식입니다. 그러나 이 범위에 있는 시간을 나타내는 식도 time 인수가 될 수 있습니다. time에 Null이 포함되어 있으면 Null을 반환합니다.

참고
12 시간 표시 형식이나 24시간 표시 형식에 따라 유효한 시간을 입력할 수 있습니다. 예를 들어 "오후 2:24"과 "14:24"는 모두 유효한 time 인수입니다.

time 인수에 날짜 정보가 있는 경우 TimeValue 함수는 그 정보를 반환하지 않습니다. 그러나 time에 잘못된 날짜 정보가 있으면 오류가 발생합니다.

특정 시간 출력하기

Sub BasicTimeValueExample()
    Dim timeStr As String
    Dim timeVal As Date
    
    timeStr = "12:30:45 PM"
    timeVal = TimeValue(timeStr)
    
    Debug.Print "Time value: " & timeVal
End Sub

' Output
' Time value: 12:30:45 PM

특정 시간 더해서 출력하기

Sub TimeCalculationExample()
    Dim timeStr As String
    Dim timeVal As Date
    
    timeStr = "08:15:00 AM"
    timeVal = TimeValue(timeStr)
    
    Dim newTimeVal As Date
    newTimeVal = timeVal + TimeValue("01:30:00")
    
    Debug.Print "New time value: " & newTimeVal
End Sub


' Output
' New time value: 9:45:00 AM

시간 비교하기

Sub CompareTimes()
    Dim timeStr1 As String
    Dim timeStr2 As String
    Dim timeVal1 As Date
    Dim timeVal2 As Date
    
    timeStr1 = "10:00:00 AM"
    timeStr2 = "09:30:00 AM"
    
    timeVal1 = TimeValue(timeStr1)
    timeVal2 = TimeValue(timeStr2)
    
    CompareAndPrintTimes timeVal1, timeVal2
End Sub
Sub CompareAndPrintTimes(ByVal time1 As Date, ByVal time2 As Date)
    If time1 > time2 Then
        Debug.Print "Time 1 is later than Time 2"
    ElseIf time1 < time2 Then
        Debug.Print "Time 1 is earlier than Time 2"
    Else
        Debug.Print "Both times are equal"
    End If
End Sub


' Output
' Time 1 is later than Time 2

반복문을 이용하여 특정 시간 간격으로 출력하기

Sub LoopWithTimeValue()
    Dim startTime As Date
    Dim endTime As Date
    Dim interval As Double
    
    startTime = TimeValue("09:00:00 AM")
    endTime = TimeValue("11:00:00 AM")
    interval = TimeValue("00:30:00")  ' 15-minute interval
    
    PrintTimesInRange startTime, endTime, interval
End Sub
Sub PrintTimesInRange(ByVal startT As Date, ByVal endT As Date, ByVal intv As Double)
    Dim currentTime As Date
    currentTime = startT
    
    Do While currentTime <= endT
        Debug.Print "Current time: " & Format(currentTime, "hh:mm AM/PM")
        currentTime = currentTime + intv
    Loop
End Sub


' Output
' Current time: 09:00 AM
' Current time: 09:30 AM
' Current time: 10:00 AM
' Current time: 10:30 AM
' Current time: 11:00 AM

날짜 및 시간 계산 함수

DateAdd 함수

지정된 시간 간격이 추가된 날짜를 포함하는 Variant(Date)를 반환합니다.

Syntax
DateAdd(interval, number, date)

interval : 필수적인 요소. 문자식을 사용하여 시간 간격을 표시합니다.

number : 필수적인 요소 수식을 사용하여 날짜에 시간 간격을 가감합니다. 양수(이후 시간을 계산하는 경우)와 음수(이전 시간을 계산하는 경우) 모두 사용 가능합니다.

date : 필수적인 요소. Variant(Date) 형의 날짜에는 시간 간격이 가감됩니다.

설정

interval 인수의 설정은 다음과 같습니다.

참고
날짜에 특정 시간을 더하거나 뺄 때 DateAdd 함수를 사용합니다. 예를 들어 현재 시간부터 45분 이후 시간이나 현재 일로부터 30일 이후의 날짜를 계산할 때 DateAdd 함수를 사용합니다.

date에 날짜를 더할 때 연("y"), 일("d")이나 요일("w")을 사용합니다.

DateAdd 함수는 틀린 날짜 값은 반환하지 않습니다. 다음은 95년 1월 31일에 1개월(30일)을 더한 예제입니다.

DateAdd("m", 1, "31-Jan-95")

위의 경우 DateAdd 함수는 95년 2월 31일이 아닌 95년 2월 28일을 반환합니다. date가 96년 1월 31일인 경우는 윤년이기 때문에 96년 2월 29일을 반환합니다.

계산한 날짜가 100년을 넘어가면 오류가 발생합니다. 실제 date보다 많은 연도를 가감했기 때문입니다.

number가 Long 값이 아니면 가까운 정수값으로 반올림한 후 계산합니다.

메모

DateAdd 함수의 반환값 형식은 date 인수에 전달된 형식 대신 제어판 설정에 의해 결정됩니다.

메모

date의 경우 Calendar 속성 설정이 Gregorian(그레고리력)이면 제공되는 데이터도 Gregorian(그레고리력)이어야 합니다. Calendar 속성 설정이 Hijri(회교력)이면 제공되는 데이터도 Hijri(회교력)이어야 합니다. 월 값이 이름인 경우 월 이름은 현재 Calendar 속성 설정과 일관성이 있어야 합니다. 월 이름과 현재 Calendar 속성 설정 간의 충돌 가능성을 최소화하려면 숫자로 된 월 값(Short Date 형식)을 입력하십시오.

비고

DateAdd 함수에서 ,"y","d",w"는 같은 값을 반환합니다.검색을 해봤는데...뚜렷한 설명을 찾지는 못했습니다.

다만...아래 링크에서 같은 값을 반환한다는 것을 보았습니다.(T-SQL)

* y,d,w의 차이는 DatePart 함수를 보시면 쉽게 아실 수 있습니다.

DATEADD (Transact-SQL) - SQL Server

Transact-SQL reference for the DATEADD function. This function returns a date that has been modified by the specified date part.

learn.microsoft.com

yyyy (연도 간격 추가)

Sub AddYears()
    Dim originalDate As Date
    Dim newDate As Date
    
    originalDate = DateSerial(2023, 8, 26) ' 2023년 8월 26일
    newDate = DateAdd("yyyy", 2, originalDate) ' 2년 후
    
    Debug.Print "New date: " & newDate
End Sub

' Output
' New date: 8/26/2025

q(분기 간격 추가)

Sub AddQuarters()
    Dim originalDate As Date
    Dim newDate As Date
    
    originalDate = DateSerial(2023, 2, 15) ' 2023년 2월 15일
    newDate = DateAdd("q", 3, originalDate) ' 3분기 후
    
    Debug.Print "New date: " & newDate
End Sub

' Output
' New date: 11/15/2023

m(월 간격 추가)

Sub AddMonths()
    Dim originalDate As Date
    Dim newDate As Date
    
    originalDate = DateSerial(2023, 5, 10) ' 2023년 5월 10일
    newDate = DateAdd("m", 4, originalDate) ' 4개월 후
    
    Debug.Print "New date: " & newDate
End Sub

' Output
' New date: 9/10/2023

y 일(일년 기준) 추가

Sub AddDays()
    Dim originalDate As Date
    Dim newDate As Date
    
    originalDate = DateSerial(2023, 8, 26) ' 2023년 8월 26일
    newDate = DateAdd("y", 10, originalDate) ' 10일 후
    
    Debug.Print "New date: " & newDate
End Sub

' Output
' New date: 9/5/2023

d (일 간격 추가)

Sub AddDays()
    Dim originalDate As Date
    Dim newDate As Date
    
    originalDate = DateSerial(2023, 8, 26) ' 2023년 8월 26일
    newDate = DateAdd("d", 10, originalDate) ' 10일 후
    
    Debug.Print "New date: " & newDate
End Sub

' Output
' New date: 9/5/2023

w(요일 간격 추가)

Sub AddDays()
    Dim originalDate As Date
    Dim newDate As Date
    
    originalDate = DateSerial(2023, 8, 26) ' 2023년 8월 26일
    newDate = DateAdd("w", 10, originalDate) ' 10일 후
    
    Debug.Print "New date: " & newDate
End Sub

' Output
' New date: 9/5/2023

ww(주 간격 추가)

Sub AddWeeksWithWeekday()
    Dim originalDate As Date
    Dim newDate As Date
    
    originalDate = DateSerial(2023, 8, 26) ' 2023년 8월 26일 (토요일)
    newDate = DateAdd("ww", 2, originalDate) ' 2주 후
    
    Debug.Print "New date: " & newDate
End Sub

' Output
' New date: 9/9/2023

h(시간 간격 추가)

Sub AddHours()
    Dim originalTime As Date
    Dim newTime As Date
    
    originalTime = TimeSerial(14, 30, 0) ' 오후 2시 30분
    newTime = DateAdd("h", 3, originalTime) ' 3시간 후
    
    Debug.Print "New time: " & newTime
End Sub

' Output
' New time: 5:30:00 PM

n(분 간격 추가)

Sub AddMinutes()
    Dim originalTime As Date
    Dim newTime As Date
    
    originalTime = TimeSerial(9, 45, 0) ' 오전 9시 45분
    newTime = DateAdd("n", 15, originalTime) ' 15분 후
    
    Debug.Print "New time: " & newTime
End Sub

' Output
' New time: 10:00:00 AM

s(초 간격 추가)

Sub AddSeconds()
    Dim originalTime As Date
    Dim newTime As Date
    
    originalTime = TimeSerial(18, 20, 30) ' 오후 6시 20분 30초
    newTime = DateAdd("s", 45, originalTime) ' 45초 후
    
    Debug.Print "New time: " & newTime
End Sub

' Output
' New time: 6:21:15 PM

DateDiff 함수

지정된 두 날짜 간의 시간 간격을 의미하는 Variant(Long) 값을 반환합니다.

Syntax
DateDiff(interval, date1, date2, [ firstdayofweek, [ firstweekofyear ]] )

interval : 필수적인 요소. 문자식을 사용하여 date1와 date2 간의 시간 간격을 계산합니다.

date1, date2 : 필수적인 요소. Variant(Date) 값. 계산에 사용할 두 날짜 값입니다.

firstdayofweek : 선택적인 요소. 주의 첫째 요일을 지정하는 상수입니다. 생략하면 일요일로 지정됩니다.

firstweekofyear : 선택적인 요소. 년의 첫째 주를 지정하는 상수입니다. 생략하면 1월 1일이 포함된 주로 지정됩니다.

설정
interval 인수 설정은 다음과 같습니다.

firstdayofweek 인수 설정은 다음과 같습니다.

firstweekofyear 인수는 다음과 같은 설정을 가지고 있습니다.

참고
DateDiff 함수는 날짜 간에 시간 간격을 계산할 때 사용합니다. 예를 들면 두 날짜 간의 날짜 계산이나 현재 날짜부터 연말 사이에 있는 주의 수를 계산할 때 DateDiff 함수를 사용합니다.

date1과 date2 간의 일자를 계산하는 경우 연("y")이나 일("d")을 사용합니다. interval이 요일("w")인 경우 DateDiff는 두 날짜 간의 주 수를 반환합니다. date1이 월요일이면 DateDiff는 date2까지의 월요일 수를 계산합니다. date1이 아닌 date2를 계산합니다. interval이 주("ww")일 경우 DateDiff 함수는 지정된 두 날짜 간의 주 수를 반환합니다. 이 경우 date1과 date2간의 일요일 수를 계산합니다. DateDiff 함수는 일요일로 나누어 떨어지는 경우 date2를 계산하고, date1인 경우는 계산하지 않습니다.

date1이 date2 이후 시간인 경우 DateDiff 함수는 음수값을 반환합니다.

firstdayofweek 인수는 시간 간격 부호 "w"와 "ww"를 사용하는 결과값에 영향을 줍니다.

date1 또는 date2가 날짜 리터럴인 경우 지정된 날짜 부분의 값은 변하지 않습니다. 그러나 date1과 date2가 큰따옴표(" ")로 묶인 경우 연도를 생략해도 프로그램에는 date1과 date2식을 처리할 때마다 항상 현재 연도가 삽입됩니다. 이런 방식을 사용하면 다른 년도에도 사용할 수 있는 프로그램을 작성할 수 있습니다.

12월 31일을 다음 해 1월 1일과 비교하면 DateDiff 함수는 일자로는 하루 차이가 나지만 연도 값("yyyy") 1을 반환합니다.

메모

date1 과 date2의 경우 Calendar 속성 설정이 Gregorian(그레고리오력)이면 제공되는 날짜도 Gregorian(그레고리오력)이어야 합니다. Calendar 속성 설정이 Hijri(회교력)이면 제공되는 날짜도 Hijri(회교력)이어야 합니다.

yyyy (년) 간격 계산 예제

Sub YearDifference()
    Dim startDate As Date
    Dim endDate As Date
    startDate = DateSerial(2020, 1, 1)
    endDate = DateSerial(2023, 12, 31)
    Dim yearsDiff As Long
    yearsDiff = DateDiff("yyyy", startDate, endDate)
    Debug.Print "Years Difference: " & yearsDiff
End Sub

' Output
' Years Difference: 3

q (분기) 간격 계산 예제

Sub QuarterDifference()
    Dim startDate As Date
    Dim endDate As Date
    startDate = DateSerial(2020, 1, 1)
    endDate = DateSerial(2023, 12, 31)
    Dim quartersDiff As Long
    quartersDiff = DateDiff("q", startDate, endDate)
    Debug.Print "Quarters Difference: " & quartersDiff
End Sub

' Output
' Quarters Difference: 15

m (월) 간격 계산 예제

Sub MonthDifference()
    Dim startDate As Date
    Dim endDate As Date
    startDate = DateSerial(2020, 1, 1)
    endDate = DateSerial(2023, 12, 31)
    Dim monthsDiff As Long
    monthsDiff = DateDiff("m", startDate, endDate)
    Debug.Print "Months Difference: " & monthsDiff
End Sub

' Output
' Months Difference: 47

y(일 : 일년 기준)

Sub YearDifference()
    Dim startDate As Date
    Dim endDate As Date
    Dim dayOfYearDiff As Long
    
    startDate = DateSerial(2020, 1, 1)
    endDate = DateSerial(2023, 12, 31)
    
    dayOfYearDiff = DateDiff("y", startDate, endDate)
    Debug.Print "DayOfYear: " & dayOfYearDiff
End Sub

' Output
' DayOfYear: 1460

d(일 기준)

Sub DayDifference()
    Dim startDate As Date
    Dim endDate As Date
    Dim daysDiff As Long
    
    startDate = DateSerial(2020, 1, 1)
    endDate = DateSerial(2023, 12, 31)
    
    daysDiff = DateDiff("d", startDate, endDate)
    Debug.Print "Day Difference: " & daysDiff
End Sub

' Output
' Day Difference: 1460

w(요일 간격 추가)

Sub WeekdayDifference()
    Dim startDate As Date
    Dim endDate As Date
    Dim weekDayDiff As Long
    
    startDate = DateSerial(2020, 1, 1)
    endDate = DateSerial(2023, 12, 31)
    
    weekDayDiff = DateDiff("w", startDate, endDate)
    Debug.Print "Weekday difference : " & weekDayDiff
End Sub

' Output
' Weekday difference : 208

ww( 주 간격 추가)

Sub WeekDifference()
    Dim startDate As Date
    Dim endDate As Date
    Dim weekDiff As Long
    
    startDate = DateSerial(2020, 1, 1)
    endDate = DateSerial(2023, 12, 31)
    
    weekDiff = DateDiff("ww", startDate, endDate)
    Debug.Print "Week difference : " & weekDiff
End Sub

' Output
' Week difference : 209

h(시 간격 추가)

Sub HourDifference()
    Dim startTime As Date
    Dim endTime As Date
    Dim hoursDiff As Long
    
    startTime = TimeSerial(8, 0, 0)
    endTime = TimeSerial(14, 30, 0)
    
    hoursDiff = DateDiff("h", startTime, endTime)
    Debug.Print "Hour Difference: " & hoursDiff
End Sub

' Output
' Hour Difference: 6

n(분 간격 추가)

Sub MinuteDifference()
    Dim startTime As Date
    Dim endTime As Date
    Dim minutesDiff As Long
    
    startTime = TimeSerial(8, 0, 0)
    endTime = TimeSerial(14, 30, 0)
    
    minutesDiff = DateDiff("n", startTime, endTime)
    Debug.Print "Minute Difference: " & minutesDiff
End Sub

' Output
' Minute Difference: 390

s(초 간격 추가)

Sub SecondDifference()
    Dim startTime As Date
    Dim endTime As Date
    Dim secondsDiff As Long
    
    startTime = TimeSerial(8, 0, 0)
    endTime = TimeSerial(14, 30, 30)
    
    secondsDiff = DateDiff("s", startTime, endTime)
    Debug.Print "Second Difference: " & secondsDiff
End Sub

' Output
' Second Difference: 23430

DatePart 함수

주어진 날짜의 지정된 부분을 포함하는 Variant(Integer) 값을 반환합니다.

경고
이 함수를 사용하는 데 문제가 있습니다. 일부 달력 연도의 마지막 월요일은 1주여야 하는데 53주로 반환될 수 있습니다.

자세한 내용은 아래 링크를 참고하세요.

형식 또는 DatePar 함수는 날짜에 대한 잘못된 주 번호를 반환합니다. - Microsoft 365 Apps

Format 또는 DatePart 함수를 사용하여 날짜의 주 번호를 결정할 때 일부 달력 연도의 마지막 월요일은 주 1이어야 하는 53주로 반환됩니다.

learn.microsoft.com

Syntax
DatePart(interval, date, [ firstdayofweek, [ firstweekofyear ]])

interval : 필수적인 요소. 반환할 시간 간격의 문자식입니다.

date : 필수적인 요소. 계산할 Variant(Date) 값입니다.

firstdayofweek : 선택적인 요소. 요일을 지정하는 상수입니다. 지정하지 않으면 일요일로 간주합니다.

firstweekofyear : 선택적인 요소. 년을 기준으로 한 첫째 주를 지정하는 상수입니다. 지정하지 않으면 1월 1일을 포함하는 주를 첫째 주로 간주합니다.

설정
interval 인수 설정은 다음과 같습니다.

firstdayofweek 인수 설정은 다음과 같습니다.

firstweekofyear 인수는 다음과 같은 설정을 가지고 있습니다.

참고
특정한 시간 간격을 계산하거나 결과값을 반환할 때 DatePart 함수를 사용합니다. 예를 들어 DatePart 함수를 사용하여 요일이나 현재 시각을 계산할 수 있습니다.

firstdayofweek 인수는 시간 간격 부호 "w"와 "ww"를 사용하는 결과값에 영향을 줍니다.

date가 날짜 리터럴인 경우 지정된 날짜 부분의 값은 변하지 않습니다. 그러나 큰따옴표(" ")로 date를 묶고 연도를 생략할 경우에는 date 식을 계산할 때마다 사용자의 코드에 현재 연도가 삽입됩니다. 이런 방식을 사용하면 다른 년도에도 사용할 수 있는 프로그램을 작성할 수 있습니다.

메모

date 의 경우 Calendar 속성 설정이 Gregorian(그레고리력)이면 제공되는 날짜가 Gregorian(그레고리력)이어야 합니다. Calendar 속성 설정이 Hijri(회교력)이면 제공되는 날짜가 Hijri(회교력)이어야 합니다.

반환되는 날짜 부분은 현재 아라비아력의 시간 단위입니다. 예를 들어 현재 Calendar 속성 설정이 Hijri(회교력)이고 반환될 날짜 부분이 연도이면 Hijri(회교력) 연도 값이 반환됩니다.

다음 코드는 인터벌 인수를 사용하는 간단한 예제입니다.

yyyy (년)

Sub ExtractYear()
    Dim targetDate As Date
    targetDate = Now
    
    Dim yearPart As Integer
    yearPart = DatePart("yyyy", targetDate)
    Debug.Print "Year: " & yearPart
End Sub

' Output
' Year: 2023

Q(분기)

Sub ExtractQuarter()
    Dim targetDate As Date
    targetDate = Now
    
    Dim quarterPart As Integer
    quarterPart = DatePart("q", targetDate)
    Debug.Print "Quarter: " & quarterPart
End Sub

' Output
' Quarter: 3

m(월)

Sub ExtractMonth()
    Dim targetDate As Date
    targetDate = Now
    
    Dim monthPart As Integer
    monthPart = DatePart("m", targetDate)
    Debug.Print "Month: " & monthPart
End Sub

' Output
' Month: 8

y(일 : 일년 기준)

Sub ExtractDayOfYear()
    Dim targetDate As Date
    targetDate = Now
    
    Dim dayOfYearPart As Integer
    dayOfYearPart = DatePart("y", targetDate)
    Debug.Print "Day of Year: " & dayOfYearPart
End Sub

' Output
' Day of Year: 239

d(일)

Sub ExtractDay()
    Dim targetDate As Date
    targetDate = Now
    
    Dim dayPart As Integer
    dayPart = DatePart("d", targetDate)
    Debug.Print "Day: " & dayPart
End Sub

' Output
' Day: 27

w(요일)

Sub ExtractWeekday()
    Dim targetDate As Date
    targetDate = Now
    
    Dim weekdayPart As Integer
    weekdayPart = DatePart("w", targetDate, vbSunday)
    Debug.Print "Weekday: " & weekdayPart
End Sub

' Output
' Weekday: 1

ww(주)

Sub ExtractWeekOfYear()
    Dim targetDate As Date
    targetDate = Now
    
    Dim weekOfYearPart As Integer
    weekOfYearPart = DatePart("ww", targetDate, vbSunday)
    Debug.Print "Week of Year: " & weekOfYearPart
End Sub

' Output
' Week of Year: 35

h(시간)

Sub ExtractHour()
    Dim targetDate As Date
    targetDate = Now
    
    Dim hourPart As Integer
    hourPart = DatePart("h", targetDate)
    Debug.Print "Hour: " & hourPart
End Sub

' Output
' Hour: 17

n(분)

Sub ExtractMinute()
    Dim targetDate As Date
    targetDate = Now
    
    Dim minutePart As Integer
    minutePart = DatePart("n", targetDate)
    Debug.Print "Minute: " & minutePart
End Sub

' Output
' Minute: 9

s(초)

Sub ExtractSecond()
    Dim targetDate As Date
    targetDate = Now
    
    Dim secondPart As Integer
    secondPart = DatePart("s", targetDate)
    Debug.Print "Second: " & secondPart
End Sub

' Output
' Second: 33

날짜 및 시간 출력 형식 지정 함수

Format 함수

Format 함수

Format 함수 주어진 형식 표현에 따라 서식이 지정된 식을 포함하는 Variant (문자열)을 반환합니다. Syntax Format(Expression, [ Format ], [ FirstDayOfWeek ], [ FirstWeekOfYear ]) Expression : 필수입니다.유효한 표현식

vbaplayground.tistory.com

FormatDateTime 함수

FormatDateTime 함수

FormatDateTime 함수 날짜와 시간으로 서식이 지정된 식을 반환합니다. Syntax FormatDateTime(Date, [ NamedFormat ]) Date : 필수입니다. 서식을 지정할 날짜표현식입니다. NamedFormat : 선택 사항입니다. 사용된 날

vbaplayground.tistory.com

월 이름 및 요일 이름 반환 함수

MonthName 함수

MonthName 함수

MonthName 함수 지정된 월을 나타내는 문자열을 반환합니다. Syntax MonthName(month, [ abbreviate ]) month : 필수입니다. 해당 월의 숫자 지정입니다. 예를 들어 1월은 1, 2월은 2입니다. abbreviate : 선택 사항입

vbaplayground.tistory.com

WeekdayName 함수

WeekdayName 함수

WeekdayName 함수 지정된 요일을 나타내는 문자열을 반환합니다. Syntax WeekdayName(weekday, abbreviate, firstdayofweek) weekday : 필수입니다. 요일에 대한 숫자 지정입니다. 각 요일의 숫자 값은 firstdayofweek 설정

vbaplayground.tistory.com

'VBA 라이브러리' 카테고리의 다른 글

Choose 함수  (0) 2023.09.13
Environ 함수  (0) 2023.09.13
WeekdayName 함수  (0) 2023.08.24
MonthName 함수  (0) 2023.08.24
InStrRev 함수  (0) 2023.08.24