• ベストアンサー

エクセル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で行いたいのです。 得意先別・商品別・単価をピックアップしたいのです。 教えて下さい。 宜しくお願い致します。

  • aieeen
  • お礼率66% (123/185)

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

  • ベストアンサー
noname#11856
noname#11856
回答No.2

まず、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 としてみてください。 ・・・なるべくご本人が修正したほうがいいと思い、ソースは書かずに 説明してみましたが、私は説明下手なので、わからなかったら、 または私の勘違いなどありましたら、 また補足に入れてください。(^-^;

aieeen
質問者

お礼

ありがとうございます。 またお礼が遅れてすみません。 結果combobox1を選択後 sheetをチョイスさせ userform1.comboboxにて再度ROwSourceさせました。 ダイアログボックスが2つでる形になりましたが、 勉強になりました。 本当にありがとうございました。

その他の回答 (2)

  • happypoint
  • ベストアンサー率36% (521/1422)
回答No.3

こんにちは。 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

aieeen
質問者

お礼

お礼が遅れましてどうもすみませんでした。 ありがとうございます。 #1の方のアドバイスを見て自分なりに作成しました。 結果combobox1で選択した後に、userform.showにして 初めからcombobox2を選択できるようにしました。 そして、お礼をしようとしてビックリしました。 新しいsampleを記述して戴いているではないですか! しかも、私がやりたかった事ピッタリです。 どうもありがとうございます。 早速、作り直しを致します。

noname#11856
noname#11856
回答No.1

ComboBox1のChangeイベント(かな?)で ComboBox1のテキストが"AA"ならシート2の方、"BB"なら3 ・・・と、質問文そのままですが(^-^; エラーが出るとかですか?

aieeen
質問者

補足

返答ありがとうございます。 エラーはでないのです。 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を見て欲しいのです。 どうか返答を宜しくお願い致します。

関連するQ&A

  • EXCEL VBAのコンボボックスに取り込むリストについて

    すいません、EXCEL VBAのコンボボックスにデータを取り込む方法について教えていただきたいことがあります。 (1)「シート1」のA列にデータが入力されている (2)ユーザーフォームにコンボボックスを設置し、このA列のデータを取り込む。 このときにA列に入っているデータの数だけ取り組むにはどうしたらいいのでしょうか。 シート1    A列 1行 11 2行 21 3行 31  ・   ・  ・   ・ Private Sub UserForm_Initialize() ComboBox1.RowSource = Sheets("シート1").Range("?") End Sub ?の部分がわかりません。End(xlup)のようなものを使ってデータが入っている最後の行を調べるのかと思いましたが、どうもうまくいきませんでした。 よろしくお願いします。

  • エクセル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つ左のセルの内容をリストに追加する、というようなコードを書いたのですが「予期しないエラー」と出てしまいました。 ご存知の方、どうぞよろしくお願いいたします。

  • エクセルのマクロ コンボボックス他について

    下記のプログラムでユーザーフォームを作成しました。 まったく同じ記述で、他のブックでは、最終処理として、所定の箇所に選択した記号が表示(コピー)されるのですが、このブックでは表示されません。 しかし、エラーは出ていないので文法的には合っているようにおもいます。 それだけに、どこが違うのか尚更わかりません。 なお、Unload UserForm1 を Unload UserForm にした場合、 Sheets("基本データ作成").Range("C3") = UserForm1.ComboBox1.Value の UserForm1 を UserForm にした場合、 「実行時エラー424、オブジェクトが必要です。」のエラーが出ます。 どこが悪いのかわかりません。 どなたか、教えてください。 なお、エクセルは2003、OSはXPです。 Private Sub ComboBox1_Change() End Sub Private Sub ComboBox2_Change() End Sub Private Sub ComboBox3_Change() End Sub Private Sub CommandButton1_Click() Unload UserForm1 Sheets("基本データ作成").Range("C3") = UserForm1.ComboBox1.Value Unload UserForm1 Sheets("基本データ作成").Range("C4") = UserForm1.ComboBox2.Value Unload UserForm1 Sheets("基本データ作成").Range("C5") = UserForm1.ComboBox3.Value End Sub Private Sub UserForm_initialize() With ComboBox1 .AddItem "U" .AddItem "K" .AddItem "E" End With With ComboBox2 .AddItem "A" .AddItem "B" .AddItem "C" End With With ComboBox3 .AddItem "D" .AddItem "E" .AddItem "F" End With End Sub

  • VBAコンボボックスの内容が反映されない

    超初心者で、申し訳ございません。下記のようなコードを入力しましたが、 プルダウンは動くのですが、選択することが出来ません。誤りを指摘していただきたく、ご教授の程よろしくお願いします。 Private Sub UserForm_Initialize() With MainForm.ComboBox1 .List = Sheets("data").Range("A2:A11").Value .ListIndex = 0 End With Private Sub ComboBox1_Change() With MainForm.ComboBox1 .List = Sheets("data").Range("A2:A11").Value .ListIndex = 0 End With End Sub

  • エクセルVBA 別シートからのコンボボックス連動

    エクセルVBA 別シートからのコンボボックス連動について Book1(多人数入力用ブック) ・入力シート ・データ用シート Book2(反映用ブック) ・シート1 Book1にコンボボックスが2列 テキストボックスが2列 * 6行のユーザーフォームを作成しました。 コンボボックス1 コンボボックス2 テキストボックス1 テキストボックス2 コンボボックス3 コンボボックス4 テキストボックス3 テキストボックス4 ・ ・ ・ 左のコンボボックスで「あ」が選ばれたときには、右のコンボボックスで「あ行の顧客」・・・というように連動させたいと考えております。 データ用シートのデータは、   A      B          C 1 あ あ行で始まる顧客 か行で始まる顧客 2 か 3 さ 4 た 5 な 6 Private Sub UserForm_Initialize() Dim c As Range ComboBox1.RowSource = "データ用シート!A1:A9" End Sub Private Sub ComboBox1_Change() 'Dim Rng As Range 'Dim i As Long i = ComboBox1.ListIndex If i > -1 Then Dim c As Range Set Sh = Worksheets("データ用シート") Set Rng = Worksheets("データ用シート").Range("B2:I30") ComboBox2.Value = "" ComboBox2.RowSource = Rng.Columns(i + 1).Address End If End Sub 上記コードですと、コンボボックス2が入力シートのデータを表示してしまいうまくいきません。 欲をいえば、 Book1(多人数入力用ブック)入力シートの特定セルに コンボボックス2・テキストボックス1 コンボボックス4・テキストボックス3というように続けて1セルに反映 Book2(反映用ブック)シート1に コンボボックス2・テキストボックス1・テキストボックス2 を各1セル 1行に反映させたいと考えております。 まったく知識がないのですが 仕事上どうしても必要となったので、各種サイトを見よう見真似でやっております。 ご助力いただければ幸いです。

  • excelのコンボボックスでの階層リスト表示

    (すいません、再投稿します) excelのコンボボックスで、階層にわけてリスト表示させたいのですが、うまくいきません。 数日悩んでまして、どなたか教えてもらえませんか。 シート1:会社名    1列目:会社名  2列目:ID シート2:事業部名   1列目:事業部名 2列目:ID シート3:部門名     1列目:部門名  2列目:ID シート4:担当名     1列目:担当名  2列目:ID ユーザーフォームにそれぞれのコンボボックスを作っています。 ComboBox1:会社名     TextBox1:ID ComboBox2:事業部名    TextBox2:ID ComboBox3:部門名     TextBox3:ID ComboBox4:担当名     TextBox4:ID   たとえば会社名がAのときは、ComboBox2ではAの事業部だけが表示される、というようなかんじです。 同時に隣のIDももってこないといけない為に、苦戦しています。助けてください。。。。 下記記述は3番、まではうまくいくのですが、”4番TextBox2の値代入”がうまくいきません。 -------- Option Explicit Dim シート名 As String Dim 行 As Long Dim 範囲 As String Dim 事業部範囲 As String '-1---ComboBox1------------------- Private Sub ComboBox1_DropButtonClick() シート名 = "会社名" Worksheets(シート名).Activate 'ワークシートをアクティブにする Range("A1").CurrentRegion.Select 'アクティブセル領域を選択する With Selection 行 = .Rows.Count '同上領域の行数を取得する 範囲 = .Cells(1, 1).Address & ":" & .Cells(行, 1).Address '同上領域のアドレスを変数に End With ComboBox1.RowSource = シート名 & "!" & 範囲 'コンボボックスのリストのソースを設定する End Sub '-2----ComboBox1------------------- Private Sub ComboBox1_Click() 'コンボボックス上でクリックされると実行される シート名 = "会社名" 行 = ComboBox1.ListIndex + 1 'コンボボックスで選択された行 + 1 TextBox1.Text = Worksheets(シート名).Cells(行, 2) '対応するセルの値をテキストボックスに End Sub '-3----ComboBox2------------------- Private Sub ComboBox1_Change() ' ComboBox1 が変化した時の処理 シート名 = "事業部名" Dim si As Integer With UserForm1 .ComboBox2.Text = "" si = .ComboBox1.ListIndex ' ComboBox1 の何番目が選択されたかを得る Select Case si Case 0 ' 0番が選択されていたらComboBox2 の内容 Worksheets(シート名).Activate Range("A1:A6").CurrentRegion.Select With Selection 事業部範囲 = .Cells(1, 1).Address & ":" & .Cells(6, 1).Address End With ComboBox2.RowSource = シート名 & "!" & 事業部範囲 Case 1 Worksheets(シート名).Activate Range("A7:A11").CurrentRegion.Select With Selection 事業部範囲 = .Cells(7, 1).Address & ":" & .Cells(11, 1).Address End With ComboBox2.RowSource = シート名 & "!" & 事業部範囲 Case 2 Worksheets(シート名).Activate Range("A12:A15").CurrentRegion.Select With Selection 事業部範囲 = .Cells(12, 1).Address & ":" & .Cells(15, 1).Address End With ComboBox2.RowSource = シート名 & "!" & 事業部範囲 Case 3 Worksheets(シート名).Activate Range("A16:A25").CurrentRegion.Select With Selection 事業部範囲 = .Cells(16, 1).Address & ":" & .Cells(25, 1).Address End With ComboBox2.RowSource = シート名 & "!" & 事業部範囲 End Select End With End Sub '---4--TextBox2に値代入-------------------- Private Sub ComboBox2_Click() Dim si As Integer With UserForm1 .ComboBox2.Text = "" si = .ComboBox2.ListIndex ' ComboBox2 の何番目が選択されたかを得る Select Case si Case 0 ' 0番が選択されていたらComboBox2 の内容 Range("A1:A6") シート名 = "事業部名" Worksheets(シート名).Activate Range("A1:B6").CurrentRegion.Select With Selection 事業部範囲 = .Cells(1, 2).Address & ":" & .Cells(6, 2).Address End With '行 = ComboBox2.ListIndex + 1 TextBox2.Text = Worksheets(シート名).Cells(事業部範囲, 2) Case 1 Case 2 Case 3 End Select End With End Sub '----5-Close-------------------- Private Sub UserForm_Deacti Unload UserForm1 End Sub

  • コンボボックスのリストについて(エクセル、マクロ)

    またお世話になります。 多分簡単な疑問だと思うのですが・・・、 ユーザーフォームのコンボボックスのRowsourceの 設定に関して可変式にしたいので以下のように マクロ(一部を抜粋)を組んでみました。 Dim b As Integer b = 2 Do b = b + 1 Loop Until Sheets(3).Cells(b, "A") = "" ComboBox1.RowSource = Range(Cells(2, "A"), Cells(b - 1, "C")) が、「型が一致しません」と出てうまくいきません。 どうしたらよいでしょうか? また、 A列   B列 C列 2005/1/1 東京 10 ・ ・ ・ のようにシートには並んでいるものを コンボボックスのリストとして取り入れたいのですが 変な5桁の数字しか現れず(たぶんこの数字は 2005/1/1を標準値化した数値なのでしょうが) 3つきれいにそろって表れません。 こちらの方も解決していただけないでしょうか?

  • エクセルVBAコンボボックスについて

    図の左のように、商品リスト欄のセルA3から下方向に大分類(A16まで14種類) セルB3~O3(Bから数えて14個目のO)列から下方向に小分類があります。 P2~P11には1から10までの数字が入っています。 図の右側がユーザフォームで、コンボボックスの番号を入れています。 コンボボックス「1.4.・・・28.」までは大分類を選べるようにして、 コンボボックス「2.5.・・・29.」までは左の大分類に応じた小分類の値を表示させたいと思っています。 大分類「111」→小分類「あ~そ」 大分類「222」→小分類「た~と」といった具合です。 そのコンボボックスの値を指定したセルに入力しようと思っています。 下のように記述した結果、問題が発生しました。 (1)大分類で14個ほどあるリストの3つほどしかでてこない。 (2)Select Caseの構文を使用していて、大分類が14個だから「Case 13」までと しているが、「大分類の数-1」までの変えられる数までにしたい。 アドバイスをいただけると助かります。 ------------------------------------------------------------------ Private Sub UserForm_Initialize() Dim MyVar1 As Variant MyVar1 = Sheets("商品リスト").Range("A3:A" & Range("A3").End(xlDown).Row) Dim MyVar20 As Variant MyVar20 = Sheets("商品リスト").Range("P2:P" & Range("P2").End(xlDown).Row) '種類欄を指定 With ComboBox1 .List() = MyVar1 End With ※・・・(省略)・・・ コンボボックス4から25まで※ With ComboBox28 .List() = MyVar1 End With '数量欄を指定 With ComboBox3 .List() = MyVar20 End With ※・・・(省略)・・・ コンボボックス6から27まで※ With ComboBox30 .List() = MyVar20 End With End Sub '1番目 Private Sub ComboBox1_Change() Dim MyVar1 As Variant ※・・・(省略)・・・ MyVar2~13 As Variant※ Dim MyVar14 As Variant Dim MyVar20 As Variant MyVar1 = Sheets("商品リスト").Range("A3:A" & Range("A3").End(xlDown).Row) ※・・・(省略)・・・ B列からN列まで※ MyVar15 = Sheets("商品リスト").Range("O3:O" & Range("O3").End(xlDown).Row) MyVar20 = Sheets("商品リスト").Range("P2:P11") Select Case ComboBox1.ListIndex Case 0 With ComboBox2 .List() = MyVar2 End With ※・・・(省略)・・・ Case1~ Case12 ※ Case 13 With ComboBox2 .List() = MyVar15 End With End Select End Sub

  • VBAを使用しコンボボックスにリストを設定する方法

    いつもお世話になっております。 現在コンボボックスにリストを設定する方法について悩んでいます。 バージョンはExcel2003です。 コンボボックスに指定したい列がA列とB列なら通常下記のようにすると思います。     With ComboBox1       .ColumnCount = 2       .ColumnWidths = "50;50"       .RowSource = "Sheet1!A2:B5"     End With ただ今回はA列とC列をリストに設定したいと思い、下記のような設定にしたのですがうまく設定できません。     With ComboBox1       .ColumnCount = 2       .ColumnWidths = "50;50"       .RowSource = "Sheet1!A2:A5;C2:C5"     End With そもそもRowSource は連続的なデータを設定する場合のプロパティだと思うのですが、このように飛んだ列のデータを効率的に指定するにはどのようにするのが一番いいのでしょうか? 分かる方がいっらしゃいましたらご教授願います。

  • エクセルVBAコンボボックスについて

    リスト欄のセルA3から下方向に大分類(A16まで14種類)があります。 コンボボックス1に大分類をリスト化して選べるようにしたいと思っています。 しかし、(1)のようにVBAを記入して、マクロを実行すると、コンボボックス1には、 大分類で14個あるリストの4つしか出てきません。 -(1)(抜粋)--------------------------------------------------------- Private Sub UserForm_Initialize() Dim MyVar1 As Variant MyVar1 = Sheets("リスト").Range("A3:A" & Range("A3").End(xlDown).Row) ------------------------------------------------------------------ (2)のように記述してマクロを実行すると、コンボボックス1には、14個全てが表示されます。 -(2)(抜粋)--------------------------------------------------------- Private Sub UserForm_Initialize() Dim MyVar1 As Variant MyVar1 = Sheets("リスト").Range("A3:A16") ------------------------------------------------------------------ 原因がわかる方、いらっしゃいませんか? 出来れば、リスト欄のA列は14個よりも増える可能性があるので、Range("A3:A" & Range("A3") .End(xlDown).Row)のような範囲の指定がしたいです。 なお、リストシートのA3を選択して、「Ctrl+↓」でA16が選択されました。

専門家に質問してみよう