日期基本处理

定义一个日期

1
2
3
4
v_date = Date  ' 今天,格式为:yyyy-MM-dd
v_time = Now ' 此时,格式为:yyyy-MM-dd HH:mm:ss
v_date2 = #"2021-06-01" '指定时间
v_date3 = CDate("2021-06-01")

日期格式化

1
2
3
4
5
' 2022-01-28
Format(Date, "yyyy-MM-dd")
' 获取当天的年周数,格式为长格式,例如第一周显示为01
v_week_num = WorksheetFunction.WeekNum(Date, vbMonday)
Format(v_week_num, "00")

日期处理

  • 对日期进行处理,得到想要的目标日期
1
2
3
4
5
6
7
8
9
10
11
12
' 今天
today = Date
' 昨天
yesterday = today - 1
' 本周一 注:在Excel中,周日是一周的第一天
monday = today - Weekday(today) + 2
' 本月第一天
monthFirstDay = lastMonday - Day(lastMonday) + 1
' 本月最后一天
targetDate = DateSerial(Year(targetDate), Month(targetDate) + 1, 0)
' 今天是一年的第几周,以周一作为本周的第一天
weekNum = WorksheetFunction.weekNum(today, vbMonday)

日期比较

  • 日期是可以直接比较和相减的,相减的间隔为时间的间隔。
1
2
3
4
5
6
7
' 今天
today = Date
' 昨天
yesterday = today - 1
' 日期之间也可以比较和加减
today > yesterday ' True
today - yesterday ' 1 ,相隔1一天

计算时间间隔

  • DateDiff 函数可以用于计算时间的间隔。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
Sub tt1()
Dim d1, d2 As Date
d1 = #11/21/2021#
d2 = #12/1/2022#
MsgBox("相隔" & (d2 - d1) & "天")
MsgBox("相隔" & DateDiff("d", d1, d2) & "天")
MsgBox("相隔" & DateDiff("m", d1, d2) & "月")
MsgBox("相隔" & DateDiff("yyyy", d1, d2) & "年")
MsgBox("相隔" & DateDiff("q", d1, d2) & "季")
MsgBox("相隔" & DateDiff("w", d1, d2) & "周")
MsgBox("相隔" & DateDiff("h", d1, d2) & "小时")
MsgBox("相隔" & DateDiff("n", d1, d2) & "分种")
MsgBox("相隔" & DateDiff("s", d1, d2) & "秒")
End Sub

计算耗时

1
2
3
4
5
6
7
startTime = Time

' 业务数据处理
MsgBox ("运行此流程共耗时:" & DateDiff("s", startTime, Time) & "秒")

' 后台打印使用的时间
Debug.Print DateDiff("s", startTime, Time) & "秒"

vba日期和时间函数汇总和代码

第一,vba日期和时间函数的基本用法

Excel中vba日期函数和时间函数分别是DATE和TIME。
VBA提供了三个无参数函数:Date、Time、Now,分别返回当前电脑系统的日期、时间、日期+时间。
下面的代码我们以三个消息框来结合日期和时间函数,分别提示当前的日期、时间。

1
2
3
4
5
Sub vba时间和日期函数()
MsgBox Date
MsgBox Time
MsgBox Now
End Sub

第二,使用vba日期和时间函数修改系统信息

  • 下面这段代码将电脑右下角的日期和时间修改为2011年1月1日21:50:00。
    1
    2
    3
    4
    Sub 修改时间和日期()
    Time = "21:50:00"
    Date = "2011年1月1日"
    End Sub

第三,用消息框返回当前日期的年、月、日和当前时间的时、分、秒

1
2
3
4
5
6
7
8
9
10
11
12
Sub SmpYearHour()
'以对话框显示当前日期的年、月、日
MsgBox "当前日期:" & Date & Chr(10) & _
"年:" & Year(Date) & Chr(10) & _
"月:" & Month(Date) & Chr(10) & _
"日:" & Day(Date)
'以对话框显示当前时间的时、分、秒
MsgBox "当前时间:" & Time & Chr(10) & _
"时:" & Hour(Time) & Chr(10) & _
"分:" & Minute(Time) & Chr(10) & _
"秒:" & Second(Time)
End Sub

第四,其余的vba日期和时间函数列表

| 函数 | 说明 |
| —- | —- |
| Timer | 返回一个 Single,代表从午夜开始到现在经过的秒数。 |
| TimeSerial(hour, minute, second) | 返回一个 Variant (Date),包含具有具体时、分、秒的时间。 |
| DateDiff(interval, date1, date2[, firstdayofweek[, firstweekofyear]]) | 返回 Variant (Long) 的值,表示两个指定日期间的时间间隔数目。 |
| Second(time) | 返回一个 Variant (Integer),其值为 0 到 59 之间的整数,表示一分钟之中的某个秒。 |
| Minute(time) | 返回一个 Variant (Integer),其值为 0 到 59 之间的整数,表示一小时中的某分钟。 |
| Hour(time) | 返回一个 Variant (Integer),其值为 0 到 23 之间的整数,表示一天之中的某一钟点。 |
| Day(date) | 返回一个 Variant (Integer),其值为 1 到 31 之间的整数,表示一个月中的某一日。 |
| Month(date) | 返回一个 Variant (Integer),其值为 1 到 12 之间的整数,表示一年中的某月。 |
| Year(date) | 返回 Variant (Integer),包含表示年份的整数。 |
| Weekday(date, [firstdayofweek]) | 返回一个 Variant (Integer),包含一个整数,代表某个日期是星期几 |


相关链接

  1. VBA实战(10) - 日期处理汇总
  2. vba日期和时间函数汇总和代码

=================我是分割线=================

欢迎到公众号来唠嗑: