返回列表 上一主題 發帖

excel 時間是否可以相減

excel 時間是否可以相減

想請問一下時間是否可以相減
跨小時和跨天, 相減下來會有問題,
想請問一下, 要如何修改
  1. Sub TimeCal(ByVal RowNo)
  2.     Dim T1_H%
  3.     Dim T1_M%
  4.     Dim T2_H%
  5.     Dim T2_M%
  6.     Dim Diff_All!
  7.     Dim Diff_H%
  8.     Dim Diff_M!
  9.     Dim Str_T1 As Object
  10.     Dim Str_T2 As Object
  11.    
  12.     Set Str_T1 = Sheets("list").Range("G" & RowNo)    ' Str_T1 = 2015/3/9  06:49:59
  13.     Set Str_T2 = Sheets("list").Range("H" & RowNo)    ' Str_T2 = 2015/3/1  05:41:39
  14.    
  15.     T1_H = Hour(Str_T1)
  16.     T1_M = Minute(Str_T1)
  17.     T2_H = Hour(Str_T2)
  18.     T2_M = Minute(Str_T2)

  19.     Diff_H = Abs(T1_H - T2_H)
  20.     Diff_M = Abs(T1_M - T2_M) / 60
  21.     Diff_All = Diff_H + Diff_M
  22.    
  23.     Sheets("list").Range("K" & RowNo).Value = Diff_All

  24. End Sub
複製代碼

謝謝指導, 之前也是這樣直接相減, 但減後都是 0.01xxx
但我看上面有在 X 24 , 這個意思不是很懂, 可以說明一下嗎
為什麼不是 X 60 ???
不過以這個算法來, 看起是ok

TOP

可以再多問一個問題嗎

QueryTables 要如何滙入其他的 excel 檔案
這是錄置巨集所產生的程式碼, 但不了解這個語法, 可以解答嗎
  這個巨集可以再簡化嗎  

  With ActiveSheet.QueryTables.Add(Connection:=Array( _
        "OLEDBrovider=Microsoft.Jet.OLEDB.4.0assword="""";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 OLEDBatabase Password="""";Jet OLEDB:Engine Type=3" _
        , _
        "5;Jet OLEDBatabase 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 OLEDBon'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

TOP

感謝大大的說明

TOP

  1. Sub ex()
  2.     Dim a, b, c

  3.     For c = 1 To 20
  4.         a = Range("A" & c + 1).Value
  5.         b = Range("B" & c + 1).Value
  6.         If a = "" Then Exit For
  7.         If b < a Then b = b + 1
  8.         With Cells(c + 1, 3)
  9.             .Value = (b - a) * 24
  10.             .NumberFormat = "0.00時"
  11.         End With
  12.     Next
  13. End Sub
複製代碼
回復 8# xmi

TOP

不懂, 一天也才 24 小時, 為什麼會出現 27:00 and 25:45 ?

TOP

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, 這樣別人比較看的懂

TOP

        靜思自在 : 得理要饒人,理直要氣和。
返回列表 上一主題