作者:iamlaosong
http://blog.csdn.net/iamlaosong/article/details/18458253
VBA中取當前日期的函數是Date,當前時間的函數是Time,當前日期和時間一起取是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,而且參數順序也不一樣(=DATEDIF(A2,B2,"d"))。例如:
dt = Cells(2, 1) ' 單元格內容:2013-1-1 09:35:08
dd = DateDiff("D", CDate("2012-12-31"), dt)
其中的“D”也可以換成其他字母,以便計算其它時間差(年月日時分秒等),比如“W”表示計算兩個日期之間周數,“H”表示計算兩個日期之間的小時數數,具體見本文最后的附錄。
日期之間的天數最簡單的就是直接相減,如果日期中包含時間,相減是兩個日期時間值相減,結果是個浮點數(時間差),計算天數需要用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)
===============================
附:DateDiff 函數用法
DateDiff (interval, Date1 , Date2[,firstweekofyear[,firstweekofyear]]) 返回一個Variant(long) 的值,表示兩個指定日期間的時間間隔數目 interval:設定兩個日期之間的期間計算之單位。譬如 >interval="m" 表示計算的單位為月。 >interval 的設定值如: yyyy > Year 年 q Quarter 季 m Month 月 d Day 日 w Weekday 星期 h Hour 時 n Minute 分