Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
查看: 2518|回复: 0

跟着校长学VBA之第43集:时间与日期函数

[复制链接]
发表于 2013-2-2 23:58 | 显示全部楼层 |阅读模式
本帖最后由 hwc2ycy 于 2013-2-3 13:59 编辑

一、返回日期
1. 返回当前日期、时间(指本机系统设置的日期和时间)
Date,当前日期
Time,当前时间
Now,当前日期和时间
注意另外有个Date语句,用来设置系统日期。

2.格式化显示日期
通过format函数,格式定义和工作表中TEXT函数用的日期格式差不多。

3.根据年月日返回日期
DateSerial(year, month, day)
注意Datevaue函数

year 参数的数值若介于 0 与 29 之间,则将其解释为 2000–2029年,若介于 30 和 99 之间则解释为1930–1999年。而对所有其它 year 参数,则请用四位数值表示(如 1800)。
当任何一个参数的取值超出可接受的范围时,它会适时进位到下一个较大的时间单位。例如,如果指定了 35 天,则这个天数被解释成一个月加上多出来的日数,多出来的日数将由其年份与月份来决定。如果一个参数值超出 -32,768 到 32,767 的范围,就会导致错误发生。

4.根据小时分钟返回时间
TimeSerial(hour, minute, second)
注意Timevalue函数

为了指定一个时刻,如 11:59:59,TimeSerial 的参数取值应在正常范围内;也就是说,钟点应介于 0-23 之间,而分钟与秒应介于 0-59 之间。但是,当一个数值表达式表示某时刻之前或其后的时、分钟或秒数时,也可以为每个使用这个数值表达式的参数指定相对时间。以下示例中使用了表达式代替绝对时间数。TimeSerial 函数返回中午之前六小时 (12 - 6) 又十五分钟 (-15) 的时间,即 5:45:00 A.M.
TimeSerial(12 - 6, -15, 0)
当任何一个参数的取值超出正常范围时,它会适时进位到下一个较大的时间单位。例如,如果指定了 75(75 分钟),则这个时间被解释成一小时又十五分。如果一个参数值超出 -32,768 到 32,767 的范围,就会导致错误发生。如果三个参数指定的时间会使日期超出可接受的日期范围,则亦会导致错误发生。

二、日期和时间计算
1.计算两个日期相隔天数、月数、年数、小时、分钟、秒
DateDiff(interval, date1, date2[, firstdayofweek[, firstweekofyear]])
interval必要。字符串表达式,表示用来计算date1date2 的时间差的时间间隔
Date1□date2必要;Variant (Date)。计算中要用到的两个日期。
Firstdayofweek可选。指定一个星期的第一天的常数。如果未予指定,则以星期日为第一天。
firstweekofyear可选。指定一年的第一周的常数。如果未予指定,则以包含 1 月 1 日的星期为第一周。

interval 参数的设定值如下:
设置描述
yyyy
q
m
y一年的日数
d
w一周的日数
ww
h
n分钟
s

firstdayofweek 参数的设定值如下:
常数描述
vbUseSystem0使用 NLS API 设置。
vbSunday1星期日(缺省值)
vbMonday2星期一
vbTuesday3星期二
vbWednesday4星期三
vbThursday5星期四
vbFriday6星期五
vbSaturday7星期六

firstdayofyear 参数的设定值如下:
常数描述
vbUseSystem0用 NLS API 设置。
vbFirstJan11从包含 1 月 1 日的星期开始(缺省值)。
vbFirstFourDays2从第一个其大半个星期在新的一年的一周开始。
vbFirstFullWeek3从第一个无跨年度的星期开始。

DateDiff 函数可用来决定两个日期之间所指定的时间间隔数目。例如,可以使用 DateDiff 来计算两个日期之间相隔几日,或计算从今天起到年底还有多少个星期。
为了计算 date1date2 相差的日数,可以使用“一年的日数”(y) 或“日”(d)。当 interval 是“一周的日数”(w) 时,DateDiff 返回两日期间的周数。如果 date1 是星期一,DateDiff 计算到 date2 为止的星期一的个数。这个数包含 date2 但不包含 date1。不过,如果 interval 是“周”(ww),则 DateDiff 函数返回两日期间的“日历周”数。由计算 date1date2 之间星期日的个数而得。如果 date2 刚好是星期日,则 date2 也会被加进 DateDiff 的计数结果中;但不论 date1 是否为星期日,都不将它算进去。
如果 date1 date2 来得晚,则 DateDiff 函数的返回值为负数。
firstdayofweek 参数会影响使用时间间隔符号 “W” 或 “WW” 计算的结果。
如果 date1 date2 是日期文字,则指定的年份成为该日期的固定部分。但是,如果 date1 date2 用双引号 (" ") 括起来,且年份略而不提,则在每次计算表达式 date1 date2 时,当前年份都会插入到代码之中。这样就可以书写适用于不同年份的程序代码。
在计算 12 月 31 日和来年的 1 月 1 日的年份差时,DateDiff 返回 1 表示相差一个年份,虽然实际上只相差一天而已。
  1. Sub tt1()
  2.     Dim d1, d2 As Date
  3.     d1 = #11/21/2011#
  4.     d2 = #12/1/2011#
  5.     Debug.Print "相隔" & (d2 - d1) & "天"
  6.     Debug.Print "相隔" & DateDiff("d", d1, d2) & "天"
  7.     Debug.Print "相隔" & DateDiff("m", d1, d2) & "月"
  8.     Debug.Print "相隔" & DateDiff("yyyy", d1, d2) & "年"
  9.     Debug.Print "相隔" & DateDiff("q", d1, d2) & "季"
  10.     Debug.Print "相隔" & DateDiff("w", d1, d2) & "周"
  11.     Debug.Print "相隔" & DateDiff("h", d1, d2) & "小时"
  12.     Debug.Print "相隔" & DateDiff("n", d1, d2) & "分种"
  13.     Debug.Print "相隔" & DateDiff("s", d1, d2) & "秒"
  14. End Sub

  15. Sub tt2()    '计算两时间的差
  16.     Dim t, x
  17.     t = Timer
  18.     For x = 1 To 10000000
  19.     Next x
  20.     Debug.Print Timer - t
  21. End Sub
复制代码
2.日期时间加减
DateAdd(interval, number, date),返回包含一个日期的 Variant (Date),这一日期还加上了一段时间间隔。
部分描述
interval必要。字符串表达式,是所要加上去的时间间隔。
number必要。数值表达式,是要加上的时间间隔的数目。其数值可以为正数(得到未来的日期),也可以为负数(得到过去的日期)。
date必要。Variant (Date) 或表示日期的文字,这一日期还加上了时间间隔。

interval 参数具有以下设定值:
设置描述
yyyy
q
m
y一年的日数
d
w一周的日数
ww
h
n分钟
s
说明可以使用 DateAdd 函数对日期加上或减去指定的时间间隔。例如,可以用 DateAdd 来计算距今天为三十天的日期;或者计算距现在为 45 分钟的时间。为了对 date 加上“日”,可以使用“一年的日数” (“y”),“日” (”d”) 或“一周的日数” (”w”)。DateAdd 函数将返回有效日期。在以下实例中将 1 月31 日加上一个月:DateAdd(m, 1, 31-Jan-95)上例中,DateAdd 返回 1995 年 2 月 28 日,而不是 1995 年 2 月 31 日。如果 date 是 1996 年 1 月 31 日,则由于 1996 年是闰年,返回值是 1996 年 2 月 29 日。如果计算的日期超前 100 年(减去的年度超过 date 中的年份),就会导致错误发生。如果 number 不是一个 Long 值,则在计算时取最接近的整数值来计算。注意   DateAdd 返回值的格式由 Control Panel设置决定,而不是由传递到date 参数的格式决定。
  1. Sub tt3()
  2.     Dim d1, d2 As Date
  3.     d1 = "2001-10-1 00:00:00"
  4.     Debug.Print VBA.DateAdd("d", 10, d1)    '加上10天
  5.     Debug.Print VBA.DateAdd("m", 10, d1)    '加上10个月
  6.     Debug.Print VBA.DateAdd("yyyy", 10, d1)    '加上10年
  7.     Debug.Print VBA.DateAdd("yyyy", -10, d1)    '减少10年
  8.     Debug.Print VBA.DateAdd("h", 10, d1)    '加上10小时后的时间
  9.     Debug.Print VBA.DateAdd("n", 10, d1)    '加上10分种后的时间
  10.     Debug.Print VBA.DateAdd("s", 10, d1)    '加上10秒后的时间
  11. End Sub
复制代码
三、定时器
Application.OnTime 方法
安排一个过程在将来的特定时间运行(既可以是具体指定的某个时间,也可以是指定的一段时间之后)。
参数
名称必选/可选数据类型说明
EarliestTime必选Variant希望此过程运行的时间。
Procedure必选String要运行的过程名。
LatestTime可选Variant过程开始运行的最晚时间。例如,如果 LatestTime 参数设置为 EarliestTime + 30,且当到达 EarliestTime 时间时,由于其他过程处于运行状态而导致 Microsoft Excel 不能处于“就绪”、“复制”、“剪切”或“查找”模式,则 Microsoft Excel 将等待 30 秒让第一个过程先完成。如果 Microsoft Excel 不能在 30 秒内回到“就绪”模式,则不运行此过程。如果省略该参数,Microsoft Excel 将一直等待到可以运行该过程为止。
Schedule可选Variant如果为 True,则预定一个新的 OnTime 过程。如果为 False,则清除先前设置的过程。默认值为 True

说明

使用 Now + TimeValue(time) 可安排经过一段时间(从现在开始计时)之后运行某个过程。使用 TimeValue(time) 可安排某个过程只运行指定的时间。
  1. '本示例设置从现在开始 15 秒后运行 my_Procedure。
  2. Application.OnTime Now + TimeValue("00:00:15"), "my_Procedure"

  3. '本示例设置 my_Procedure 在下午 5 点开始运行。
  4. Application.OnTime TimeValue("17:00:00"), "my_Procedure"

  5. '本示例撤消前一个示例对 OnTime 的设置。
  6. Application.OnTime EarliestTime:=TimeValue("17:00:00"), _
  7.                    Procedure:="my_Procedure", Schedule:=False
复制代码
excel精英培训的微信平台,每天都会发送excel学习教程和资料。扫一扫明天就可以收到新教程
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|Excel精英培训 ( 豫ICP备11015029号 )

GMT+8, 2024-5-19 08:32 , Processed in 0.153264 second(s), 5 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表