• 締切済み

エクセルVBA 時刻の計算 テキストボックス

お知恵をお貸しください。 入力を簡単にするためのユーザーフォームを作っています。 開始時間(txt開始)に「14:00」 終了時間(txt終了)に「19:00」と入力すると 時間(txt時間)は「5:00」(19:00-14:00=5:00) 通常(8:00~18..00)に「4」(4:00*24) 時間外(6:00~8:00、18:00~22:00)に「1」(1:00*24) 深夜(22:00~6:00) と表示させたく思います。 通常、時間外、深夜のテキストボックスに表示することができません。 よろしくお願いします。 Private Sub txt時間_Exit(ByVal Cancel As MSForms.ReturnBoolean) If txt開始 > TimeValue("8:00") And txt開始 < TimeValue("18:00") Then txt通常.Text = TimeValue(txt時間.Value) * 24 End If End Sub Private Sub txt終了_Exit(ByVal Cancel As MSForms.ReturnBoolean) txt時間.Value = Format((TimeValue(txt終了.Text) - TimeValue(txt開始.Text)), "h:mm") End Sub

みんなの回答

  • mt2008
  • ベストアンサー率52% (885/1701)
回答No.2

No.1です。 失礼!fNightの中の18:00を22:00に変更してください。

mnhc33
質問者

補足

お返事ありがとうございます。 ちゃんと表示できました。 txt通常 = Hour(TimeValue(txt時間)) にすると0.5とかの表示ができないのでHourを抜いてみようと思います。 あとtxt通常=txt時間ではなく txt通常=txt時間-txt深夜-txt時間外で計算をしてみようと思います。

  • mt2008
  • ベストアンサー率52% (885/1701)
回答No.1

まず気になったのが、「txt開始 > TimeValue("8:00")」の、様に文字列と時刻を比較している点です。 「TimeValue(txt開始) > TimeValue("8:00") 」の、様にするべきでしょう。 そのうえで、txt終了_Exit に以下の3行を追加 txt通常 = Hour(TimeValue(txt時間)) txt時間外 = fOver() txt深夜 = fNight そして、以下の2つのFunction を追加してみてください。 Private Function fOver() As Long  fOver = 0  '開始時間が8:00以前か?  If TimeValue(txt開始) < TimeValue("8:00") Then   work開始 = txt開始   '深夜時間帯に掛かっている?   If TimeValue(txt開始) < TimeValue("6:00") Then    work開始 = "6:00"   End If   fOver = Hour(TimeValue("8:00") - TimeValue(work開始))  End If  '終了時間が18:00以降か?  If TimeValue(txt終了) > TimeValue("18:00") Then   work終了 = txt終了   If TimeValue(txt終了) > TimeValue("22:00") Then    work終了 = "22:00"   End If   fOver = fOver + Hour(TimeValue(work終了) - TimeValue("18:00"))  End If End Function Private Function fNight() As Long  fNight = 0  '開始時間が6:00以前か?  If TimeValue(txt開始) < TimeValue("6:00") Then   fNight = Hour(TimeValue("6:00") - TimeValue(txt開始))  End If  '終了時間が22:00以降か?  If TimeValue(txt終了) > TimeValue("22:00") Then   fNight = fNight + Hour(TimeValue(txt終了) - TimeValue("18:00"))  End If End Function なお、6:00開始、7:00終了の様な特殊なパターンは想定していません。 サンプルですので変数宣言やエラー処理も行っていません。