- 締切済み
VBユーザーフォームで時間入力
勤務時間を入力して労働時間を計算するユーザーフォームです。 出勤時間として、 テキストボックス1に(時間)、例えば13と 入力。 テキストボックス2に(分)、例えば40と入力。 退社時間として、 テキストボックス3に(時間)、例えば18と入力。 テキストボックス4に(分)、例えば30と入力。 コマンドボタン1を押して、sheet1のA1セルに出勤時間、B1のセルに退社時間を転記させたい。 A1に13:40 B1に18:30 この様に転記させたいです。 休みの人の場合は、入力しないでコマンドボタン1を押してA1とB1のセルは空欄に したいです。 だれか詳しい方、上記を実行できるコードを教えて下さい。 よろしくお願いします。
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- WindFaller
- ベストアンサー率57% (465/803)
こんにちは。 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)
ユーザーフォームを挿入。 コマンドボタンを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としてはずっとむつかしい課題と思うが、質問には何も 触れてない。