●質問の主旨
「開始時間」と「終了時間」を予め表示させておき、
「終了時間」-「開始時間」=「作業時間」とするには、
どのようなコード記述をすれば良いでしょうか?ご教示願います
●質問の補足
1.「作業開始」ボタンを押すと、「開始時間」が現在の時間に変わります。
2.「作業終了」ボタンを押すと、「終了時間」が現在の時間に変わります。
3.「作業終了」の処理が終わると同時に、赤色の部分が、
「終了時間」-「開始時間」=「作業時間」の時間計算を行い、計算結果を
表示させたいと考えています。
4.時間計算の上、表示を「0:00」(○時間○分)としたいと考えています。
5.現在のコードでは計算がされておらず、常に「0:00:00」が表示されます。
●コード
'開始時間をクリックするとラベル22が時間に変わる
Private Sub CommandButton6_Click()
With Me.CommandButton6
Me.Label22.Caption = FormatDateTime(Time, vbShortTime)
End With
End Sub
'終了時間をクリックするとラベル23が時間に変わる
Private Sub CommandButton7_Click()
With Me.CommandButton7
Me.Label23.Caption = FormatDateTime(Time, vbShortTime)
End With
Call sagyoujikan
End Sub
'作業時間の算出
Private Sub sagyoujikan()
Dim kaishi As Date
Dim syuryo As Date
kaishi = DateDiff("h", Label22, Label23)
syuryo = DateDiff("m", Label22, Label23)
Me.Label24.Caption = kaishi + syuryo
End Sub
以上よろしくお願い申し上げます。使用機種はWindowsVistaで、
Excel2007です。私はVBA初心者です。
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
temtecomai2様
引き続きご回答をお寄せいただいてありがとうございます。
>ボタンは 1つのほうがいいと思うよ
そうですね。ボタン一つの方が入力する側にとって
間違いが少なくて済みそうです。
今回の私の質問は、データベース作成のための
ユーザーフォームを作るための練習用と
して考えていたものです。
本番のユーザーフォームを作成するときは
上記のコードを利用してボタンは一つにしておきます。
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
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 を使って求めます。
あと文字列の連結は & を使うべきです。
この回答への補足
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
edp3142様、ご回答ありがとうございます。
ご回答について補足質問がございます。
そちらの方もご確認いただければ、
幸いです
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) ユーザーフォーム「frm_基本❶」を立ち上げると新規で入力する行数を右下のNoとして表示しています。 1 2023/03/16 19:02
- その他(プログラミング・Web制作) GASでガントチャートを作りたいです 1 2022/09/05 17:26
- Visual Basic(VBA) 数式が消える 1 2023/03/19 16:55
- Visual Basic(VBA) 3つのプロシージャをまとめたら実行時エラー発生で対応不能 6 2022/05/17 01:47
- Excel(エクセル) 日付で矢印マクロ 4 2023/07/25 16:47
- Excel(エクセル) エクセルで勤務時間の計算をしています。 下記図でstartは勤務開始時間、endは勤務終了時間です。 5 2022/06/07 13:51
- Visual Basic(VBA) ①ExcelVBAでカレンダーを作り、別のユザーフォームで日付を入力したいのですがエラーになります。 1 2023/02/17 18:39
- Visual Basic(VBA) ExcelのVBAコードについて教えてください。 1 2023/08/08 15:45
- Excel(エクセル) 指定した値以上の中で最小値を出したい 7 2022/10/24 21:12
- Visual Basic(VBA) エクセルのマクロについて教えてください。 2 2023/07/06 17:46
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
C言語のプログラミングの問題で...
-
65536は2の何乗なのでしょうか?
-
タクシー料金の問題です
-
バッチファイルでウインドウを...
-
骨折リスク評価のFRAXについて...
-
prolog計算
-
EXCELなどで「返す」という表現
-
三菱シーケンサー works2 の日...
-
Excel VBA TREND関数について
-
VBAで電卓を作成する
-
VBA 九九 Do While
-
モジュラス103の計算とは何でし...
-
電卓でmodの計算
-
C言語で、べき乗の計算方法につ...
-
[ASP]日付と時間の比較
-
ステップ数と計算量?
-
PHPとJavaでSHA256の結果を同じ...
-
スレッド処理からダイアログを...
-
移動平均を計算するプログラム
-
数十万番目の素数を表示させる...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
65536は2の何乗なのでしょうか?
-
VBAの再計算が反映されない件に...
-
排他的論理和 BCC(水平パリテ...
-
EXCELなどで「返す」という表現
-
バッチファイルでウインドウを...
-
モジュラス103の計算とは何でし...
-
傾いた四角形内の範囲の条件式
-
Visual C++でdebugとreleaseで...
-
変化させるセルが変化しない
-
骨折リスク評価のFRAXについて...
-
C# 計算処理中に実行中ウィン...
-
VBAでの勤務時間計算
-
べき乗の計算が遅い理由
-
C言語についてです。 再帰を使...
-
Excel VBAにてFFT
-
数値計算の高速化 (cos, sin, exp)
-
VBとVBAの違い
-
VB6で正確なミリ秒を計測したい...
-
スレッド処理からダイアログを...
-
matlabで計算終了
おすすめ情報