【VBA研究】VBA中日期和时间相关的计算
2014-01-18 22:01
246 查看
作者:iamlaosong
VBA中取当前日期的函数是Date,[b]当前时间的函数是Time,[/b]当前日期和时间一起取是Now。日期转换成年月日的函数分别是:Year、Month、Day,参数可以用Date或Now取出的值。时间转换成时分秒的函数分别是:Hour、Minute、Second,参数可以用Time或Now取出的值。
例如:
MsgBox "当前时间:" & Now & Chr(10) & _
"时:" & Hour(Now) & Chr(10) & _
"分:" & Minute(Now) & Chr(10) & _
"秒:" & Second(Now)
MsgBox "当前日期:" & Now & Chr(10) & _
"年:" & Year(Now) & Chr(10) & _
"月:" & Month(Now) & Chr(10) & _
"日:" & Day(Now)
1、日期转换
很简单,直接用转换函数就可以了,例如:CDate("2012-12-31")
2、日期之间的天数
用datediff函数,注意,工作表单元格中用的函数名称是datedif,少了一个f,而且参数顺序也不一样。例如:
dt = Cells(2, 1) ' 单元格内容:2013-1-1 09:35:08
dd = DateDiff("D", CDate("2012-12-31"), dt)
其中的“D”也可以换成其他字母,比如“W”表示计算两个日期之间周数。
日期之间的天数最简单的就是直接相减,如果日期中包含时间,则需要用datevalue转换后才能计算,例如:
dt = Cells(2, 1) ' 单元格内容:2013-1-1 09:35:08
dd = DateValue(dt) - CDate("2012-12-31")
实际上,DateValue函数的值就是被转换日期距1900-1-1的天数加1,也就是说日期1900-1-1的DateValue函数值就是1,在此日期之前的日期Excel是不认的。
3、时间差计算
时间差计算一般用TimeValue()函数将时间转换成时间值,然后计算。例如:
dt2 = Cells(2, 1) ' 单元格内容:2013-1-1 09:35:08
dt3 = Cells(3, 1) ' 单元格内容:2013-1-1 11:55:18
interval=TimeValue(dt3)-TimeValue(dt2)
TimeValue的值在0-1之间,表示0-24小时,实际上就是当前时间占24小时的比例。利用这个值可以干很多事,例如,用时间值乘以24再取整就是时间从0点开始的小时值,乘以24*60再取整就是时间从0点开始的分钟值,乘以24*60*60就是时间从0点开始的秒值。再比如,以10分钟作为间隔,一天的间隔数就是144,那么任意一个时间值乘以24*6再取整就得到从0点开始这个间隔的数量。
注意:TimeValue的数据类型是Single,如果单元格中只输入时间,也是给Single类型变量赋值。例如:
tt = Cells(2, 1) ' 单元格内容:12:00:00,赋值后tt的值是0.5
我们计算两个时间差,也就是计算两个浮点数之差,比如程序的运行时间,将这个差值乘以24就是时间差以小时为单位,乘以24*60就是以分为单位,乘以24*60*60就是以秒为单位。
时间之间的也可以直接相减,但数据类型必须正确,效果和使用TimeValue函数一样。
4、关于取整
INT(12.56)=12:直接取整数部分,CInt(12.56)=13:小数部分四舍五入;
Ceiling(12.56,1)=13:向上进,只要有小数,整数部分都加1,Ceiling(12.05,1)=13,当然,这个函数功能比较强大,取整只是一个应用;
round(12.56,0)=13:小数部分四舍五入,同样,该函数有两个参数,取整只是一个应用。
5、关于Round函数进行四舍五入
Round函数进行四舍五入并不是逢5就入,例如:round(0.5)=0、 round(1.5)=2 、 round(2.5)=2 、round(3.5)= 4 、round(4.5)=4 ,难到还分奇偶?答案是确实分奇偶,在VBA中Round函数是采用“银行家舍入”,建议大家在VBA中慎重使用Round函数来四舍五入。什么是“银行家舍入”呢,定义如下:
“四舍六入五考虑,五后非零就进一,五后为零看奇偶,五前为偶应舍去,五前为奇要进一”。这个四舍五入法是一个国际标准,大部分的编程软件都使用的是这种方法,据说国际上一般都是用这种方法的。
如果在Excel VBA中进行四舍五入处理,也可以直接调用Excel工作表函数,达到直接四舍五入的目的Application.Round(A,B)
VBA中取当前日期的函数是Date,[b]当前时间的函数是Time,[/b]当前日期和时间一起取是Now。日期转换成年月日的函数分别是:Year、Month、Day,参数可以用Date或Now取出的值。时间转换成时分秒的函数分别是:Hour、Minute、Second,参数可以用Time或Now取出的值。
例如:
MsgBox "当前时间:" & Now & Chr(10) & _
"时:" & Hour(Now) & Chr(10) & _
"分:" & Minute(Now) & Chr(10) & _
"秒:" & Second(Now)
MsgBox "当前日期:" & Now & Chr(10) & _
"年:" & Year(Now) & Chr(10) & _
"月:" & Month(Now) & Chr(10) & _
"日:" & Day(Now)
1、日期转换
很简单,直接用转换函数就可以了,例如:CDate("2012-12-31")
2、日期之间的天数
用datediff函数,注意,工作表单元格中用的函数名称是datedif,少了一个f,而且参数顺序也不一样。例如:
dt = Cells(2, 1) ' 单元格内容:2013-1-1 09:35:08
dd = DateDiff("D", CDate("2012-12-31"), dt)
其中的“D”也可以换成其他字母,比如“W”表示计算两个日期之间周数。
日期之间的天数最简单的就是直接相减,如果日期中包含时间,则需要用datevalue转换后才能计算,例如:
dt = Cells(2, 1) ' 单元格内容:2013-1-1 09:35:08
dd = DateValue(dt) - CDate("2012-12-31")
实际上,DateValue函数的值就是被转换日期距1900-1-1的天数加1,也就是说日期1900-1-1的DateValue函数值就是1,在此日期之前的日期Excel是不认的。
3、时间差计算
时间差计算一般用TimeValue()函数将时间转换成时间值,然后计算。例如:
dt2 = Cells(2, 1) ' 单元格内容:2013-1-1 09:35:08
dt3 = Cells(3, 1) ' 单元格内容:2013-1-1 11:55:18
interval=TimeValue(dt3)-TimeValue(dt2)
TimeValue的值在0-1之间,表示0-24小时,实际上就是当前时间占24小时的比例。利用这个值可以干很多事,例如,用时间值乘以24再取整就是时间从0点开始的小时值,乘以24*60再取整就是时间从0点开始的分钟值,乘以24*60*60就是时间从0点开始的秒值。再比如,以10分钟作为间隔,一天的间隔数就是144,那么任意一个时间值乘以24*6再取整就得到从0点开始这个间隔的数量。
注意:TimeValue的数据类型是Single,如果单元格中只输入时间,也是给Single类型变量赋值。例如:
tt = Cells(2, 1) ' 单元格内容:12:00:00,赋值后tt的值是0.5
我们计算两个时间差,也就是计算两个浮点数之差,比如程序的运行时间,将这个差值乘以24就是时间差以小时为单位,乘以24*60就是以分为单位,乘以24*60*60就是以秒为单位。
时间之间的也可以直接相减,但数据类型必须正确,效果和使用TimeValue函数一样。
4、关于取整
INT(12.56)=12:直接取整数部分,CInt(12.56)=13:小数部分四舍五入;
Ceiling(12.56,1)=13:向上进,只要有小数,整数部分都加1,Ceiling(12.05,1)=13,当然,这个函数功能比较强大,取整只是一个应用;
round(12.56,0)=13:小数部分四舍五入,同样,该函数有两个参数,取整只是一个应用。
5、关于Round函数进行四舍五入
Round函数进行四舍五入并不是逢5就入,例如:round(0.5)=0、 round(1.5)=2 、 round(2.5)=2 、round(3.5)= 4 、round(4.5)=4 ,难到还分奇偶?答案是确实分奇偶,在VBA中Round函数是采用“银行家舍入”,建议大家在VBA中慎重使用Round函数来四舍五入。什么是“银行家舍入”呢,定义如下:
“四舍六入五考虑,五后非零就进一,五后为零看奇偶,五前为偶应舍去,五前为奇要进一”。这个四舍五入法是一个国际标准,大部分的编程软件都使用的是这种方法,据说国际上一般都是用这种方法的。
如果在Excel VBA中进行四舍五入处理,也可以直接调用Excel工作表函数,达到直接四舍五入的目的Application.Round(A,B)
相关文章推荐
- 百度谷歌更新时间、日期等相关规律的研究~
- excel中计算两个日期的时间间隔
- 计算两个日期的时间间隔,精确到秒
- C/C++日期时间使用方法,struct tm, time_t, clock_t,计算循环所用时间
- 计算两个日期时间之间的时间差:28小时38分钟
- JS日期比较大小 给定时间和持续时间计算最终时间
- Oracle一些日期时间的计算
- 计算两个日期的时间间隔
- 数据在链路层传播相关时间计算
- Atitit.基于时间戳的农历日历历法日期计算
- POJ3751 时间日期格式转换【日期计算】
- ios开发之 时间日期差计算
- DB2数据库时间日期相关SQL函数
- joda.time 处理时间--计算2个日期之间的天数
- java 时间 日期计算
- 得到下一秒的日期和时间并计算是第几天
- VBA之计算两个日期之间相差几点几个月
- ORACLE时间日期星期(SYSDATE)相关处理
- Java常用类库——时间处理类Date、Calendar、GregorianCalendar以及日期格式化和计算
- Oracle 日期周详解以及周开始结束时间计算