• 締切済み

タイムレポートの普通残業時間について

お世話になります。 Excel2007でタイムレポートを作成しております。 VBAで構文を作成しました。 30分以上で、残業発生。以降10分単位。29分は残業ではないというのが条件であります。 30分なら0:30 29分なら表示させない。35分ら0:30、40分なら0:40といった形です。 30分以上なら、普通残業を計算をするという構文を書いたのですが、 10分以上から0:10と表示されてしまいます。 8:30が定時、17:00が終了です。7:45が就業時間です。 普通残業は、17:00から22:00です。8:30分より早く来ても、8:30分から計算します。 たとえば、8:30 17:30なら、 7:45 0:30、 8:30 17:45なら 7:45 0:40です。 17:29なら普通残業は、表示させないようにしたいと思います。 →現状、0:20と表示されてしまいます。 -----------------------------------------------------------------------------   Public Sub CmpKintaiTime(prmINTIM, prmOUTTIM, prmKNMKBN, rtnSYUGYO, rtnHAYZAN, rtnFUTZAN, rtnSINZAN, rtnTIKOKU, rtnSOUTAI, rtnKYUZAN, rtnKYUSIN) '************************************************** ' 勤怠時間 算出 '************************************************** On Error GoTo ErrorTrap Dim wINTIM As Integer Dim wOUTTIM As Integer Dim wSTRTIM As Integer Dim wENDTIM As Integer Dim wSYUGYO As Variant Dim wFUTZAN As Variant Dim wSINZAN As Variant Dim wHAYZAN As Variant Dim wTIKOKU As Variant Dim wSOUTAI As Variant Dim wTIKOKUw As Variant Dim wSOUTAIw As Variant Dim wKYUZAN As Variant Dim wKYUSIN As Variant Dim wLower As Integer Dim wUpper As Integer Dim wIdx As Integer If IsTime(prmINTIM) = False Then GoTo ExitTrap End If If IsTime(prmOUTTIM) = False Then GoTo ExitTrap End If '時刻を分換算 wINTIM = Hour(prmINTIM) * 60 + Minute(prmINTIM) wOUTTIM = Hour(prmOUTTIM) * 60 + Minute(prmOUTTIM) '日付が変わった時刻は24時間加算 If wINTIM >= wOUTTIM Then wOUTTIM = wOUTTIM + (24 * 60) End If If wOUTTIM > khnENDTIM Then If wOUTTIM <= khnSTRFZN Then wOUTTIM = khnENDTIM Else If wOUTTIM > khnENDFZN Then If wOUTTIM <= khnSTRSZN Then wOUTTIM = khnENDFZN Else If wOUTTIM > khnENDSZN Then wOUTTIM = khnENDSZN End If End If End If End If End If wSYUGYO = Null wFUTZAN = Null wSINZAN = Null wHAYZAN = Null wTIKOKU = Null wSOUTAI = Null '就業時間算出 If wINTIM < khnSTRTIM Then wSTRTIM = khnSTRTIM Else wSTRTIM = wINTIM End If If wOUTTIM > khnENDTIM Then wENDTIM = khnENDTIM Else wENDTIM = wOUTTIM End If If wENDTIM > wSTRTIM Then wSYUGYO = wENDTIM - wSTRTIM Else wSYUGYO = 0 End If If prmKNMKBN <> 1 Then '平日のみ '遅刻 If wINTIM > khnSTRTIM Then wTIKOKU = wINTIM - khnSTRTIM End If '早退 If wOUTTIM < khnENDTIM Then wSOUTAI = khnENDTIM - wOUTTIM End If End If '早出残業算出 (始業時刻より早出残業判断分前に出勤した場合、早出を算出) If wINTIM <= (khnSTRTIM - khnHAYFUN) Then wHAYZAN = khnSTRTIM - wINTIM End If '普通残業算出 wFUTZAN = wOUTTIM - wINTIM - wSYUGYO If wFUTZAN >= 30 Then wFUTZAN = wOUTTIM - wINTIM - wSYUGYO End If ご教授くださいますようお願い申し上げます。 文章が長くて、最後まで読んでくださってありがとうございます。 お手数をおかけしますが、ご教授くださいますようお願いいたします。

みんなの回答

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.3

これを読者や回答者に読ませるのはひどいでしょう。 何かやり方が我流であるように思う。だから読む気がしない。 エクセルで作っているといいながら、シートやセル(行・列)の情況の説明が無く、データのシート上でと生んじゃっているのか例示も無いのはどうして。 エクセルの使用経験は相当あるのですか?あまり無くてVBAに魅力を感じて取り掛かり始めたところではないですか。 この課題はエクセル関数でも出来るものではないか。そしてよく関数の質問としても出る。 Googleで「エクセル 残業時間」などで照会すれば http://www.eurus.dti.ne.jp/~yoneyama/Excel/ex-q-a/q_jikoku.html http://www.eurus.dti.ne.jp/~yoneyama/Excel/nyumon/kinmu/index.html のような解説例が有り、基本的にはエクセルでは時間計算は(セルの値が時刻シリアル値なので)引き算でよいが、 MAX、MIN、FLOOR関数などを旨く使って式を短くしている。 だからそういう記事をよく勉強し、VBAで使えない関数があれば自作して、計算すれば簡単になるはず。 エクセルで時刻はセルの値は「数」であることをご存知か? Ceiling,Floor関数とVBA http://www.asahi-net.or.jp/~ef2o-inue/vba_o/sub05_050_030.html MIN、MAXとVBAは Sub test01() MsgBox WorksheetFunction.Min(Range("A1"), 10, 34) End Sub のようなのが可能。

回答No.2

>30分以上なら、普通残業を計算をするという構文を書いたのですが、 と言うことなら、 >'普通残業算出 >wFUTZAN = wOUTTIM - wINTIM - wSYUGYO >If wFUTZAN >= 30 Then >wFUTZAN = wOUTTIM - wINTIM - wSYUGYO >End If と、wFUTZAN の計算式が30以上と未満で同じになるのはおかしいです。 下3行を以下のように書き換えたらどうでしょう? If wFUTZAN < 30 Then wFUTZAN = 0 以上

  • edomin7777
  • ベストアンサー率40% (711/1750)
回答No.1

全く追いかける気はありません。 こういう時は、判定している変数(や計算に使っている変数)に何が入っているのかをmsgboxなんかを使って表示させてみるのが一番です。

関連するQ&A