- ベストアンサー
エクセルVBAでコンボボックスを使いシートのデータをリストアップする方法
VBAの詳しい方教えて下さい。 ConboBox1でSheets1のA列に入ってるデータをピックアップします。 そのピックアップされたのがAAなら 次のConboBox2でSheets2のA列に入ってるデータをピックアップして BBならSheets3のA列に入ってるデータをピックアップたいのですが、どのようにすれば良いのでしょうか。 ComboBox1.RowSource = Sheets("Sheets1").Range("A1:A2").Address もしComboBox1にAAが入ったら ComboBox2.RowSource = Sheets("Sheets2").Range("A1:A2").Address そして また もし ComboBox1にBBが入ったら ComboBox2.RowSource = Sheets("Sheets3").Range("A1:A2").Address これをひとつのUserFormで行いたいのです。 得意先別・商品別・単価をピックアップしたいのです。 教えて下さい。 宜しくお願い致します。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
まず、test もしくは test2 というのは変数ですか? testという文字列と比較したいのであれば、"test"となります。 あと、RowSource指定時にAddressプロパティを指定してしまうと "$A$1:$A$4"のような文字列になってしまうと思うのですが。。。 RowSource指定には(ComboBox1の設定時も同じく)文字列を使用するようにしてください。 ComboBox1.RowSource = "CCB!A3:A4" ComboBox2.RowSource = "NT!A3:A4" ComboBox2.RowSource = "98!A3:A4" となります。『シート名!』という書き方がポイントですね。 ここは上手く動いているのであれば、そのままでも結構なんですが。 そして、イベントですが、現在、UserForm_Activateを使用してらっしゃるようですね。 UserForm_InitializeでComboBox1.RowSourceの設定を行い、 ComboBox1_ChangeでComboBox1.TextをString型の変数に取得する (現在、Dim t As VariantですがDim t As Stringに変更)ようにして、 If t = "test" Then ~ ElseIf t = "test2" Then ~ End If としてみてください。 ・・・なるべくご本人が修正したほうがいいと思い、ソースは書かずに 説明してみましたが、私は説明下手なので、わからなかったら、 または私の勘違いなどありましたら、 また補足に入れてください。(^-^;
その他の回答 (2)
- happypoint
- ベストアンサー率36% (521/1422)
こんにちは。 ComboBox2のRowSourceプロパティを、 ComboBox1の選択値に応じて動的に変更したいということですか? ちょっと内容的にあっているか自信がありませんが、 こんな内容でどうでしょうか。 ちなみに、 ActivateイベントでComboBox2のRowSourceを設定しても、 ComboBox1の変更に、ComboBox2の内容はリンクして変化しません。 Changeイベントを使うべきでしょう。 今回のサンプルは、 Combobox1の内容を 「Test」「Test2」といった「テキスト」ではなく 「1(行目)」「2(行目)」といった「インデックス値」で取得しています。 この辺の仕様が希望と異なるときは、修正してみてください。 Option Explicit Private Sub ComboBox1_Change() Dim varIndex1 As Variant varIndex1 = ComboBox1.ListIndex + 1 '何行目をセレクトしたか取得 Select Case varIndex1 Case Is = 0 'リストにない項目を選択したとき ComboBox2.RowSource = "" Case Is = 1 'リストの1行目を選択したとき ComboBox2.RowSource = "NT!A3:A4" Case Is = 2 'リストの2行目を選択したとき ComboBox2.RowSource = "98!A3:A4" End Select End Sub Private Sub UserForm_Initialize() ComboBox1.RowSource = "CCB!A3:A4" End Sub
お礼
お礼が遅れましてどうもすみませんでした。 ありがとうございます。 #1の方のアドバイスを見て自分なりに作成しました。 結果combobox1で選択した後に、userform.showにして 初めからcombobox2を選択できるようにしました。 そして、お礼をしようとしてビックリしました。 新しいsampleを記述して戴いているではないですか! しかも、私がやりたかった事ピッタリです。 どうもありがとうございます。 早速、作り直しを致します。
ComboBox1のChangeイベント(かな?)で ComboBox1のテキストが"AA"ならシート2の方、"BB"なら3 ・・・と、質問文そのままですが(^-^; エラーが出るとかですか?
補足
返答ありがとうございます。 エラーはでないのです。 Private Sub Userform_Activate() Dim t As Variant ComboBox1.RowSource = Sheets("CCB").Range("A3:A4").Address t = ComboBox1 If t = test Then Sheets("NTT").Select ComboBox2.RowSource = Sheets("NT").Range("A3:A4").Address ファンクション8で見ますとELSEIFからENDIFまで飛ばされてしまいます。 ElseIf t = test2 Then Sheets("DDI").Select ComboBox2.RowSource = Sheets("98").Range("A3:A4").Address End If End Sub 結果コンボボックス1でTESTかTEST2を入れると どちらも、シートNTを見てしまいます。 TEST2の時はシート98を見て欲しいのです。 どうか返答を宜しくお願い致します。
お礼
ありがとうございます。 またお礼が遅れてすみません。 結果combobox1を選択後 sheetをチョイスさせ userform1.comboboxにて再度ROwSourceさせました。 ダイアログボックスが2つでる形になりましたが、 勉強になりました。 本当にありがとうございました。