• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:オプションボタンの使い分けによる時間計算)

オプションボタンの使い分けによる時間計算

このQ&Aのポイント
  • オプションボタンの使い分けによって、時間計算を行う方法について教えてください。
  • 使用機種はWindowsVistaでExcel2007です。VBA初心者です。
  • 「自動入力」と「手動入力」における操作内容とコードの修正方法を教えてください。

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

  • ベストアンサー
  • end-u
  • ベストアンサー率79% (496/625)
回答No.1

回答コードの継ぎ接ぎじゃなくて、 提示されたサンプルコードを理解して自分のものにする必要があるんじゃないでしょうか。 UserForm_Initializeイベントのコードを目で追ってますか? そのコードが実行された時、どういう処理がされているのか、 完全に理解しないまでも、頭の中でイメージできてますか? UserForm初期化でOptionButton1をTrueにしてますから、 後半 >If OptionButton1 = True Then この条件が常に「真」ですよね。 それにそのまま Call CommandButton6_Click に進むと、その前に設定した >Label22.Caption = "開始時間" >Label23.Caption = "終了時間" >Label23.Caption = "作業時間" これが意味を為さないですね? 質問内容は理解できない事もないのですが、 >●やりたい操作 に既にできている事が含まれていて、 じゃ具体的に何がわからないのか解かりにくいです。 おそらく、ひとつには OptionButton1_Clickした時に CommandButton6.LockedをFalseにすれば良い、という事が言えます。 その時に、TextBox5~7をどうしたいのかは見えませんけど。 それと >B)「手動入力」を選択(青色部分)→例外の操作 : >3.左から3番目のテキストボックスに「hh:mm」形式で2-1の時間計算 >  を行う これをどのタイミングで表示させるのか、決めてますか? 例えば何かのButtonクリックイベントでもいいですから、 まずは自分で書いてみる事です。 ユーザーが任意に入力するわけですから、 TextBox5とTextBox6に入力された内容を読み取って時間計算すれば良い事になります。 この時、TextBox5,6には時間を表す文字列が正しく入力されていないと、 時間計算されませんから、不正値のチェックも必要になってきますね。 #あくまでサンプルですが Dim x As String x = InputBox("h:mmで入力", , FormatDateTime(Time, vbShortTime)) If (InStr(x, ":") > 0) And IsDate(x) Then   MsgBox FormatDateTime(TimeValue(x), vbShortTime) Else   MsgBox "error" End If #こんな感じのチェック。 後は蛇足ですけど 「自動」と「手動」で、時間を表示|入力するコントロールを別物にする必要があるのかどうか。 ユーザーの使用感にもよりますが、TextBoxにまとめるなど、 仕様検討も念頭においたほうが良いかもしれません。

dradra33
質問者

お礼

end-u様 いつもご丁寧なご回答ありがとうございます。 お礼が遅くなり恐縮です。 時間の入力について「自動入力」か「手動入力」に関する件は、 当面はユーザーが任意で判断してもらい下記のようにするつもりです。 ・「自動入力」→従来通り(Private Sub CommandButton6_Click()のコード通り) ・「手動入力」→テキストボックスには、ロックをかけない。        コマンドボタンを設けてそのボタンを押すことによって        時間計算を行うことにします。 ※フォームからデータベースへの転記の段階で、どちらか入力されている方を 転記の対象とするようにコードは書き換えるつもりです。 >例えば何かのButtonクリックイベントでもいいですから、 >まずは自分で書いてみる事です。 「時間計算ボタン」設けて押したら、時間計算が可能となるようにしました '作業時間を手動で入力 Private Sub CommandButton8_Click() Dim s_Kaishi As Date Dim s_Syuryo As Date s_Kaishi = TextBox5.Text s_Syuryo = TextBox6.Text TextBox7.Text = Format(s_Syuryo - s_Kaishi, "hh:mm") End Sub >ユーザーが任意に入力するわけですから、 >TextBox5とTextBox6に入力された内容を読み取って時間計算すれば良い事になります。 >この時、TextBox5,6には時間を表す文字列が正しく入力されていないと、 >時間計算されませんから、不正値のチェックも必要になってきますね。 今のところ、上記のコードに対応した不正値チェックのコード記述は、 できていません。下記のコードを記述してみましたが、エラーが返されます。 もう少し考えてみます。 '作業時間を手動で入力 Private Sub CommandButton8_Click() Dim s_Kaishi As String Dim s_Syuryo As String If (InStr(s_Kaishi, ":") > 0) And If (InStr(s_Syuryo, ":") > 0) Then s_Kaishi = TextBox5.Text s_Syuryo = TextBox6.Text TextBox7.Text = Format(s_Syuryo - s_Kaishi, "hh:mm") Else: TextBox5.Text="" TextBox6.Text="" SetFocus.TextBox5 End If End Sub >後は蛇足ですけど >「自動」と「手動」で、時間を表示|入力するコントロールを別物にする必要があるのかどうか。 >ユーザーの使用感にもよりますが、TextBoxにまとめるなど、 >仕様検討も念頭においたほうが良いかもしれません。 私がVBAに取り組んでいる理由の一つは、従業員の日々の仕事内容を データベース化することです。その入力作業をできるだけ省力化 するためにユーザーフォームの作成に取り組んでいます。 今いる会社では、営業(外勤)も技術(給与計算作業・内勤)も 経験しています。当然、他の人の使用感も聞かなければなりませんが、 たたき台がまず必要と考えています。 「とりあえず使えるもの」を作成することが、喫緊の課題となるので 私の経験をもとに作成しています(もちろんその間に私のVBAの学習を 進めることも課題ですが…)。 こちらこそ個人的な事情を含んだ長文を読ませてしまい、恐縮です。 最後までお読みいただきありがとうございました。