学习日志
全民一起VBA提高篇
第四回 日期类型穿梭岁月 时间函数算尽光阴
相关知识点
一、获取当前系统时间
1、 date() 或date 可获得日期 如 2019/2/1
2、 time() 或time 可获得时间 如 16:21:30
3、 now() 或now 如 2019/2/1 16:21:30
二、时间数据解析
year()、month()、day()、weekday()、hour()、minute()、second()
三、时间计算
1、计算两个日期数据之间的时间差
datediff(单位,起始时间,截止时间)
单位:
"yyyy"、"m"、"q"季度、"d"日、"h"小时、"n"分钟、"s"秒
"w" 周(按实际天数计算,不足7天为0周)
"ww" 周(按跨越周日数计算,只要相隔一个周日即为一周)
如:datediff("yyyy",#8/3/1996#,#3/5/2003#)
2、计算一个时间点加上指定时间后的新的时间点
dateadd(单位,跨越长度,起始时间)
单位:
"yyyy"、"m"、"q"季度、"d"日、"h"小时、"n"分钟、"s"秒
"w" 周内第几日,一般情况下运行结果与使用 d 相同
"ww" 周
如:dateadd("d",38,#3/5/2003#) 跨越时间可正可负
基本示例
option Explicit
sub datedemo()
dim d as date,a as long
d=#1/12/2019 12:20:25#
a=year(d)
msgbox a
End sub
'vba 中date的表示范围 100年1月1日0点0分0秒-9999年12月31日23点59分59秒
提取日期
Option Explicit
Sub deadmonth()
Dim d As Date, i&
i = 3
Do While Trim(Cells(i, 4)) <> ""
d = Cells(i, 4)
Cells(i, 5) = Month(d)
i = i + 1
Loop
End Sub
'或者
Sub deadmonth2()
Dim i&
i = 3
Do While Trim(Cells(i, 4)) <> ""
Cells(i, 5) = Month(Cells(i, 4))
i = i + 1
Loop
End Sub
日期数据本质是 double类型的数字
Option Explicit
Sub datetest()
Dim d As Date
d = 1 '0代表1899年12月30日0时0分0秒
msgbox d '1意为过了一天 即1899年12月31日0时0分0秒
End Sub
未来一周生日提醒
Option Explicit
Sub checkbrithday()
Dim ld As Date, today As Date, i%, j%, wb As Worksheet
today = Date
Sheets.Add(after:=Sheets("4")).name = "未来一周生日提醒"
Set wb = ActiveSheet
For j = 0 To 6
ld = today + j
i = 3
Do While Trim(Cells(i, 1)) <> ""
If Month(ld) = Month(Cells(i, 2)) And Day(ld) = Day(Cells(i, 2)) Then
MsgBox ld & "是" & Cells(i, 1) & "的生日"
wb.Cells(i, j + 1) = Cells(i, 1)
End If
i = i + 1
Loop
wb.Cells(2, j + 1) = "未来" & j & "天"
Next j
End Sub