수색…
달력
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
Now
및 Time
기능은 초 단위로 정확하기 때문에 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] )
- interval 은
DatePart()
함수에 정의 된 간격 중 하나 일 수 있습니다. - date1 과 date2 는 계산에 사용할 두 날짜입니다.
- firstdayofweek 및 firstweekofear 는 선택 사항입니다. 설명은
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 )
- interval 은
DatePart()
함수에 정의 된 간격 중 하나 일 수 있습니다. - 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