標題:
excel 時間是否可以相減
[打印本頁]
作者:
sghsgh1111
時間:
2015-3-9 23:02
標題:
excel 時間是否可以相減
想請問一下時間是否可以相減
跨小時和跨天, 相減下來會有問題,
想請問一下, 要如何修改
Sub TimeCal(ByVal RowNo)
Dim T1_H%
Dim T1_M%
Dim T2_H%
Dim T2_M%
Dim Diff_All!
Dim Diff_H%
Dim Diff_M!
Dim Str_T1 As Object
Dim Str_T2 As Object
Set Str_T1 = Sheets("list").Range("G" & RowNo) ' Str_T1 = 2015/3/9 06:49:59
Set Str_T2 = Sheets("list").Range("H" & RowNo) ' Str_T2 = 2015/3/1 05:41:39
T1_H = Hour(Str_T1)
T1_M = Minute(Str_T1)
T2_H = Hour(Str_T2)
T2_M = Minute(Str_T2)
Diff_H = Abs(T1_H - T2_H)
Diff_M = Abs(T1_M - T2_M) / 60
Diff_All = Diff_H + Diff_M
Sheets("list").Range("K" & RowNo).Value = Diff_All
End Sub
複製代碼
作者:
GBKEE
時間:
2015-3-10 08:13
本帖最後由 GBKEE 於 2015-3-10 08:31 編輯
回復
1#
sghsgh1111
試試看
Option Explicit
Sub Ex()
Dim a, b
a = #1/1/2105 5:40:50 AM#
b = #1/3/2105 2:10:05 AM#
With Range("A2")
.Value = (b - a) * 24
.NumberFormat = "0.00時"
End With
End Sub
複製代碼
作者:
stillfish00
時間:
2015-3-10 09:52
回復
1#
sghsgh1111
可以自己試試 DateDiff 函數
作者:
sghsgh1111
時間:
2015-3-10 23:56
謝謝指導, 之前也是這樣直接相減, 但減後都是 0.01xxx
但我看上面有在 X 24 , 這個意思不是很懂, 可以說明一下嗎
為什麼不是 X 60 ???
不過以這個算法來, 看起是ok
作者:
sghsgh1111
時間:
2015-3-11 00:15
可以再多問一個問題嗎
QueryTables 要如何滙入其他的 excel 檔案
這是錄置巨集所產生的程式碼, 但不了解這個語法, 可以解答嗎
這個巨集可以再簡化嗎
With ActiveSheet.QueryTables.Add(Connection:=Array( _
"OLEDB
rovider=Microsoft.Jet.OLEDB.4.0
assword="""";User ID=Admin;Data Source=I:\VBA.xls;Mode=Share Deny Write;Extended Prop" _
, _
"erties=""HDR=YES;"";Jet OLEDB:System database="""";Jet OLEDB:Registry Path="""";Jet OLEDB
atabase Password="""";Jet OLEDB:Engine Type=3" _
, _
"5;Jet OLEDB
atabase Locking Mode=0;Jet OLEDB:Global Partial Bulk Ops=2;Jet OLEDB:Global Bulk Transactions=1;Jet OLEDB:New Datab" _
, _
"ase Password="""";Jet OLEDB:Create System Database=False;Jet OLEDB:Encrypt Database=False;Jet OLEDB
on't Copy Locale on Compact=F" _
, "alse;Jet OLEDB:Compact Without Replica Repair=False;Jet OLEDB:SFP=False"), _
Destination:=Range("A2"))
.CommandType = xlCmdTable
.CommandText = Array("Status$")
.Name = "VBA_1"
.FieldNames = True
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = True
.RefreshOnFileOpen = False
.BackgroundQuery = True
.RefreshStyle = xlInsertDeleteCells
.SavePassword = False
.SaveData = True
.AdjustColumnWidth = True
.RefreshPeriod = 0
.PreserveColumnInfo = True
.SourceDataFile = "I:\VBA.xls"
.Refresh BackgroundQuery:=False
End With
作者:
GBKEE
時間:
2015-3-11 06:09
回復
5#
sghsgh1111
日期相減後的數字,整數是日數(1天有24小時),小數點後的數字是小時數(*60=分鐘數)
d1-d2 如=2.15 -> 2.15*24=51.6小時,2.15*24*60=3096分鐘,2.15*24*60*60=185760秒
對匯入外部資料不熟悉可參考 VBA的 QueryTable 物件說明
作者:
sghsgh1111
時間:
2015-3-11 22:47
感謝大大的說明
作者:
xmi
時間:
2015-3-13 21:46
回復 sghsgh1111
試試看
GBKEE 發表於 2015-3-10 08:13
請問如果是以CELL的INPUT應如何改?
如:
A1 A2 Result
13:00 15:00 2小時
22:00 03:00 5小時
作者:
sghsgh1111
時間:
2015-3-14 17:56
Sub ex()
Dim a, b, c
For c = 1 To 20
a = Range("A" & c + 1).Value
b = Range("B" & c + 1).Value
If a = "" Then Exit For
If b < a Then b = b + 1
With Cells(c + 1, 3)
.Value = (b - a) * 24
.NumberFormat = "0.00時"
End With
Next
End Sub
複製代碼
回復
8#
xmi
作者:
xmi
時間:
2015-3-20 21:06
回復
9#
sghsgh1111
謝謝你...
請問如果是以下形式又應如何改?
如:
A1 A2 Result
13:00 15:00 2小時
22:00 27:00 5小時
23:00 25:45 2.75小時
作者:
sghsgh1111
時間:
2015-3-20 23:29
不懂, 一天也才 24 小時, 為什麼會出現 27:00 and 25:45 ?
作者:
xmi
時間:
2015-3-26 19:35
回復
11#
sghsgh1111
你好, 25時即是零晨的1時(24+1) , 用以計overnight的時間.
作者:
xmi
時間:
2015-3-26 19:40
回復 xmi
sghsgh1111 發表於 2015-3-14 17:56
Sub ex()
Dim a, b, c
For c = 1 To 20
a = Range("A" & c + 1).Value
b = Range("B" & c + 1).Value
If a = "" Then Exit For
If b < a Then b = b + 1
With Cells(c + 1, 3)
.Value = (b - a) * 24
.NumberFormat = "0.00時"
End With
Next
End Sub
複製代碼
這個結果出錯了, 最尾兩個的結果應是2.45小時, 和2.12小才對. 請問錯在那裡?
Start End Duration
13:00 15:00 2.00時
22:00 3:00 5.00時
23:00 1:45 2.75時 <-- 應是2.45
23:00 1:12 2.20時 <-- 應是2.12
複製代碼
作者:
stillfish00
時間:
2015-3-26 19:52
回復
13#
xmi
你想錯了,23:00~23:30 是0.5小時 , 不是0.3小時
作者:
xmi
時間:
2015-3-26 22:45
回復
14#
stillfish00
對呀 23:00~23:30 是0.5小時 , 不是0.3小時, 我沒有想錯呀... 但樓上的結果就顯示錯誤...但我不懂修正:(
作者:
GBKEE
時間:
2015-3-27 06:27
回復
15#
xmi
45/60->=0.75
12/60->=0.2
Start End Duration
13:00 15:00 2.00時
22:00 3:00 5.00時
23:00 1:45 2.75時 <-- 不是2.45
23:00 1:12 2.20時 <-- 不是2.12
複製代碼
作者:
sghsgh1111
時間:
2015-3-28 23:09
xmi : 這個結果出錯了, 最尾兩個的結果應是2.45小時, 和2.12小才對. 請問錯在那裡?
ANS
時間不是十進位數,
一天是 24 小時
一小時是 60 分 (60進位數)
一分鐘是 60 秒 (60進位數)
因為你要算的是小時, 所以分母不可以用10 而是要用 60 來看
所以 GBKEE版主才會用這個算式給你看 ( 分=>小時)
45/60->=0.75
12/60->=0.2
但如果你硬要寫成 2.45小時, 和2.12
那你可能要改一下你的寫法 2:45 和 2:12, 這樣別人比較看的懂
作者:
xmi
時間:
2015-3-29 00:37
回復
17#
sghsgh1111
不好意思, 我還是不明白....:Q
作者:
xmi
時間:
2015-3-29 00:41
OH.... 原來如此 ... 那如果寫成2:45 和 2:12, 要如何? 我太笨了
作者:
GBKEE
時間:
2015-3-29 07:05
回復
19#
xmi
Option Explicit
Sub Ex()
Dim a, b, c
For c = 1 To 20
a = Range("A" & c + 1).Value
b = Range("B" & c + 1).Value
If a = "" Then Exit For
If b < a Then b = b + 1
With Cells(c + 1, 3)
.Value = (b - a)
.NumberFormatLocal = "hh.mm""時"""
'.NumberFormat = "0.00時"
End With
Next
End Sub
複製代碼
作者:
xmi
時間:
2015-3-30 19:53
回復
20#
GBKEE
太謝板主了...原來只改format ".NumberFormatLocal = "hh.mm""時"""" 顯示, 我現在真的明白了.
歡迎光臨 麻辣家族討論版版 (http://forum.twbts.com/)