【Excel VBA 基础编程】第39讲,常用Date类型数据处理函数,用对了效率翻倍

内容分享6小时前发布
0 0 0

VBA中的Date数据类型是处理日期和时间的专用类型,它虽然基础,但功能强大

【Excel VBA 基础编程】第39讲,常用Date类型数据处理函数,用对了效率翻倍

基本结构

VBA中的Date数据类型是处理日期和时间的核心,其设计巧妙地将日期和时间信息融合在一个数值中,它包括整数和小数两个部分,这使得日期可以直接进行加减运算

1.1 整数部分

整数部分的数据类型是Long,存储的是日期信息,表示从基准日期(1899年12月30日) 开始计算的天数:

基准日期定义为第0天

基准日期之后的每一天增加1

基准日期之前的每一天则用负数表示

基于这个系统,VBA的Date类型可以表示从公元100年1月1日到9999年12月31日之间的任何日期

1.2 小数部分

小数部分的数据类型是Double,存储的是时间信息, 表示从午夜(0:00:00) 开始流逝的时间占一天的比例,例如:

中午12:00:00 正好是一天的一半,对应小数值 0.5

下午6:00 (18:00) 是一天的0.75,对应小数值 0.75

更精确的时间可以换算,例如1秒 ≈ 0.000011574

【Excel VBA 基础编程】第39讲,常用Date类型数据处理函数,用对了效率翻倍

常用日期函数

VBA提供了一系列内置函数来简化日期操作,总结了几种最常用的,供大家选择使用

2.1 获取当前日期时间

Time函数主要用于获取当前系统时间,返回值是Date类型,格式依赖于系统区域设置,通常为 HH:MM:SS,例如:


    Dim currentTime As Date
    currentTime = Time ' 将当前系统时间赋值给变量
    Debug.Print "当前时间是: " & currentTime

结果显示:

【Excel VBA 基础编程】第39讲,常用Date类型数据处理函数,用对了效率翻倍

再比如还可以通过Format设置显示格式:


Debug.Print Format(Time, "hh:mm:ss AM/PM")

假如当前时间是13:24:11,执行以上格式设置后,显示结果:

【Excel VBA 基础编程】第39讲,常用Date类型数据处理函数,用对了效率翻倍

Date函数返回当前系统日期,使用也是非常简单,不需要任何参数,直接将它赋值给一个变量或用于表达式,例如:


    Dim currentDate As Date
    currentDate = Date
    Debug.Print "当前日期是: " & currentDate

结果显示如下:

【Excel VBA 基础编程】第39讲,常用Date类型数据处理函数,用对了效率翻倍

Now函数返回当前日期和时间,使用方法与time、date类似,例如:


    Dim currentDateTime As Date
    currentDateTime = Now
    Debug.Print "当前日期和时间是: " & currentDateTime

结果显示如下:

【Excel VBA 基础编程】第39讲,常用Date类型数据处理函数,用对了效率翻倍

2.2 日期合成与解析

DateSerial函数用于根据指定的年、月、日组合成一个日期值,其语法:


DateSerial(year, month, day)

year: 100 到 9999 之间的整数;month 和 day: 任何有效的数值表达式

示例:使用具体的年、月、日数值来构造一个明确的日期


    Dim MyDate As Date
    MyDate = DateSerial(1998, 2, 26)
    Debug.Print "指定日期是: " & MyDate

显示结果如下:

【Excel VBA 基础编程】第39讲,常用Date类型数据处理函数,用对了效率翻倍

DateSerial 作用远不在于此,它最强大的功能在于它允许使用数值表达式作为参数,从而轻松计算相对日期,并且函数会自动处理进位和借位,例如:


    Dim MyDate As Date
    MyDate = DateSerial(1990 + 10, 8 - 2, 1 - 1)
    Debug.Print "计算后的日期是: " & MyDate

计算后的结果:

【Excel VBA 基础编程】第39讲,常用Date类型数据处理函数,用对了效率翻倍

另外,类似的函数还有TimeSerial,用于根据指定的小时、分钟和秒生成一个时间值,并计算相对于某个基准时间点的时间。例如要计算中午12点之前6小时,再往前推15分钟的时间,可以用以下语句:


TimeSerial(12 - 6, -15, 0)

2.3 提取日期成分

相关的提取函数主要有:Year, Month, Day, Weekday, Hour, Minute, Second,它们的核心参数都是一个表示日期或时间的 Date 类型值(可以是日期文字、变量、表达式,或由 Date, Now, Time 等函数返回的系统日期时间),返回值都是 Integer,直接表示具体的数值

以Day函数为例,使用方式如下:


    Dim currentDate As Date
    currentDate = Date ' 当前日期为 2025-11-11(星期二)
    Debug.Print Year(currentDate)
    Debug.Print Month(currentDate)
    Debug.Print Day(currentDate)
    Debug.Print Weekday(currentDate)

运行后结果:

【Excel VBA 基础编程】第39讲,常用Date类型数据处理函数,用对了效率翻倍

备注:Weekday(currentDate)返回值为3,是因为系统默认一周从周日开始,周二即为第3天

2.4 日期计算

DateAdd 函数能让我们方便地对日期进行加减操作,应用参考如下代码:


    Dim baseDate As Date
    baseDate = #11/11/2025# ' 假设基准日期为2025年11月11日,星期二
    ' 计算10天后的日期
    Debug.Print "10天后是: " & DateAdd("d", 10, baseDate)
    ' 计算3个月前的那天
    Debug.Print "3个月前是: " & DateAdd("m", -3, baseDate)
    ' 计算2年后的同一天
    Debug.Print "2年后是: " & DateAdd("yyyy", 2, baseDate)

结果显示:

【Excel VBA 基础编程】第39讲,常用Date类型数据处理函数,用对了效率翻倍

2.5 计算日期差

DateDiff函数用于精确计算两个日期之间的差异,并支持年、月、日、周、时、分、秒等多种单位,举例进行说明:


    Dim date1 As Date, date2 As Date
    date1 = #11/11/2024#
    date2 = #9/10/2025#
    ' 计算差异
    Debug.Print "相差天数: " & DateDiff("d", date1, date2)
    Debug.Print "相差整月数: " & DateDiff("m", date1, date2)
    Debug.Print "相差整年数: " & DateDiff("yyyy", date1, date2)

计算后的结果如下:

【Excel VBA 基础编程】第39讲,常用Date类型数据处理函数,用对了效率翻倍

2.6 日期格式化

为了让输出更符合阅读习惯或专业要求,Format函数能将数据转换为特定格式的字符串,是处理数字、日期和字符串格式化的核心工具。以日期类型数据为例,加以说明:


Debug.Print Format(Now, "yyyy-mm-dd")

结果显示如下:

【Excel VBA 基础编程】第39讲,常用Date类型数据处理函数,用对了效率翻倍

再比如:


Debug.Print Format(Now, "yyyy年mm月dd")

显示结果:

【Excel VBA 基础编程】第39讲,常用Date类型数据处理函数,用对了效率翻倍

也可以针对时间进行格式设置,如下:


Debug.Print Format(Time, "hh:mm:ss AM/PM")

显示结果:

【Excel VBA 基础编程】第39讲,常用Date类型数据处理函数,用对了效率翻倍

2.7 字符串与日期转换

主要有CDate, DateValue, TimeValue3个函数

CDate 函数能转换包含日期、时间或两者兼有的字符串或数字。数值的整数部分会被转换为日期,小数部分则被转换为从午夜开始计算的时间,具体使用方式如下:


    Debug.Print CDate("October 11, 2025 3:45 PM")
    Debug.Print CDate(45800.15)

结果显示:

【Excel VBA 基础编程】第39讲,常用Date类型数据处理函数,用对了效率翻倍

DateValue 函数专注于提取日期部分。即使提供的字符串包含时间信息,它也会忽略时间,只返回日期,并将时间设置为午夜 (00:00:00)。举例说明:


Debug.Print DateValue("2025-11-11 14:30:00")

显示结果:

【Excel VBA 基础编程】第39讲,常用Date类型数据处理函数,用对了效率翻倍

TimeValue 函数与 DateValue 相反,它专注于提取时间部分。它会忽略字符串中的日期信息,只返回时间,并将日期设置为 VBA 的基准日期(1899年12月30日)。它支持12小时制和24小时制格式


Debug.Print TimeValue("1:10:13 PM")

显示结果如下:

【Excel VBA 基础编程】第39讲,常用Date类型数据处理函数,用对了效率翻倍

【Excel VBA 基础编程】第39讲,常用Date类型数据处理函数,用对了效率翻倍

结束语

今天的分享就到这里了,下期我们继续分享日期相关的操作细节及注意事项

公众号同时也在不间断地分享免费的编程案例,如果想学习更多的编程知识,无论是用来提升自动化办公效率还是想提升自我,都可以关注我的公众号“努力鸭是黑色”,解锁更多的VBA技能

© 版权声明

相关文章

暂无评论

none
暂无评论...