- 締切済み
エクセル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
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- mt2008
- ベストアンサー率52% (885/1701)
No.1です。 失礼!fNightの中の18:00を22:00に変更してください。
- mt2008
- ベストアンサー率52% (885/1701)
まず気になったのが、「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終了の様な特殊なパターンは想定していません。 サンプルですので変数宣言やエラー処理も行っていません。
補足
お返事ありがとうございます。 ちゃんと表示できました。 txt通常 = Hour(TimeValue(txt時間)) にすると0.5とかの表示ができないのでHourを抜いてみようと思います。 あとtxt通常=txt時間ではなく txt通常=txt時間-txt深夜-txt時間外で計算をしてみようと思います。