作者:iamlaosong
VBA中取當(dāng)前日期的函數(shù)是Date,當(dāng)前時(shí)間的函數(shù)是Time,當(dāng)前日期和時(shí)間一起取是Now。日期轉(zhuǎn)換成年月日的函數(shù)分別是:Year、Month、Day,參數(shù)可以用Date或Now取出的值。時(shí)間轉(zhuǎn)換成時(shí)分秒的函數(shù)分別是:Hour、Minute、Second,參數(shù)可以用Time或Now取出的值。
例如:
MsgBox '當(dāng)前時(shí)間:' & Now & Chr(10) & _
'時(shí):' & Hour(Now) & Chr(10) & _
'分:' & Minute(Now) & Chr(10) & _
'秒:' & Second(Now)
MsgBox '當(dāng)前日期:' & Now & Chr(10) & _
'年:' & Year(Now) & Chr(10) & _
'月:' & Month(Now) & Chr(10) & _
'日:' & Day(Now)
1、日期轉(zhuǎn)換
很簡(jiǎn)單,直接用轉(zhuǎn)換函數(shù)就可以了,例如:CDate('2012-12-31')
2、日期之間的天數(shù)
用datediff函數(shù),注意,工作表單元格中用的函數(shù)名稱是datedif,少了一個(gè)f,而且參數(shù)順序也不一樣。例如:
dt = Cells(2, 1) ' 單元格內(nèi)容:2013-1-1 09:35:08
dd = DateDiff('D', CDate('2012-12-31'), dt)
其中的“D”也可以換成其他字母,比如“W”表示計(jì)算兩個(gè)日期之間周數(shù)。
日期之間的天數(shù)最簡(jiǎn)單的就是直接相減,如果日期中包含時(shí)間,則需要用datevalue轉(zhuǎn)換后才能計(jì)算,例如:
dt = Cells(2, 1) ' 單元格內(nèi)容:2013-1-1 09:35:08
dd = DateValue(dt) - CDate('2012-12-31')
實(shí)際上,DateValue函數(shù)的值就是被轉(zhuǎn)換日期距1900-1-1的天數(shù)加1,也就是說(shuō)日期1900-1-1的DateValue函數(shù)值就是1,在此日期之前的日期Excel是不認(rèn)的。
3、時(shí)間差計(jì)算
時(shí)間差計(jì)算一般用TimeValue()函數(shù)將時(shí)間轉(zhuǎn)換成時(shí)間值,然后計(jì)算。例如:
dt2 = Cells(2, 1) ' 單元格內(nèi)容:2013-1-1 09:35:08
dt3 = Cells(3, 1) ' 單元格內(nèi)容:2013-1-1 11:55:18
interval=TimeValue(dt3)-TimeValue(dt2)
TimeValue的值在0-1之間,表示0-24小時(shí),實(shí)際上就是當(dāng)前時(shí)間占24小時(shí)的比例。利用這個(gè)值可以干很多事,例如,用時(shí)間值乘以24再取整就是時(shí)間從0點(diǎn)開(kāi)始的小時(shí)值,乘以24*60再取整就是時(shí)間從0點(diǎn)開(kāi)始的分鐘值,乘以24*60*60就是時(shí)間從0點(diǎn)開(kāi)始的秒值。再比如,以10分鐘作為間隔,一天的間隔數(shù)就是144,那么任意一個(gè)時(shí)間值乘以24*6再取整就得到從0點(diǎn)開(kāi)始這個(gè)間隔的數(shù)量。
注意:TimeValue的數(shù)據(jù)類(lèi)型是Single,如果單元格中只輸入時(shí)間,也是給Single類(lèi)型變量賦值。例如:
tt = Cells(2, 1) ' 單元格內(nèi)容:12:00:00,賦值后tt的值是0.5
我們計(jì)算兩個(gè)時(shí)間差,也就是計(jì)算兩個(gè)浮點(diǎn)數(shù)之差,比如程序的運(yùn)行時(shí)間,將這個(gè)差值乘以24就是時(shí)間差以小時(shí)為單位,乘以24*60就是以分為單位,乘以24*60*60就是以秒為單位。
時(shí)間之間的也可以直接相減,但數(shù)據(jù)類(lèi)型必須正確,效果和使用TimeValue函數(shù)一樣。
4、關(guān)于取整
INT(12.56)=12:直接取整數(shù)部分,CInt(12.56)=13:小數(shù)部分四舍五入;
Ceiling(12.56,1)=13:向上進(jìn),只要有小數(shù),整數(shù)部分都加1,Ceiling(12.05,1)=13,當(dāng)然,這個(gè)函數(shù)功能比較強(qiáng)大,取整只是一個(gè)應(yīng)用;
round(12.56,0)=13:小數(shù)部分四舍五入,同樣,該函數(shù)有兩個(gè)參數(shù),取整只是一個(gè)應(yīng)用。
5、關(guān)于Round函數(shù)進(jìn)行四舍五入
Round函數(shù)進(jìn)行四舍五入并不是逢5就入,例如:round(0.5)=0、 round(1.5)=2 、 round(2.5)=2 、round(3.5)= 4 、round(4.5)=4 ,難到還分奇偶?答案是確實(shí)分奇偶,在VBA中Round函數(shù)是采用“銀行家舍入”,建議大家在VBA中慎重使用Round函數(shù)來(lái)四舍五入。什么是“銀行家舍入”呢,定義如下:
“四舍六入五考慮,五后非零就進(jìn)一,五后為零看奇偶,五前為偶應(yīng)舍去,五前為奇要進(jìn)一”。這個(gè)四舍五入法是一個(gè)國(guó)際標(biāo)準(zhǔn),大部分的編程軟件都使用的是這種方法,據(jù)說(shuō)國(guó)際上一般都是用這種方法的。
如果在Excel VBA中進(jìn)行四舍五入處理,也可以直接調(diào)用Excel工作表函數(shù),達(dá)到直接四舍五入的目的Application.Round(A,B)
聯(lián)系客服