Board logo

標題: [發問] VBA計算執行時間顯示為x分x秒 [打印本頁]

作者: msmplay    時間: 2018-3-9 20:35     標題: VBA計算執行時間顯示為x分x秒

請問網大們,以下是我在網路上找到可以計算程式執行運算時間的程式碼但只能顯示秒數,該如何顯示為x分x秒呢?
例如:4.25448秒 希望呈現為 0分4秒
           69.54254秒 希望呈現為 1分9秒
-------------------------------------------------------
dim t0
t0=timer
xxxxxxxxxxxxx(程式碼)
msgbox "執行時間: " & timer-t0 & " 秒"
-------------------------------------------------------
作者: Scott090    時間: 2018-3-10 07:19

回復 1# msmplay

試試看
dim cc as date, m%, s%
cc = cdate((timer-t0)/86400)
m = Minute(cc)
s = second(cc)
msgbox "執行時間: " & m & " 分 " &  s & " 秒"
作者: Scott090    時間: 2018-3-10 08:53

回復 1# msmplay


    dim m%,s%
s=int(timer-t0)
m=s\60
s=s-m*60
msgbox "執行時間: " & m & " 分 " &  s & " 秒"
作者: Scott090    時間: 2018-3-11 06:43

回復 1# msmplay

"\" 整數除 取整數商
"mod" 除法取整數餘數

     dim s%
s=int(timer-t0)
msgbox "執行時間: " & s\60 & " 分 " &  s mod 60 & " 秒"
作者: msmplay    時間: 2018-3-12 10:21

回復 4# Scott090

S大~~~非常感謝幫忙,不過以上3種方式我今天之下都是顯示為0分0秒
我是win7 office2007版本,可以再請教一下是哪裡的問題ㄇ
作者: msmplay    時間: 2018-3-12 10:53

回復 4# Scott090

S大~補充一下,我是用以下3段程式碼測試的dim cc as date, m%, s%
dim t0
t0=timer
cc = cdate((timer-t0)/86400)
m = Minute(cc)
s = second(cc)
msgbox "執行時間: " & m & " 分 " &  s & " 秒"



dim t0
dim m%,s%
t0=timer
s=int(timer-t0)
m=s\60
s=s-m*60
xxxxxxxxxxxxx(程式碼)
msgbox "執行時間: " & m & " 分 " &  s & " 秒"



dim s%
dim t0
t0=timer
s=int(timer-t0)
msgbox "執行時間: " & s\60 & " 分 " &  s mod 60 & " 秒"
作者: jackyq    時間: 2018-3-12 14:00

t0 = Timer

'========== your code begin
................
'========== your code end

t0 = Timer - t0

msgbox t0 \ 60 & "分  " & (t0 - t0 \ 60 * 60) & "秒"
作者: msmplay    時間: 2018-3-12 15:29

回復 7# jackyq


   j大~~~~感謝,但測試ㄧ程式跑完結果為:0分4.1953125秒。秒數似乎還是沒辦法不要有小數點
作者: Scott090    時間: 2018-3-12 15:42

回復 6# msmplay


    就像 7樓一樣,把我給的程式碼片段插進要執行的程式碼內 試試看
sub test()
   dim s%
   dim t0
    t0=timer

   '要執行的程式  
   ' ================
    xxxxxxxxxxxxxx
   '=================

    s=int(timer-t0)
    msgbox "執行時間: " & s\60 & " 分 " &  s mod 60 & " 秒"

end sub
作者: rouber590324    時間: 2018-3-12 15:53

+ Round 試看看

MsgBox t0 \ 60 & "分  " & Round((t0 - t0 \ 60 * 60), 0) & "秒"
作者: jcchiang    時間: 2018-3-12 16:53

回復 1# msmplay
Sub ex()
t0 = Time()
MsgBox "執行時間" & Format(CDate(Time()) - CDate(t0), "hh" & "時" & "mm" & "分" & "ss" & "秒")
End Sub
作者: jackyq    時間: 2018-3-12 18:24

本帖最後由 jackyq 於 2018-3-12 18:33 編輯
回復  jackyq


   j大~~~~感謝,但測試ㄧ程式跑完結果為:0分4.1953125秒。秒數似乎還是沒辦法不要有小 ...
msmplay 發表於 2018-3-12 15:29



dim m%,s%
t0=timer  
s=int(timer-t0)
m=s\60
s=s-m*60
xxxxxxxxxxxxx(程式碼) '-------> Code 放這裡是錯誤的, 你一定永遠得到 0
msgbox "執行時間: " & m & " 分 " &  s & " 秒"

我一開始是在懷疑你所謂的都是 0
是如上原因 --> 你把你的 code 放錯位置了 

但是我想了想 , 你不可能那麼烏龍 , 會放錯位置
所以通通都是0的原因,  只剩唯1 可能 , 就是你的 code 雖然位置放對, 但是你的 code 耗時其實極短
短到連0.1 秒都不到  , 當然 最終整數秒結果還是 = 0 

例如
t0=timer  
For w= 1 to 1  ' ----> code 位置放對
Next
msgbox timer  - t0 '---> 我保證 "整數秒" 永遠 = 0

所以我才幫你保留下秒數到 小數點
'================
但是現在你卻說顯示 4.1953125秒 這已表明你先前之所以都得到0 , 確實是因為把 code 放錯位置了
作者: msmplay    時間: 2018-3-12 18:56

回復 10# rouber590324
回復 7# jackyq
回復 4# Scott090


r大~~j大~~S大~~~抱歉抱歉,是我的錯,是我誤把程式碼放錯地方了,難怪執行起來都沒成功

目前使用三位大師的代碼測試都正常可以跑出 x 分 x秒了!!!真的非常感謝你們熱心又無私的幫忙喔~~~~~~~~再次感謝
作者: msmplay    時間: 2018-3-12 18:58

回復 12# jackyq


    結果你突破盲腸了..............我真的那麼烏龍............
作者: Scott090    時間: 2018-3-13 06:50

回復 14# msmplay


    round() 函數會四捨五入,不符合原始需求 (完全捨棄小數部分)
作者: baomin    時間: 2018-3-13 10:36

回復 1# msmplay
依jackyq大的程式碼
t0 = Timer
'========== your code begin
................
'========== your code end
t0 = Timer - t0
msgbox t0 \ 60 & "分  " & (t0 - t0 \ 60 * 60) & "秒"
改成MsgBox t0 \ 60 & "分  " & Round(t0 - (t0 \ 60) * 60, 0) & "秒"
就可達到




歡迎光臨 麻辣家族討論版版 (http://forum.twbts.com/)