• ベストアンサー

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

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

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

  • ベストアンサー
  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.5

こんばんは。 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 お好きなほうを。

LINERS
質問者

お礼

お礼が遅くなりすみませんでした。 本当にいつも丁寧なご解答有難うございます。おかげ様で出来ました。

その他の回答 (5)

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.6

いろいろ回答が出ていますが、エクセルではコンボボックスのアイテムを定義するのは、「プロパティ」に「RowSource」があり、C1:C4のように定義します。 これをコンボボックスごとに定義すれば、配列などは考える必要ないですよ。 エクセルのシート上のセルの仕組みそのものが配列に似せた性格を持っています。 コンボのアイテムデータをセットするやり方は、エクセルのバージョンごと、アクセスかエクセルかVBかでややこしい点ですが。

LINERS
質問者

お礼

お礼が遅くなりすみませんでした。 なるほどです、おかげ様で出来ました。有難うございました。

  • hana-hana3
  • ベストアンサー率31% (4940/15541)
回答No.4

>[AddItem]を使う場合はどうすれば Private Sub UserForm_Initialize() 入力用コンボ1.AddItem "データ1" 入力用コンボ1.AddItem "データ2" 入力用コンボ1.AddItem "データ3" End Sub ヘルプやネット、関連書籍などを参考に使い方を勉強してください。

参考URL:
http://www.moug.net/skillup/nksw/nksw10-01.htm
LINERS
質問者

お礼

お礼が遅くなりすみませんでした。 おかげ様で出来ました。有難うございました。

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.3

こんにちは。Wendy02 です。 コードを読んでいて基本的な疑問なのですが、どうして、「配列」という変数を使いまわしするのですか? そのまま見ている限りでは、配列から、ComboBox のList に渡す意味があまり感じません。他のモジュールで作った配列を、Userform 内の ComboBox に入れるなら分かるのですが、UserForm_Initialize からでは、単に、ComboBox に AddItem で入れるのと変わらないはずです。

LINERS
質問者

お礼

お世話様です。 >どうして、「配列」という変数を使いまわしするのですか? すみません、こういうアプローチの仕方しか解らなかったのです。 有難うございました。

LINERS
質問者

補足

よろしければ [AddItem]を使う場合はどうすれば良いのか教えていただけますでしょうか?

  • hiroaki_0
  • ベストアンサー率53% (131/245)
回答No.2

同じ名前の関数を複数宣言したらだめですよね? 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 としたらいいのでは?

LINERS
質問者

お礼

ご解答感謝します。 解りました!そういうことなんですね。 有難うございました。

  • hana-hana3
  • ベストアンサー率31% (4940/15541)
回答No.1

入力用コンボ1 入力用コンボ2 入力用コンボ3 他のコントーロール同様に、それぞれに名前を付ければ良いだけです。

LINERS
質問者

お礼

ご解答有難うございます。 補足のようにしました、Private Sub名がダメみたいで、すみませんもう一度教えて下さい。

LINERS
質問者

補足

下記のようにしてみましたが、実行しようとすると[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

関連するQ&A