Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


33781 / 76734 ←次へ | 前へ→

【48169】Re:Excelで時間帯を調べる方法がわかりません
回答  りん E-MAIL  - 07/4/5(木) 21:45 -

引用なし
パスワード
   わんころもち さん、こんばんわ。

>表としては、A列に社員名が並び、B列に出社時刻、C列に休憩開始時刻、
>D列に休憩終了時刻、E列に退社時刻が記載されています。
>そして、F列からP列までがそれぞれ9〜19時台をあらわしており、
>この中に、1時間丸ごと在席していれば「1」、30分しかいなければ「0.5」と
>入るようにしたいと考えております。
>それぞれの時間帯が含まれるかどうかを調べる方法はありますでしょうか。

勤務開始時刻と一致する時間帯は、60-開始分
勤務終了時刻と一致する時間帯は、終了分
範囲内の場合は60分

休憩開始時刻と一致する時間帯は、勤務分−(60-休憩開始分)
休憩終了時刻と一致する時間帯は、勤務分−休憩終了分
範囲内の場合は0分

おおまかには、こんな考え方でよいようなので。

Sub test()
  ReDim dt(1 To 1, 6 To 16) As Double, rr(1 To 4) As Range
  Dim Rpos As Long
  '
  Rpos = 2 '2行目を処理する場合
  '
  With Application.ActiveSheet
   Set rr(1) = .Cells(Rpos, "B") '勤務開始
   Set rr(2) = .Cells(Rpos, "E") '勤務終了
   Set rr(3) = .Cells(Rpos, "C") '休憩開始
   Set rr(4) = .Cells(Rpos, "D") '休憩終了
   '
   For II% = 6 To 16
     HH& = II% + 3 'F列が9時
     '勤務時間帯の判定(同じ時刻がはいるかもしれないのでIfで分岐)
     If HH& = Hour(rr(1)) Then dt(1, II%) = 60 - Minute(rr(1)) '開始時刻
     If HH& = Hour(rr(2)) Then dt(1, II%) = Minute(rr(2))   '終了時刻
     If HH& > Hour(rr(1)) And HH& < Hour(rr(2)) Then dt(1, II%) = 60 '範囲内
     '休憩時間の判定(同じ時刻がはいるかもしれないのでIfで分岐)
     If HH& = Hour(rr(3)) Then dt(1, II%) = dt(1, II%) - (60 - Minute(rr(3)))
     If HH& = Hour(rr(4)) Then dt(1, II%) = dt(1, II%) - Minute(rr(4))
     If HH& > Hour(rr(3)) And HH& < Hour(rr(4)) Then dt(1, II%) = 0
     '休憩開始と終了が同じ時間だった場合の調整
     If dt(1, II%) < 0 Then dt(1, II%) = Abs(dt(1, II%) + 60)
     '分を時間に
     dt(1, II%) = dt(1, II%) / 60
   Next
   '
   .Range(.Cells(Rpos, 6), .Cells(Rpos, 16)).Value = dt()
  End With
  '
  Erase rr, dt
End Sub

こんな感じです。
休憩時間が勤務時間外になっていたら変な結果が出るので、計算前にチェックしたほうがよいかもしれません。
4 hits

【48159】Excelで時間帯を調べる方法がわかりません わんころもち 07/4/5(木) 15:47 質問
【48169】Re:Excelで時間帯を調べる方法がわかりませ... りん 07/4/5(木) 21:45 回答
【48173】Re:Excelで時間帯を調べる方法がわかりませ... わんころもち 07/4/6(金) 12:52 お礼

33781 / 76734 ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free