• 締切済み

VBユーザーフォームで時間入力

勤務時間を入力して労働時間を計算するユーザーフォームです。 出勤時間として、 テキストボックス1に(時間)、例えば13と 入力。 テキストボックス2に(分)、例えば40と入力。 退社時間として、 テキストボックス3に(時間)、例えば18と入力。 テキストボックス4に(分)、例えば30と入力。 コマンドボタン1を押して、sheet1のA1セルに出勤時間、B1のセルに退社時間を転記させたい。 A1に13:40 B1に18:30 この様に転記させたいです。 休みの人の場合は、入力しないでコマンドボタン1を押してA1とB1のセルは空欄に したいです。 だれか詳しい方、上記を実行できるコードを教えて下さい。 よろしくお願いします。

みんなの回答

回答No.2

こんにちは。 UserFormで気をつけることは、時間で保有してしまうと、24時間以内ですから、それを越えたりする時は、文字で保管しなければなりません。今回はそうでないかもしれませんが、最初から文字列にしています。一応、汎用性のために、保有する変数は、Variant ですから間違えないようにしてください。 一応、UserFormモジュール全部を書いておきます。 '// Dim TimeA 'モジュール変数(Variant型) Dim TimeB Private Sub TextBox1_AfterUpdate()  If IsNumeric(TextBox1.Value) Then   TimeA = TextBox1.Value  Else   MsgBox "時間を入れてください。", 48   TextBox1.Value = ""  End If End Sub Private Sub TextBox2_AfterUpdate()  If IsNumeric(TextBox2.Value) And Val(TextBox2.Value) < 60 Then   TimeA = TimeA & ":" & TextBox2.Value  Else   MsgBox "分を入れてください。(59分まで)", 48   TextBox2.Value = ""  End If End Sub Private Sub TextBox3_AfterUpdate()  If IsNumeric(TextBox3.Value) Then   TimeB = TextBox3.Value  Else   MsgBox "時間を入れてください。", 48   TextBox3.Value = ""  End If End Sub Private Sub TextBox4_AfterUpdate()  If IsNumeric(TextBox4.Value) And Val(TextBox4.Value) < 60 Then   TimeB = TimeB & ":" & TextBox4.Value  Else   MsgBox "分を入れてください。(59分まで)", 48   TextBox4.Value = ""  End If End Sub Private Sub CommandButton1_Click() Dim i As Long  If TimeA <> "" And TimeB <> "" Then   ActiveSheet.Range("A1").Value = TimeA   ActiveSheet.Range("B1").Value = TimeB   tima = "": TimeB = ""   For i = 1 To 4    Me.Controls("TextBox" & i).Value = ""   Next  Else '二つの変数が空の場合。   ActiveSheet.Range("A1").ClearContents   ActiveSheet.Range("B1").ClearContents  End If End Sub '//

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.1

ユーザーフォームを挿入。 コマンドボタンを1つ貼り付け。時分の入力終了の知らせ用。 3つテキストボックスをユーザーフォームに貼り付け。 氏名、時刻時、時刻分の入力用とする。 シートのD1に==TIMEVALUE(B1&":"&C1&":"&0) セルの表示形式時刻の中で好みのもの設定 ーー コード Private Sub CommandButton1_Click() Range("A1") = TextBox1.Value Range("B1") = TextBox2.Value Range("C1") = TextBox3.Value End Sub ーー ユーザーフォームの実行。 フォームへ入力 コマンドボタン1に山田 一郎(氏名) コマンドボタン2に13 コマンドボタン3に40 コマンドボタンをクリック -- シートのD1に 13:40:00 と現れる。 これでは物足りないと思います。どこでしょう? そちらの点こそ質問に書かないと解決にならないと思う。 全般に、質問者には、まだ早やすぎる課題ではと感じた。 上記程度では実用にならないと思う。 休みの場合とかは省略。 入力者(たとえば従業員)が複数いるとすると、その人の行を見つけて その行のÐ列にデータをセットしなければならないのでhさ。 こちらの方がVBAとしてはずっとむつかしい課題と思うが、質問には何も 触れてない。

関連するQ&A