[轉]【VBA研究】VBA中日期和時間相關的計算

來源:互聯網
上載者:User

標籤:包含   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中日期和時間相關的計算

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.