標籤:包含 strong 時間差 min art 本質 日期轉換 運行 height
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 分
s Second 秒 Date1 ,Date2:計算期間的兩個日期運算式,若 >date1 較早,則兩個日期之間的期間結果為正值;若 >date2 較早, 則結果為負值。 firstweekofyear:設定每周第一天為星期幾, 若未設定表示為星期天。 >FW 的設定值如下: 0 使用 >API 的設定值。 1 星期天 2 星期一 3 星期二 4 星期三 5 星期四 6 星期五 7 星期六 firstweekofyear:設定一年的第一周, 若未設定則表示一月一日那一周為一年的第一周。 >FY 的設定值如下: 0 使用 >API 的設定值。 1 一月一日那一周為一年的第一周 2 至少包括四天的第一周為一年的第一周 3 包括七天的第一周為一年的第一周 樣本如下: 計算兩個日期的相隔月數. DiffMonthL = DateDiff("M", DATE_start, DATE_end)
[轉]【VBA研究】VBA中日期和時間相關的計算