プロが教える店舗&オフィスのセキュリティ対策術

基本的なことですいません。
18:00-8:30といった勤務時間の計算をしたいのですが

Range("C1")= Range("B1")-Range("A1")
だと結果がでません。

昼休みや残業時間も計算しなければならないのですが
まずは、単純に引き算すらできなくて困ってます。
ご回答の程よろしくお願いいたします

A 回答 (5件)

回答では無いのですが、


面倒なVBAを使わずシート上で計算させてはいけないのですか?
    • good
    • 0

こんにちは、



>頂いたソースを実行してみたのですがうまく動かなかったです。

おかしいですね。私の環境では、うまく行くのですが、
どんなエラーが出ていますか??

>17:00-9:00= 休憩1:00 勤務時間 7:00

こんな感じにも改造しましたけど、このデータを勤務時間を他で利用するときに
不便になると思いますよ。

Public Function ddd(ds As Date, de As Date) As String

Dim dd1 As Double
Dim dd2 As Double
Dim dd3 As Double
Dim kyukei As String


dd1 = DateDiff("h", ds, de)
dd2 = (DateDiff("n", ds, de) Mod 60) / 60#
dd3 = dd2 * 60

If (dd1 + dd2 >= 8.5) Then
dd1 = dd1 - 1
kyukei = " 休憩 1:00"
End If

ddd = Format(de, "hh:mm") & "-" & Format(ds, "hh:mm") & "=" & kyukei & " 勤務時間 " & Format(dd1, "00") & ":" & Format(dd3, "00")

End Function

計算結果シート上

始業時間---就業時間---勤務時間
7:00-------12:00------12:00-07:00= 勤務時間 05:00
7:00-------20:00------20:00-07:00= 休憩 1:00 勤務時間 12:00
7:00-------13:00------13:00-07:00= 勤務時間 06:00
7:00-------15:29------15:29-07:00= 勤務時間 08:29
7:00-------15:30------15:30-07:00= 休憩 1:00 勤務時間 07:30
    • good
    • 5

>if x >= 8.5 then Range("D1")=7.5



このような式は成立しません。
提示されたコードのxは文字型ですし、時刻には8.5と言う値もありませんから・・・。

時刻は0~1未満の間の値(小数)で表すので、8.5時間なら 8.5/24 のように計算出来ます。

Sub test()

Dim x As Single

x = Range("B1") - Range("A1")
Range("C1") = Format(x, "hh:mm")

If x >= (8.5 / 24) Then
Range("D1") = Format(x - (1 / 24), "hh:mm")
Else
Range("D1") = Format(x, "hh:mm")
End If

End Sub
    • good
    • 1

こんにちは、


日にちがまたがっている場合があるのですね。
元データを #2006/9/1 18:00# ~ #2006/9/2 8:30#という表現にしないといけませんが、
以下の様なvbaを作っていました。

Public Function d(ds As Date, de As Date) As String

'時間の計算
d = Format(DateDiff("h", ds, de), "00")
'分の計算と時間との結合
d = d & ":" & Format(DateDiff("n", ds, de) Mod 60, "00")

End Function

計算例をイミディエイトで実行してみると

?d(#2006/9/1 7:00#,#2006/9/2 8:11#)
25:11
?d(#2006/9/1 7:00#,#2006/9/1 8:01#)
01:01

のようになります。
こんな感じで、いいのですかね。???

この回答への補足

頂いたソースを実行してみたのですがうまく動かなかったです。。DataDiffで時間と分だけつかってなんとかならないですかね。とりあえず日付をまたぐ勤務は抜きにして。。

17:00-9:00= 休憩1:00 勤務時間 7:00

といった感じにしたいんですが

補足日時:2006/09/01 21:46
    • good
    • 0

C3セルの書式設定(時刻)ができていないだけじゃないですか?



Range("C1") = Format(Range("B1") - Range("A1"), "hh:mm")

この回答への補足

でも、昼休みの休憩を引くのに
合計勤務時間は8.5時間以上は1時間休憩
8.5時間未満は休憩時間無しという処理をしたんです。
変数にRange("C1")を代入してもうまくいかないんですよ。
Dim x as string
Range("C1") = Format(Range("B1") - Range("A1"), "hh:mm")
x = Range("C1")
if x >= 8.5 then Range("D1")=7.5
end if

補足日時:2006/09/01 21:41
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています