質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%

Q&A

2回答

3759閲覧

ExcelVBAのコンボボックスで使う時間について

rura

総合スコア70

0グッド

1クリップ

投稿2018/05/06 12:28

編集2018/05/07 01:46

前提・実現したいこと

こんにちわ。Excel VBAで初心者です。
自分でシフト表を作りたくて、コンボボックスで
開始と終了で時と分に分けてフォーム作成を勉強中です。
時間と分を設定する際にどうしても、
同じ数字を使うのですが、
これは関数などで省略できますか?
お詳しい方いましたら、お願い申し上げます。

発生している問題・エラーメッセージ

エラーメッセージ

該当のソースコード

Private Sub Starthour_Change() //シフト開始時 With Starthour Sheet2.Range("I39").Value = .ListIndex Sheet2.Range("I39").Value = Starthour End With End Sub Private Sub StartMinutes_Change() With StartMinutes 'シフト開始分 Sheet2.Range("K39").Value = .ListIndex Sheet2.Range("K39").Value = StartMinutes End With End Sub Private Sub Endhour_Change() //シフト終了時 With Endhour Sheet2.Range("I40").Value = .ListIndex Sheet2.Range("I40").Value = Endhour End With End Sub Private Sub EndMinutes_Change() With EndMinutes 'シフト終了時分 Sheet2.Range("K40").Value = .ListIndex Sheet2.Range("K40").Value = EndMinutes End With End Sub Private Sub UserForm_Initialize() //'シフト開始時 With Starthour .AddItem "" .AddItem "01" .AddItem "02" .AddItem "03" .AddItem "04" .AddItem "05" .AddItem "06" .AddItem "07" .AddItem "08" .AddItem "09" .AddItem "10" .AddItem "11" .AddItem "12" .AddItem "13" .AddItem "14" .AddItem "15" .AddItem "16" .AddItem "17" .AddItem "18" .AddItem "19" .AddItem "20" .AddItem "21" .AddItem "22" .AddItem "23" .AddItem "24" End With End Sub With StartMinutes 'シフト開始分 .AddItem "" .AddItem "01" .AddItem "02" .AddItem "03" .AddItem "04" .AddItem "05" .AddItem "06" .AddItem "07" .AddItem "08" .AddItem "09" .AddItem "10" .AddItem "11" .AddItem "12" .AddItem "13" .AddItem "14" .AddItem "15" .AddItem "16" .AddItem "17" .AddItem "18" .AddItem "19" .AddItem "20" .AddItem "21" .AddItem "22" .AddItem "23" .AddItem "24" .AddItem "25" .AddItem "26" .AddItem "27" .AddItem "28" .AddItem "29" .AddItem "30" .AddItem "31" .AddItem "32" .AddItem "33" .AddItem "34" .AddItem "35" .AddItem "36" .AddItem "37" .AddItem "38" .AddItem "39" .AddItem "40" .AddItem "41" .AddItem "42" .AddItem "43" .AddItem "44" .AddItem "45" .AddItem "46" .AddItem "47" .AddItem "48" .AddItem "49" .AddItem "50" .AddItem "51" .AddItem "52" .AddItem "53" .AddItem "54" .AddItem "55" .AddItem "56" .AddItem "57" .AddItem "58" .AddItem "59" End With //シフト終了時 With Endhour .AddItem "" .AddItem "01" .AddItem "02" .AddItem "03" .AddItem "04" .AddItem "05" .AddItem "06" .AddItem "07" .AddItem "08" .AddItem "09" .AddItem "10" .AddItem "11" .AddItem "12" .AddItem "13" .AddItem "14" .AddItem "15" .AddItem "16" .AddItem "17" .AddItem "18" .AddItem "19" .AddItem "20" .AddItem "21" .AddItem "22" .AddItem "23" .AddItem "24" End With End Sub With StartMinutes 'シフト終了分 .AddItem "" .AddItem "01" .AddItem "02" .AddItem "03" .AddItem "04" .AddItem "05" .AddItem "06" .AddItem "07" .AddItem "08" .AddItem "09" .AddItem "10" .AddItem "11" .AddItem "12" .AddItem "13" .AddItem "14" .AddItem "15" .AddItem "16" .AddItem "17" .AddItem "18" .AddItem "19" .AddItem "20" .AddItem "21" .AddItem "22" .AddItem "23" .AddItem "24" .AddItem "25" .AddItem "26" .AddItem "27" .AddItem "28" .AddItem "29" .AddItem "30" .AddItem "31" .AddItem "32" .AddItem "33" .AddItem "34" .AddItem "35" .AddItem "36" .AddItem "37" .AddItem "38" .AddItem "39" .AddItem "40" .AddItem "41" .AddItem "42" .AddItem "43" .AddItem "44" .AddItem "45" .AddItem "46" .AddItem "47" .AddItem "48" .AddItem "49" .AddItem "50" .AddItem "51" .AddItem "52" .AddItem "53" .AddItem "54" .AddItem "55" .AddItem "56" .AddItem "57" .AddItem "58" .AddItem "59" End With End Sub

試したこと

ここに問題に対して試したことを記載してください。

補足情報(FW/ツールのバージョンなど)

Excel VBA
ここにより詳細な情報を記載してください。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

coco_bauer

2018/05/06 13:04

".Listindex"に関する定義やコードが無いので、推測の域をでませんが、I39セルに値を入れているところは、「Sheet2.Range("I39").Value = Starthour.Listindex」の1行で足りるのではないですか? 質問に書くコードは、省略しないようにしてください。
rura

2018/05/06 13:10

はいそうです。ごめんなさい。
hatena19

2018/05/06 14:50

タグに「VBA」も追加したほうがいいと思います。
guest

回答2

0

下記でどうでしょう。

  • コンボボックスの初期設定を関数化。
  • リストデータはForループで設定。
  • ControlSourceプロパティを設定することで、Changeイベントは不要に。

vba

1Private Sub UserForm_Initialize() 2 'シフト開始時 3 Call InitComboBox(Me.Starthour, 24, "Sheet2!I39") 4 'シフト開始分 5 6 Call InitComboBox(Me.StartMinutes, 59, "Sheet2!K39") 7 8 'シフト終了時 9 Call InitComboBox(Me.Endhour, 24, "Sheet2!I40") 10 11 'シフト終了分 12 Call InitComboBox(Me.EndMinutes, 59, "Sheet2!K40") 13End Sub 14 15Public Sub InitComboBox(CB As ComboBox, EndNum As Long, sControlSource As String) 16 Dim i As Long 17 18 With CB 19 .ControlSource = sControlSource 20 .AddItem "" 21 For i = 0 To EndNum 22 .AddItem Format(i, "00") 23 Next 24 End With 25End Sub

投稿2018/05/06 14:44

編集2018/05/07 05:16
hatena19

総合スコア33715

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ComboBoxのリストは配列で設定できますので、1つの文字列に書いてSplitで分割して設定。

【例】
Dim arr As Variant: arr = Split("01,02,03,04,05,06,07,…長いので略", ",")
ComboBox1.List = arr

投稿2018/05/11 07:23

h.horikoshi

総合スコア505

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問