- ベストアンサー
エクセルVBA コンボボックス
今データ入力用のフォームmainがあります。 そこで複数のデータを入力していくのですが、そこでわからなくなりました。 入力用コンボボックスがひとつだけのときは Private Sub userform_Initialize() Dim 配列(2) 配列(0) = "データ1" 配列(1) = "データ2" 配列(2) = "データ3" 入力用コンボ.List = 配列 End Sub Private Sub 入力用コンボ_Change() MsgBox 入力用コンボ.ListIndex End Sub としていたのですが、複数になった場合の理屈を含めわかりません。 一つの入力用フォームにコンボボックスが複数あった場合はどうすればよいのですか?
- みんなの回答 (6)
- 専門家の回答
質問者が選んだベストアンサー
こんばんは。 LINERSさん、前回の続きを書いているのですね。 #1 の回答に対する補足 の場合だったら、このようになりますね。 Private Sub UserForm_Initialize() Dim myData1 As String, myData2 As String myData1 = "データ1,データ2,データ3" myData2 = "データA,データB,データC" 入力用コンボ1.List = Split(myData1, ",") 入力用コンボ2.List = Split(myData2, ",") End Sub もちろん、AddItem でもよいです。 hanahana3さんが、既にお書きになっていますが、 こんな風に省略しますね。 Private Sub UserForm_Initialize() With 入力用コンボ1 .AddItem "データ1" .AddItem "データ2" .AddItem "データ3" End With With 入力用コンボ2 .AddItem "データA" .AddItem "データB" .AddItem "データC" End With End Sub お好きなほうを。
その他の回答 (5)
- imogasi
- ベストアンサー率27% (4737/17069)
いろいろ回答が出ていますが、エクセルではコンボボックスのアイテムを定義するのは、「プロパティ」に「RowSource」があり、C1:C4のように定義します。 これをコンボボックスごとに定義すれば、配列などは考える必要ないですよ。 エクセルのシート上のセルの仕組みそのものが配列に似せた性格を持っています。 コンボのアイテムデータをセットするやり方は、エクセルのバージョンごと、アクセスかエクセルかVBかでややこしい点ですが。
お礼
お礼が遅くなりすみませんでした。 なるほどです、おかげ様で出来ました。有難うございました。
- hana-hana3
- ベストアンサー率31% (4940/15541)
>[AddItem]を使う場合はどうすれば Private Sub UserForm_Initialize() 入力用コンボ1.AddItem "データ1" 入力用コンボ1.AddItem "データ2" 入力用コンボ1.AddItem "データ3" End Sub ヘルプやネット、関連書籍などを参考に使い方を勉強してください。
お礼
お礼が遅くなりすみませんでした。 おかげ様で出来ました。有難うございました。
- Wendy02
- ベストアンサー率57% (3570/6232)
こんにちは。Wendy02 です。 コードを読んでいて基本的な疑問なのですが、どうして、「配列」という変数を使いまわしするのですか? そのまま見ている限りでは、配列から、ComboBox のList に渡す意味があまり感じません。他のモジュールで作った配列を、Userform 内の ComboBox に入れるなら分かるのですが、UserForm_Initialize からでは、単に、ComboBox に AddItem で入れるのと変わらないはずです。
お礼
お世話様です。 >どうして、「配列」という変数を使いまわしするのですか? すみません、こういうアプローチの仕方しか解らなかったのです。 有難うございました。
補足
よろしければ [AddItem]を使う場合はどうすれば良いのか教えていただけますでしょうか?
- hiroaki_0
- ベストアンサー率53% (131/245)
同じ名前の関数を複数宣言したらだめですよね? Private Sub UserForm_Initialize() Dim 配列(2) 配列(0) = "データ1" 配列(1) = "データ2" 配列(2) = "データ3" 入力用コンボ1.List = 配列 配列(0) = "データA" 配列(1) = "データB" 配列(2) = "データC" 入力用コンボ2.List = 配列 End Sub Private Sub 入力用コンボ1_Change() MsgBox 入力用コンボ1.ListIndex End Sub Private Sub 入力用コンボ2_Change() MsgBox 入力用コンボ2.ListIndex End Sub としたらいいのでは?
お礼
ご解答感謝します。 解りました!そういうことなんですね。 有難うございました。
- hana-hana3
- ベストアンサー率31% (4940/15541)
入力用コンボ1 入力用コンボ2 入力用コンボ3 他のコントーロール同様に、それぞれに名前を付ければ良いだけです。
お礼
ご解答有難うございます。 補足のようにしました、Private Sub名がダメみたいで、すみませんもう一度教えて下さい。
補足
下記のようにしてみましたが、実行しようとすると[Private Sub UserForm_Initialize()]←名前が不適当です。とエラーになります。 Private Sub UserForm_Initialize() Dim 配列(2) 配列(0) = "データ1" 配列(1) = "データ2" 配列(2) = "データ3" 入力用コンボ1.List = 配列 End Sub Private Sub 入力用コンボ1_Change() MsgBox 入力用コンボ1.ListIndex End Sub Private Sub UserForm_Initialize() Dim 配列(2) 配列(0) = "データA" 配列(1) = "データB" 配列(2) = "データC" 入力用コンボ2.List = 配列 End Sub Private Sub 入力用コンボ2_Change() MsgBox 入力用コンボ2.ListIndex End Sub
お礼
お礼が遅くなりすみませんでした。 本当にいつも丁寧なご解答有難うございます。おかげ様で出来ました。