• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:2つの時間から作業時間を算出したい)

2つの時間から作業時間を算出したい

このQ&Aのポイント
  • 開始時間と終了時間を表示させ、終了時間から開始時間を引いて作業時間を計算するコードの記述方法を教えてください。
  • 作業開始ボタンを押すと開始時間が現在の時間に変わり、作業終了ボタンを押すと終了時間が現在の時間に変わる仕組みです。計算結果を0:00形式で表示したいです。
  • 現在のコードでは常に0:00:00が表示されており、計算がされていません。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.3

#2 です。 まったくの蛇足で質問とは何ら関係ない話になるけど。。。 練習のためのプログラムなんだろうかと思うけど、この手のアプリの場合、ボタンは 1つのほうがいいと思うよ。 Option Explicit Dim inProcess As Boolean ' True なら計測中を表す Dim startTime As Date ' 開始時刻 Dim endTime As Date ' 終了時刻 Private Sub CommandButton1_Click() Select Case inProcess Case False ' 計測を開始する inProcess = True startTime = Time Label22.Caption = FormatDateTime(startTime, vbShortTime) Label23.Caption = "" Label24.Caption = "" CommandButton1.Caption = "作業終了" Case True ' 計測を終了してインターバルを表示 inProcess = False endTime = Time Label23.Caption = FormatDateTime(endTime, vbShortTime) Label24.Caption = CDate(endTime - startTime) CommandButton1.Caption = "作業開始" End Select End Sub Private Sub UserForm_Initialize() CommandButton1.Caption = "作業開始" Label22.Caption = "" Label23.Caption = "" Label24.Caption = "" End Sub

dradra33
質問者

お礼

temtecomai2様 引き続きご回答をお寄せいただいてありがとうございます。 >ボタンは 1つのほうがいいと思うよ そうですね。ボタン一つの方が入力する側にとって 間違いが少なくて済みそうです。 今回の私の質問は、データベース作成のための ユーザーフォームを作るための練習用と して考えていたものです。 本番のユーザーフォームを作成するときは 上記のコードを利用してボタンは一つにしておきます。

その他の回答 (2)

回答No.2

単純に引き算しちゃえば? Option Explicit Private startTime As Date Private endTime As Date Private Sub CommandButton6_Click() startTime = Time Me.Label22.Caption = FormatDateTime(startTime, vbShortTime) End Sub Private Sub CommandButton7_Click() endTime = Time Me.Label23.Caption = FormatDateTime(endTime, vbShortTime) Call sagyoujikan End Sub Private Sub sagyoujikan() Me.Label24.Caption = CDate(endTime - startTime) End Sub

dradra33
質問者

お礼

temtecomai2様 単純に引き算するだけで、時間計算ができました! ありがとうとうございます。

noname#259269
noname#259269
回答No.1

色々と指摘点はありますので概要だけ。 DateDiff を使う時のパラメータは Date 型でないとダメです。 ボタンを押した時に、モジュールレベル変数に Now() を格納するようにしましょう。例えばこんな感じ。 Private m_Kaishi As Date Private m_Syuryo As Date Private Sub CommandButton6_Click() m_Kaishi = Now() Me.Label22.Caption = FormatDateTime(m_Kaishi, vbShortTime) End Sub m_Syuryoも同様にします。 そして DateDiff は m_Kaishi と m_Syuryo を使って求めます。 あと文字列の連結は & を使うべきです。

dradra33
質問者

お礼

edp3142様、ご回答ありがとうございます。 ご回答について補足質問がございます。 そちらの方もご確認いただければ、 幸いです

dradra33
質問者

補足

edp3142様のアドバイスに基づいて 下記コードを作成してみました。 しかし残念ながら、時間計算がされず、 表示は「0:00:00」のままです。 私が記述したコードについて edp3142様の意図をよみきれていない 可能性も考えられます。 たびたびで恐縮ですが、再度コードを ご確認いただければ幸いです。 なお「文字列の連結」で& を使うと 表示が「0:00:000:00:00」となりましたので、 最後から2番目の行は、 Me.Label24.Caption = a としています。 ●コード Option Explicit 'モジュールレベル変数の宣言 Private m_kaishi As Date Private m_Syuryo As Date '開始時間をクリックするとラベル22が時間に変わる Private Sub CommandButton6_Click() m_kaishi = Now() Me.Label22.Caption = FormatDateTime(Time, vbShortTime) End Sub '終了時間をクリックするとラベル23が時間に変わる Private Sub CommandButton7_Click() m_Syuryo = Now() Me.Label23.Caption = FormatDateTime(Time, vbShortTime) Call sagyoujikan End Sub '作業時間の算出 Private Sub sagyoujikan() Dim a As Date Dim b As Date a = DateDiff("h", m_kaishi, m_Syuryo) b = DateDiff("n", m_kaishi, m_Syuryo) Me.Label24.Caption = a End Sub

関連するQ&A