- 締切済み
エクセル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つ左のセルの内容をリストに追加する、というようなコードを書いたのですが「予期しないエラー」と出てしまいました。 ご存知の方、どうぞよろしくお願いいたします。
- みんなの回答 (1)
- 専門家の回答
みんなの回答
- imogasi
- ベストアンサー率27% (4737/17069)
主導の方をComboBox1にしてますので、質問と逆ですが、 (データ例) A列 B列 D列 aa BBB AAA bb CCC BBB cc CCC CCC dd AAA ee BBB (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として設定すると自由度がなくなる。
お礼
ご回答どうもありがとうございます。 このブックは Private Sub Workbook_Open() 内で、 一度全てのセルの名前を削除し、改めてセル範囲に名前(A列データ、等)を付けてから、 Private Sub UserForm_Initialize() のところで、 ComboBox1.RowSource="A列データ" としていました。 RowSourceをListFillRangeに変更すると、 「コンパイルエラー:メソッドまたはデータメンバが見つかりません。」と出てしまいました。 ListFillRangeでは、セルの名前は使えないのでしょうか? データの参照はできるだけ名前を使いたいのですが…。 すみませんがどうぞよろしくお願いします。
補足
今でているエラーは質問内容と異なってきたようですので、質問を締めさせていただきます。 どうもありがとうございました。