- ベストアンサー
エクセルVBAのコンボボックス
エクセル2002使用です。 生年月日とかを入力できるコンボボックスを作っているのですが、同じコンボボックスを5つ作ろうとしています。例えば和暦を入力するには Private Sub userform_initialize() With ComboBox(1) .AddItem "昭和" .AddItem "平成" End sub でうまくいくのですが、2個目から5つ目まで同じものを作成する場合、 With ComboBox(2) ・・・ With ComboBox(3) ・・・ と、コードを記述していかないと駄目なのでしょうか? できれば With ComboBox(1: 5) とか、 変数を使って Private Sub userform_initialize() Dim i As Integer For i = 1 To 5 With ComboBox(i) .AddItem "昭和" .AddItem "平成" End With Next End sub といった具合にまとめたいのですが、コンパイルエラーとなってしまいます。 初歩的な質問で申し訳ないのですが、よろしくお願いします。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
コンボボックスの別変数を用意してはいかがでしょうか。 Dim cmb(5) as ComboBox Set cmb(0) = ComboBox1 Set cmb(1) = ComboBox2 Set cmb(2) = ComboBox3 Set cmb(3) = ComboBox4 Set cmb(4) = ComboBox5 For i = 0 to 4 With cmb(i) .AddItem "昭和" .AddItem "平成" End With Next ※最初に変数に入れるところはちょっと面倒ですけどね。
その他の回答 (1)
- imogasi
- ベストアンサー率27% (4737/17069)
VBでは #1の ComboBox1をComno1等にして Private Sub Form_Load() Dim cmb(5) as ComboBox Set cmb(0) = Combo1 Set cmb(1) = Combo2 Set cmb(2) = Combo3 Set cmb(3) = Combo4 Set cmb(4) = Combo5 For i = 0 to 4 With cmb(i) .AddItem "昭和" .AddItem "平成" End With Next End Sub '---------------- エクセルVBAの場合 Sub text01() Dim ws As Object Set ws = Worksheets("sheet1") Dim cmb(5) As Object Set cmb(0) = ws.ComboBox1 Set cmb(1) = ws.ComboBox2 Set cmb(2) = ws.ComboBox3 Set cmb(3) = ws.ComboBox4 Set cmb(4) = ws.ComboBox5 For i = 0 To 4 With cmb(i) .AddItem "明治" .AddItem "大正" .AddItem "昭和" .AddItem "平成" End With Next End Sub で旨く行きました。 Set cmb(0) = ws.ComboBox1の5行を繰り回しでやろうと したが失敗。
お礼
imogasiさま 早速のお返事ありがとうございます。 他のテストまでしていただ誠にありがとうございました。 オブジェクト変数は少し面倒くさいですね。 今後ともよろしくお願いします。
お礼
grace2973様 早速のご回答ありがとうございました。 上手くいきました。 オブジェクト型変数が必要なんですね。 がんばって勉強します・・・・ 変数のところは面倒くさいですが、生年月日を全部すると非常に長くなりすぎるのでこれでも十分助かります。 本当にありがとうございました。 今後もよろしくお願いします。