如何在vba中进行日期时间的计算?

在编写vba的代码中,不可避免的会遇到需要对日期时间进行处理的情况。

在vba中,日期也是以序列号的形式存储的,但是它与excel工作表中存储日期不同的是,1序列号表示的是1899/12/31 ,-1表示的是1899/12/29 ,负数也可以表示日期,表示的日期是早于1899/12/30。

1.在vba中如果要将日期赋值给变量,可以使用如下的语句:

dDate = #5/1/2017#

其中用“#”井号分隔的字符,会被当做日期处理。

2.如果要获取当前的系统日期,可以使用如下的语句:

 dDate = Date

其中Date 函数返回当前的系统日期。

如果要修改电脑右下角显示的日期,可以使用Date语句。

3.如果要获取距离当期系统日期前一个月的日期,可以使用如下的语句:

  dDate = DateAdd("m", -1, Date)

其中DateAdd 函数既可以计算未来的日期也可以计算过去的日期,第二参数是正数是表示计算距离当期日期以后的日期,负数表示距离当前日期之前的日期。

4.如果要计算两个日期之间相隔的天数,可以使用DateDiff 函数

它的语法如下:

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

其中第一个参数interval表示,要计算两个日期之间的时间间隔单位。

比如选择”d”,表示计算两个日期之间间隔的天数。

比如选择”h”,表示计算两个日期之间间隔的小时数。

如以下代码所示:

Sub QQ1722187970()
    Dim d1 As Date
    Dim d2 As Date
    d1 = #11/1/2017#
    d2 = #11/2/2017#
    '获取两个日期之间间隔的天数
    MsgBox VBA.DateDiff("d", d1, d2)
    '获取两个日期之间间隔的小时数
    MsgBox VBA.DateDiff("h", d1, d2)
End Sub

5.如果要把字符型的日期字符串转换成vba可以识别的日期数据类型,可以使用DateValue函数,如下代码所示:

Sub QQ1722187970()
    Dim str1 As String
    str1 = "1987-08"
    MsgBox VBA.DateValue(str1)
End Sub

6.如果要获得日期代表星期几,可以使用Weekday函数。

它的语法如下:

Weekday(date, [firstdayofweek])

其中第一个参数为日期,第二个参数为指定哪天是一周的开始。

我们一般把周一当做一周的开始,故可以使用如下的代码判断一天具体是星期几:

Sub QQ1722187970()
    Dim dDate As Date
    dDate = Date
    i = Weekday(dDate, vbMonday)
    Select Case i
    Case 1
    Debug.Print "星期一"
    Case 2
    Debug.Print "星期二"
    Case 3
    Debug.Print "星期三"
    Case 4
    Debug.Print "星期四"
    Case 5
    Debug.Print "星期五"
    Case 6
    Debug.Print "星期六"
    Case 7
    Debug.Print "星期日"
    End Select
End Sub

7.如果要根据年、月、日 3个参数来获得具体的日期,可以使用DateSerial函数。

比如要返回2018年10月1日,可以使用如下的代码:

Sub QQ1722187970()
    Dim d1 As Date
    d1 = VBA.DateSerial(2018, 10, 1)
End Sub

再比如,如果要获取某个月份的最后一天,可以使用如下的代码:

Sub QQ1722187970()
    Dim d1 As Date
    d1 = #12/25/2018#
    Dim d2 As Date
    d2 = VBA.DateSerial(Year(d1), Month(d1) + 1, 1) - 1
    Debug.Print d2
End Sub
       

发表评论