• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:VBA ユーザーフォームで)

VBAユーザーフォームで時間計算と入力制御について

このQ&Aのポイント
  • VBAのユーザーフォームで時間を入力し、計算結果を分単位で表示したいです。具体的には、スタート時間とエンド時間を入力して、経過時間を表示する方法が知りたいです。
  • さらに、時間の表示形式をhh:mmではなく、mm単位で表示する方法についても教えてください。
  • さらに、時間入力時に2バイト入力で次の入力欄に移動するようにする方法についても教えてください。

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

  • ベストアンサー
  • hallo-2007
  • ベストアンサー率41% (888/2115)
回答No.1

参考になるかどうか?取り合えずいくつか紹介します。 ユーザーフォーム上に Textbox1とTextBox2が準備されているとして Private Sub CommandButton1_Click() Dim mytime3 As Date mytime1 = TimeValue(ComboBox1.Value & ":" & ComboBox2.Value & ": 0") mytime2 = TimeValue(ComboBox3.Value & ":" & ComboBox4.Value & ": 0") mytime3 = mytime2 - mytime1 TextBox1.Value = mytime3 TextBox2.Value = Hour(mytime3) * 60 + Minute(mytime3) End Sub >2バイト入れれば次のコンボボックスにカーソルが移動するような制御はありますか? コンボボックスなのでRowSorceで0~59とか0~23とか設定できると思います。取り合えずカーソルの移動であれば Private Sub ComboBox1_Change() ComboBox2.SetFocus End Sub

potara_ran
質問者

お礼

早速のご返答ありがとうございます。 時間は、Timevalueを使えばいいのですね。また、秒まで指定しないといけないので、最後の"&:0"で、秒も指定しているのですね。 ただ引いても、変数が少数点にしかならなかったのでとても助かりました。 ありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (1)

  • hige_082
  • ベストアンサー率50% (379/747)
回答No.2

comboboxを使用する意味は? 次のコードを実行してみて Private Sub UserForm_Initialize() Dim i As Integer For i = 0 To 23 ComboBox1.AddItem Format(i, "00") Next i For i = 0 To 59 ComboBox2.AddItem Format(i, "00") Next i End Sub Private Sub ComboBox1_Change() ComboBox2.SetFocus End Sub

potara_ran
質問者

お礼

早速のご回答ありがとうございます。 コンボボックスを使用する意味は、時間の入力の為、シート2に0~23までと、0~59までを用意しておき、それぞれComboboxに反映させて選択できるようにと考えました。また、Comboboxなら入力も可能ですのでComboboxを使用しようと思いました。 上記コードで、シート2に値を入力しなくても、反映させることが出来るのですね。参考になりました。ありがとうございます。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • VBAユーザーホームについて

    ビスタのVBAユーザーホームでコンボボックスを使用しています リストにはセル範囲を指定し、指定先には[8:00]~[17:00]まで15分単位で時刻を入力してあります リストから指定時刻を選択すると時刻表示されず数値化してしまうので 以下のようなコードで書式設定しています Private Sub ComboBox5_Click() '作業終了1 ComboBox5.Text = Format(ComboBox5.Value, " hh:mm ") End Sub しかし[12:00]の時刻だけはナゼか[00:05]と表示されてしまいます その他の時刻は問題なく時刻表示されるのに、意味がわかりません どうすれば[12:00]と表示する事が出来るのでしょうか 詳しい方がおられましたらどうか宜しくお願いします

  • vba ユーザーフォームについて

    勉強のためにvb勉強中です。エクセルのユーザーフォームについて質問です。 コンボボックス 01 02 のどちらかを選択すると、テキストに入力した数字は、01を選択したら11行、02を選択したら12行に転記できるようにしたいのですが、if文を使うのだろうと思うのですが、教えていただけないでしょうか。 私が途中まで作成した載せておきます。よろしくお願い申し上げます。 Private Sub CommandButton1_Click() Dim rc As Long Dim retu As Long Dim Ctrl As Control If Me.txtComboBox1.Value = "" Then MsgBox "社員名を選択してください!", vbOKOnly Me.txtComboBox1.SetFocus Exit Sub End If rc = MsgBox("件数を入力しますか?", vbYesNo) If rc = vbYes Then MsgBox "実行する" Else MsgBox "中止しました" Exit Sub End If retu = Cells(3, Columns.Count).End(xlToLeft).Column + 1 Cells(3, retu).Value = Me.txtComboBox1.Value ←社員を選択 Cells(4, retu).Value = Me.txtsuzuki.Value  ←売れた件数 Cells(5, retu).Value = Me.txttoyota.Value  ←売れた件数 Cells(6, retu).Value = Me.txthonnda.Value   ←売れた件数 For Each Ctrl In Me.Controls If Ctrl.Name Like "txt*" Then Ctrl.Value = "" End If Next Ctrl End Sub また、テキストボックスに数字だけ入力して、プルダウン選択してないとエラ~メッセージも出るようにしたいです...

  • エクセルVBAのユーザーフォームのコンボボックス

    エクセルVBAのユーザーフォームのコンボボックスの入力と ファイルの保存で質問です。 エクセルVBAで ユーザーフォームのコンボボックスを使用して 1月から12月までを選択してもらい、 選択した月を コマンドボタン押した際に、 セルにその値を入力するような マクロを作成しようとしています。 またコンボボックスは標準で6月が表示されるようにしたいと思います。 ユーザーフォームのコードの一部です。 Private Sub UserForm_Initialize() Dim m As Integer For m = 1 To 12 UserForm1.ComboBox1.AddItem m Next ComboBox1.ListIndex = 6 Private Sub CommandButton1_Click() 'ユーザーフォームを閉じる Unload UserForm1 mold  '↑フォームを閉じた後に実行される標準モジュールのマクロ名です End Sub 標準モジュールのコード 名称 「mold」 Sub mold() ActiveWorkbook.SaveAs _ Filename:="C:\_" & UserForm1.ComboBox1.Text & "月", _ FileFormat:=xlOpenXMLWorkbook ActiveWorkbook.Close ThisWorkbook.Activate ' End Sub の様に作成して実行してみたのですが、 コンボボックスで11月を選択しても 6月のままのファイルになってしまいます。 どのようにしたら、 コンボボックスで選択した値を ファイル名として保存できるでしょうか? 全部のコードを記載しますと 長くなってしまうと思い、 関連するコードを記載して質問しました。 分かりづらい所もあるかと思いますが よろしくお願いします。

  • エクセルVBAでユーザーフォーム

    エクセルVBAでユーザーフォーム上にオプションボタンが2つ、コンボボックスが6つあります。 OptionButton1をクリックした場合のComboboxの動きの制御について以下のように書いてみました。 これでも期待通りCombobox1~3は動き4~6は動かなくなります。 ただ、もっと別の簡単な書き方があるのではないかと思い質問しました。 宜しくお願いします。 Private Sub OptionButton1_Click() ComboBox1.Enabled = True ComboBox1.ListIndex = 0 ComboBox2.Enabled = True ComboBox2.ListIndex = 0 ComboBox3.Enabled = True ComboBox3.ListIndex = 0 ComboBox4.Enabled = False ComboBox4.ListIndex = 0 ComboBox5.Enabled = False ComboBox5.ListIndex = 0 ComboBox6.Enabled = False ComboBox6.ListIndex = 0 End Sub

  • VBA 一つ前の動作を無効にするには??

    エクセル2002使用です。 ユーザーフォームにコンボボックス1、コンボボックス2のを2つ並べました。 コンボボックス2はコンボボックス1の値によって違う値を取得するため、 コンボボックス1に必ず入力がなければなりません。 そこで Private Sub ComboBox2_DropButtonClick() If ComboBox1.ListIndex = -1 Then MsgBox "コンボボックス1を入力してください" End If end sub としましたが、DropButtonClickの動作は有効なので、 メッセージボックスを閉じると、適当な値(今回はコンボボックス2設定のの一番最初の値)を 表示してしまいます。 DropButtonClickの動作を無効にする方法がわかりません。 よろしくお願いします。

  • VBA ユーザーフォーム

    VBAにおけるユーザーフォームの件 今,下記の様なプログラムを組んでいるのですが,「myComboBox」に入った?値をこの後で使用したいのですが, どうすればいいのかわからなくて困っています. これで何がしたいかというと,ある個数分のコンボボックスを自動で作成して使用しようとしているのです. Private Sub UserForm_Initialize() Dim a As String Dim jj As Long Dim s As Integer Dim myComboBox As Control N = InputBox("抜き出したいデータ数は?") EffectiveRow = Range("A65536").End(xlUp).Row Effectivecolumn = Cells(2, 16384).End(xlToLeft).Column For s = 1 To N Set myComboBox = Me.Controls.Add("Forms.ComboBox.1") With myComboBox .Height = 20 .Width = 150 .Left = 120 .Top = (s - 1) * .Height + 10 End With For jj = 1 To Effectivecolumn myComboBox.AddItem Worksheets(1).Cells(1, jj).Value Next jj a = myComboBox.Value Worksheets(2).Cells(1, 1) = a Next s End Sub

  • vba 明日の6時まで、あと何時間何分あるか

    vba 今の時間から明日の6時まで、あと何時間何分あるかを取得したいのですが うまくいきません。 Sub a() Const 予定 As Date = "06:00:00" '明日の6時 MsgBox "明日の6時まであと" & Format(Now - 予定, "hh:mm") & "あります" End Sub これだと、今の時刻(21:51)で実行すると15:51が返ります。 でも明日の6時まで15時間51分もないです。 何がまちがってますか?

  • エクセルVBA コンボボックス

    今データ入力用のフォームmainがあります。 そこで複数のデータを入力していくのですが、そこでわからなくなりました。 入力用コンボボックスがひとつだけのときは Private Sub userform_Initialize() Dim 配列(2) 配列(0) = "データ1" 配列(1) = "データ2" 配列(2) = "データ3" 入力用コンボ.List = 配列 End Sub Private Sub 入力用コンボ_Change() MsgBox 入力用コンボ.ListIndex End Sub としていたのですが、複数になった場合の理屈を含めわかりません。 一つの入力用フォームにコンボボックスが複数あった場合はどうすればよいのですか?

  • VBA のフォームでTxtボックスとコンボボックス

    エクセル2013で、やっとのことでマクロのフォーム(txt入力のみを5項目)を完成させることができました。 次に、そのうちの一つは曜日の入力なのでこれをコンボボックスにして、一覧を出してマウスで選択するように変更したいのですがどうもうまくいきません。マクロは初めてなので基本的な考え方ができていないのです。   そこで質問なのですが、参考書には  Private Sub UserForm_Initialize End Sub にマクロを記入するとなっていますが、これをもとの曜日入力ボックスと置き換えることはできないのでしょうか。それとも、終了ボタンのマクロと同じように、別のプロシージャにしないといけないのでしょうか。 それから、これはあまり重要ではないかもしれませんが、私がコンボボックスを作成するとマクロに Combbox_Changed のようなプロパティ(?)が表示されて、ヘルプを見てもよくわかりません。これはどういうことなのでしょうか。 よろしくお願いします。

  • フォームビューでの入力ですぐ候補を表示させるには?

    アクセス2003を使用しています。 フォームデザインでボックスをいくつか作り、そのうち1つにコンボボックスを付けました。 フォームビューでデータを入力中、タブキーでボックスを移動した時、右端のコンボボックス表示ボタンを押さなくても、ボックスにカーソルが入ると同時に、コンボボックスが表示されるようにすることは可能でしょうか。 わかる方、教えて下さい。お願いします。 説明不足があれば補足します。

専門家に質問してみよう