수색…


달력

VBA는 2 개의 달력을 지원합니다 : 그레고리오히 줄리

Calendar 속성은 현재 달력을 수정하거나 표시하는 데 사용됩니다.

캘린더의 2 가지 값은 다음과 같습니다.

일정한 기술
0 vbCalGreg 그레고리오 력 (기본값)
1 vbCalHijri Hijri 달력

Sub CalendarExample()
    'Cache the current setting.
    Dim Cached As Integer
    Cached = Calendar

    ' Dates in Gregorian Calendar
    Calendar = vbCalGreg
    Dim Sample As Date
    'Create sample date of 2016-07-28
    Sample = DateSerial(2016, 7, 28)

    Debug.Print "Current Calendar : " & Calendar
    Debug.Print "SampleDate = " & Format$(Sample, "yyyy-mm-dd")
    
    ' Date in Hijri Calendar
    Calendar = vbCalHijri
    Debug.Print "Current Calendar : " & Calendar
    Debug.Print "SampleDate = " & Format$(Sample, "yyyy-mm-dd")
    
    'Reset VBA to cached value.
    Cached = Calendar
End Sub

이 Sub는 다음을 인쇄합니다.

Current Calendar : 0
SampleDate = 2016-07-28
Current Calendar : 1
SampleDate = 1437-10-23

기본 함수

시스템 날짜 시간 검색

VBA는 시스템 클럭에서 날짜 및 / 또는 시간을 검색하는 3 가지 내장 함수를 지원합니다.

기능 반환 유형 반환 값
지금 날짜 현재 날짜와 시간을 반환합니다.
날짜 날짜 현재 날짜와 시간의 날짜 부분을 반환합니다.
시각 날짜 현재 날짜와 시간의 시간 부분을 반환합니다.
Sub DateTimeExample()

    ' -----------------------------------------------------
    ' Note : EU system with default date format DD/MM/YYYY
    ' -----------------------------------------------------
    
    Debug.Print Now   ' prints 28/07/2016 10:16:01 (output below assumes this date and time)
    Debug.Print Date  ' prints 28/07/2016
    Debug.Print Time  ' prints 10:16:01
    
    ' Apply a custom format to the current date or time
    Debug.Print Format$(Now, "dd mmmm yyyy hh:nn")  ' prints 28 July 2016 10:16
    Debug.Print Format$(Date, "yyyy-mm-dd")         ' prints 2016-07-28
    Debug.Print Format$(Time, "hh") & " hour " & _
                Format$(Time, "nn") & " min " & _
                Format$(Time, "ss") & " sec "       ' prints 10 hour 16 min 01 sec
    
End Sub

타이머 기능

Timer 함수는 자정 이후 경과 된 시간 (초)을 나타내는 Single을 반환합니다. 정밀도는 1/100 초입니다.

Sub TimerExample()

    Debug.Print Time    ' prints 10:36:31  (time at execution)
    Debug.Print Timer   ' prints 38191,13  (seconds since midnight)

End Sub

NowTime 기능은 초 단위로 정확하기 때문에 Timer 는 시간 측정의 정확성을 높이는 편리한 방법을 제공합니다.

Sub GetBenchmark()
       
    Dim StartTime  As Single
    StartTime = Timer       'Store the current Time
    
    Dim i As Long
    Dim temp As String
    For i = 1 To 1000000    'See how long it takes Left$ to execute 1,000,000 times
        temp = Left$("Text", 2)
    Next i
    
    Dim Elapsed As Single
    Elapsed = Timer - StartTime
    Debug.Print "Code completed in " & CInt(Elapsed * 1000) & " ms"

End Sub

IsDate ()

IsDate ()는식이 유효한 날짜인지 여부를 테스트합니다. Boolean 반환합니다.

Sub IsDateExamples()

    Dim anything As Variant
       
    anything = "September 11, 2001"

    Debug.Print IsDate(anything)    'Prints True
            
    anything = #9/11/2001#

    Debug.Print IsDate(anything)    'Prints True
   
    anything = "just a string"

    Debug.Print IsDate(anything)    'Prints False

    anything = vbNull
    
    Debug.Print IsDate(anything)    'Prints False
    
End Sub

추출 함수

이 함수는 Date 로 매개 변수로 변환 할 수있는 Variant 를 사용하여 날짜 또는 시간의 일부를 나타내는 Integer 반환합니다. 매개 변수를 Date 로 형변환 할 수 없으면 런타임 오류 13이 발생합니다. 유형 불일치.

기능 기술 반환 값
년() 날짜 인수의 연도 부분을 반환합니다. 정수 (100 ~ 9999)
달() date 인수의 월 부분을 반환합니다. 정수 (1 ~ 12)
일() 날짜 인수의 요일 부분을 반환합니다. 정수 (1 ~ 31)
주일() 날짜 인수의 요일을 반환합니다. 첫 번째 요일을 정의하는 선택적 두 번째 인수를 허용합니다. 정수 (1 ~ 7)
시간() 날짜 인수의 시간 부분을 반환합니다. 정수 (0 ~ 23)
분() 날짜 인수의 분 부분을 반환합니다. 정수 (0 ~ 59)
둘째() date 인수의 두 번째 부분을 반환합니다. 정수 (0 ~ 59)

예 :

Sub ExtractionExamples()

    Dim MyDate As Date
    
    MyDate = DateSerial(2016, 7, 28) + TimeSerial(12, 34, 56)

    Debug.Print Format$(MyDate, "yyyy-mm-dd hh:nn:ss") ' prints 2016-07-28 12:34:56

    Debug.Print Year(MyDate)                           ' prints 2016
    Debug.Print Month(MyDate)                          ' prints 7
    Debug.Print Day(MyDate)                            ' prints 28
    Debug.Print Hour(MyDate)                           ' prints 12
    Debug.Print Minute(MyDate)                         ' prints 34
    Debug.Print Second(MyDate)                         ' prints 56
    
    Debug.Print Weekday(MyDate)                        ' prints 5
    'Varies by locale - i.e. will print 4 in the EU and 5 in the US
    Debug.Print Weekday(MyDate, vbUseSystemDayOfWeek)
    Debug.Print Weekday(MyDate, vbMonday)              ' prints 4
    Debug.Print Weekday(MyDate, vbSunday)              ' prints 5
    
End Sub

DatePart () 함수

DatePart() 는 날짜의 일부를 반환하는 함수이기는하지만 다르게 작동하며 위의 함수보다 더 많은 가능성을 허용합니다. 예를 들어, 1 년의 분기 또는 1 년의 주를 반환 할 수 있습니다.

통사론:

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

interval 인수는 다음과 같습니다.

간격 기술
"yyyy" 연도 (100 ~ 9999)
"와이" 일 (1 ~ 366)
"엠" 월 (1 ~ 12)
"큐" 분기 (1 ~ 4)
"W w" 주 (1 ~ 53)
"w" 요일 (1 ~ 7)
"디" 일 (1 ~ 31)
"h" 시간 (0 ~ 23)
"엔" 분 (0-59)
"에스" 초 (0-59)

firstdayofweek 는 선택 사항입니다. 이것은주의 첫날을 지정하는 상수입니다. 지정하지 않으면 vbSunday 로 간주됩니다.

첫 번째 수령 은 선택 사항입니다. 이는 1 년의 첫 번째 주를 지정하는 상수입니다. 지정하지 않으면 첫 번째 주를 1 월 1 일이 발생한 주라고 가정합니다.

예 :

Sub DatePartExample()

    Dim MyDate As Date
    
    MyDate = DateSerial(2016, 7, 28) + TimeSerial(12, 34, 56)

    Debug.Print Format$(MyDate, "yyyy-mm-dd hh:nn:ss") ' prints 2016-07-28 12:34:56
    
    Debug.Print DatePart("yyyy", MyDate)              ' prints 2016
    Debug.Print DatePart("y", MyDate)                 ' prints 210
    Debug.Print DatePart("h", MyDate)                 ' prints 12
    Debug.Print DatePart("Q", MyDate)                 ' prints 3
    Debug.Print DatePart("w", MyDate)                 ' prints 5
    Debug.Print DatePart("ww", MyDate)                ' prints 31

End Sub

계산 기능

DateDiff ()

DateDiff() 는 지정된 두 날짜 사이의 시간 간격 수를 나타내는 Long 반환합니다.

통사론

DateDiff ( interval, date1, date2  [, firstdayofweek] [, firstweekofyear] )
  • intervalDatePart() 함수에 정의 된 간격 중 하나 일 수 있습니다.
  • date1date2 는 계산에 사용할 두 날짜입니다.
  • firstdayofweekfirstweekofear 는 선택 사항입니다. 설명은 DatePart() 함수를 참조하십시오.

예제들

Sub DateDiffExamples()

    ' Check to see if 2016 is a leap year.
    Dim NumberOfDays As Long
    NumberOfDays = DateDiff("d", #1/1/2016#, #1/1/2017#)
    
    If NumberOfDays = 366 Then
        Debug.Print "2016 is a leap year."              'This will output.
    End If
           
    ' Number of seconds in a day
    Dim StartTime As Date
    Dim EndTime As Date
    StartTime = TimeSerial(0, 0, 0)
    EndTime = TimeSerial(24, 0, 0)
    Debug.Print DateDiff("s", StartTime, EndTime)       'prints 86400

End Sub

DateAdd ()

DateAdd() 는 지정된 날짜 또는 시간 간격이 추가 된 Date 를 반환합니다.

통사론

DateAdd ( interval, number, date  ) 
  • intervalDatePart() 함수에 정의 된 간격 중 하나 일 수 있습니다.
  • number 추가하려는 간격의 숫자 인 숫자 식. 그것은 긍정적 인 (미래에 날짜를 얻기 위해) 또는 부정적인 (과거에 날짜를 얻기 위해) 일 수 있습니다.
  • date 는 간격이 추가 된 Date 또는 리터럴입니다.

예 :

Sub DateAddExamples()

    Dim Sample As Date
    'Create sample date and time of 2016-07-28 12:34:56
    Sample = DateSerial(2016, 7, 28) + TimeSerial(12, 34, 56)
    
    ' Date 5 months previously (prints 2016-02-28):
    Debug.Print Format$(DateAdd("m", -5, Sample), "yyyy-mm-dd")
    
    ' Date 10 months previously (prints 2015-09-28):
    Debug.Print Format$(DateAdd("m", -10, Sample), "yyyy-mm-dd")
    
    ' Date in 8 months (prints 2017-03-28):
    Debug.Print Format$(DateAdd("m", 8, Sample), "yyyy-mm-dd")

    ' Date/Time 18 hours previously (prints 2016-07-27 18:34:56):
    Debug.Print Format$(DateAdd("h", -18, Sample), "yyyy-mm-dd hh:nn:ss")
    
    ' Date/Time in 36 hours (prints 2016-07-30 00:34:56):
    Debug.Print Format$(DateAdd("h", 36, Sample), "yyyy-mm-dd hh:nn:ss")

End Sub

전환 및 창조

CDate ()

CDate() 는 모든 데이터 유형의 데이터를 Date 데이터 유형으로 변환합니다.

Sub CDateExamples()

    Dim sample As Date

    ' Converts a String representing a date and time to a Date
    sample = CDate("September 11, 2001 12:34")
    Debug.Print Format$(sample, "yyyy-mm-dd hh:nn:ss")      ' prints 2001-09-11 12:34:00
    
    ' Converts a String containing a date to a Date
    sample = CDate("September 11, 2001")
    Debug.Print Format$(sample, "yyyy-mm-dd hh:nn:ss")      ' prints 2001-09-11 00:00:00

    ' Converts a String containing a time to a Date
    sample = CDate("12:34:56")
    Debug.Print Hour(sample)                        ' prints 12
    Debug.Print Minute(sample)                      ' prints 34
    Debug.Print Second(sample)                      ' prints 56
    
    ' Find the 10000th day from the epoch date of 1899-12-31
    sample = CDate(10000)
    Debug.Print Format$(sample, "yyyy-mm-dd")       ' prints 1927-05-18
    
End Sub

VBA에는 강하게 입력 된 Date 대신 Variant 형식의 날짜를 반환하는 것 외에 CDate() 함수와 같은 방식으로 작동하는 느슨하게 입력 된 CVDate() 가 있습니다. CDate() (A)에 전달하는 경우에 버전이 바람직되어야 Date 매개 변수 나에게 할당 Date 변수 및 CVDate() (A)에 전달 될 때 경우 버전이 바람직해야 Variant 파라미터 나에게 할당하는 Variant 가변. 이렇게하면 암시 적 형식 캐스팅이 발생하지 않습니다.


DateSerial ()

DateSerial() 함수는 날짜를 만드는 데 사용됩니다. 지정된 년, 월, 일의 Date 를 반환합니다.

통사론:

DateSerial ( year, month, day ) 

연도, 월 및 일 인수가 유효한 정수 (연도는 100에서 9999, 월은 1에서 12, 날은 1에서 31)입니다.

예제들

Sub DateSerialExamples()

    ' Build a specific date
    Dim sample As Date
    sample = DateSerial(2001, 9, 11)
    Debug.Print Format$(sample, "yyyy-mm-dd")                   ' prints 2001-09-11
    
    ' Find the first day of the month for a date.
    sample = DateSerial(Year(sample), Month(sample), 1)
    Debug.Print Format$(sample, "yyyy-mm-dd")                   ' prints 2001-09-11
    
    ' Find the last day of the previous month.
    sample = DateSerial(Year(sample), Month(sample), 1) - 1
    Debug.Print Format$(sample, "yyyy-mm-dd")                   ' prints 2001-09-11
    
End Sub

DateSerial() 은 "유효하지 않은"날짜를 받아들이고 유효 날짜를 계산합니다. 이것은 좋은 창조적으로 사용될 수 있습니다 :

긍정적 인 예

Sub GoodDateSerialExample()

    'Calculate 45 days from today
    Dim today As Date
    today = DateSerial (2001, 9, 11)
    Dim futureDate As Date
    futureDate = DateSerial(Year(today), Month(today), Day(today) + 45)
    Debug.Print Format$(futureDate, "yyyy-mm-dd")            'prints 2009-10-26

End Sub

그러나 유효성이 검증되지 않은 사용자 입력으로 날짜를 만들 때 슬픔을 유발할 가능성이 더 높습니다.

부정적인 예

Sub BadDateSerialExample()

    'Allow user to enter unvalidate date information
    Dim myYear As Long
    myYear = InputBox("Enter Year")                                         
            'Assume user enters 2009
    Dim myMonth As Long
    myMonth = InputBox("Enter Month")                                       
            'Assume user enters 2
    Dim myDay As Long
    myDay = InputBox("Enter Day")                                           
            'Assume user enters 31
    Debug.Print Format$(DateSerial(myYear, myMonth, myDay), "yyyy-mm-dd")   
            'prints  2009-03-03

End Sub


Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow