2011-08-09 3 views
3

私は作業時間を計算するためにタイムシート上のイン/アウト時間の違いを見つけようとしています。Excel Time Forumula

私は、次のデータを持っている:

----A----------B-----------C----------D------- 
----Time In----Time Out----Time In----Time Out 
1---11:15 AM---12:05 PM----1:05 PM----1:10 PM 
2---1:05 PM----1:20 PM-----2:20 PM----4:00 PM 
3---11:35 PM---12:05 AM----1:05 AM----1:30 AM 
4---1:20 PM----2:20 PM------------------------ 

これらの細胞は、すべての時間(HH:MM AM/PM)としてフォーマットされている

を私が働いていた時間を計算するには、次の式を使用しています:

=(SUM(B1-A1)*24)+(SUM(D1-C1)*24) 

この式が生成する以下の結果:

----A----------B-----------C----------D-----------E---------- 
----Time In----Time Out----Time In----Time Out----TOTAL HOURS 
1---11:15 AM---12:05 PM----1:05 PM----1:10 PM-----0.92------- 
2---1:05 PM----1:20 PM-----2:20 PM----4:00 PM-----1.92------- 
3---11:35 PM---12:05 AM----1:05 AM----1:30 AM-----(23.08)---- 
4---1:20 PM----2:20 PM----------------------------1.00------- 

行1、2、& 4が正しく表示されていますが、行3が正しく表示されません。 .92〜-23.08でなければなりません。私はこれが起こっていることを知っています。なぜなら、数式は列B(12:05 AM)が翌日であることを知らせることができないからです。

残念ながら、日付を追加することはオプションではありません。時刻のみです。この制限を回避するために数式を書くことはできますか?

答えて

5

を追加し、ゼロ未満である場合、それはあなたのすべての時間を正の数を与える必要があります。

あなたの式は次のようになります

=MOD(SUM((B1-A1)*24),24) + MOD((SUM(D1-C1)*24),24) 
+0

SUMの後に括弧が1つもなくなっていますが、良い答えです! = MOD(SUM((B1-A1)* 24)、24)+ MOD((SUM(D1-C1)* 24)、24) – aevanko

+0

@Issunありがとう!私はそれを固定します – Pepe

3

結果が結果番号モジュロ24を取る24

+0

+1を。私のVBAの答えであなたのソリューションを使用します。 :) – aevanko

1

私はこれは良い質問や他の人がに実行可能なものであると知りたいかもしれない人のためのVBAの答えを追加しています。 VBAは、時間のために異なるネットフォーマットを持つことができるという点でより柔軟性があり、それはまだ機能します(例えば、実際の日付はその時間に含めることができます)。これはduffymoのソリューションを利用しています。

Function HoursWorked(t1 As Date, t2 As Date, _ 
        t3 As Date, t4 As Date) As Double 

Application.ScreenUpdating = False 
Dim shift1 As Double 
Dim shift2 As Double 

shift1 = DateDiff("n", t1, t2)/60 
If shift1 < 0 Then 
    shift1 = shift1 + 24 
End If 

shift2 = DateDiff("n", t3, t4)/60 
If shift2 < 0 Then 
    shift2 = shift2 + 24 
End If 

HoursWorked = shift1 + shift2 
Application.ScreenUpdating = True 

End Function 

シフト3と4がブランクの場合、関数は引き続き正常に実行されます。また、DateDiff関数で "n"の代わりに "h"を指定すると精度が失われないように秒数を60で割った値に注意してください。

そして、あなたはちょうど2つの日付/時刻の間の時間数を取得したい場合は、この使用することができます:

Function HoursDiff(ByVal date1 As Date, _ 
        ByVal date2 As Date) As Double 

Application.ScreenUpdating = False 
Dim result As Double 

result = DateDiff("n", date1, date2)/60 
If result < 0 Then 
    result = result + 24 
End If 

HoursDiff = result 
Application.ScreenUpdating = True 

End Function