こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

締切り済みの質問

エクセルVBAで、コンボボックスのリストを変更したい

Excel97を使用しています。

フォーム上にコンボボックスを2個配置しています。
リストで使うシートは下記のようになっています。

  A列 B列   D列
1 aa BBB  AAA
2 bb CCC  BBB
3 cc CCC  CCC
4 dd AAA  
5 ee BBB  

初期化した時に、RowSourceとしてComboBox1にはA1:A5、ComboBox2にはD1:D3を設定しています。

ComboBox2で、例えば「BBB」を選択した時に、ComboBox1のリストが、B列に「BBB」と入力されている内容のみ(この場合「aa」と「ee」)がリストにセットされるようにはできませんでしょうか?

ComboBox1の内容とB列のセルの内容が一致したら、そのセルの1つ左のセルの内容をリストに追加する、というようなコードを書いたのですが「予期しないエラー」と出てしまいました。

ご存知の方、どうぞよろしくお願いいたします。

投稿日時 - 2004-11-09 17:14:13

QNo.1076976

すぐに回答ほしいです

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(1)

ANo.1

主導の方をComboBox1にしてますので、質問と逆ですが、
(データ例)
A列B列D列
aaBBBAAA
bbCCCBBB
ccCCCCCC
ddAAA
eeBBB
(ComboBox1のListFiliRange)
プロパティのListFiliRangeはD2:D4
(ComboBox1のClickイベント)
Private Sub ComboBox1_Click()
IDx = ComboBox1.ListIndex
s = ComboBox1.List(IDx)
ComboBox2.Clear
For i = 2 To 6
If Cells(i, "B") = s Then
ComboBox2.AddItem Cells(i, "A")
End If
Next i
End Sub
ComboBox1の▼をClickし「AAA」をクリックする。
するとComboBox2の▼をクリックすると「dd」が現れる。
ComboBox1のRowSourceとして設定すると自由度がなくなる。

投稿日時 - 2004-11-09 18:40:39

補足

今でているエラーは質問内容と異なってきたようですので、質問を締めさせていただきます。
どうもありがとうございました。

投稿日時 - 2004-11-11 13:46:37

お礼

ご回答どうもありがとうございます。
このブックは Private Sub Workbook_Open() 内で、
一度全てのセルの名前を削除し、改めてセル範囲に名前(A列データ、等)を付けてから、
Private Sub UserForm_Initialize() のところで、
ComboBox1.RowSource="A列データ"
としていました。
RowSourceをListFillRangeに変更すると、
「コンパイルエラー:メソッドまたはデータメンバが見つかりません。」と出てしまいました。
ListFillRangeでは、セルの名前は使えないのでしょうか? データの参照はできるだけ名前を使いたいのですが…。
すみませんがどうぞよろしくお願いします。

投稿日時 - 2004-11-10 10:47:06

あなたにオススメの質問