• 締切済み

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

みんなの回答

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

主導の方を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として設定すると自由度がなくなる。

takahiro_
質問者

お礼

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

takahiro_
質問者

補足

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

関連するQ&A

  • 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 は連続的なデータを設定する場合のプロパティだと思うのですが、このように飛んだ列のデータを効率的に指定するにはどのようにするのが一番いいのでしょうか? 分かる方がいっらしゃいましたらご教授願います。

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

    またお世話になります。 多分簡単な疑問だと思うのですが・・・、 ユーザーフォームのコンボボックスの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 コンボボックスの条件分岐

    コンボボックスの条件分岐のコードが間違っているみたいで 調べても分からなかったので質問します。 やりたいこと 『マスタ』という名前のシート内のセルを参照し マスタシートには C2セル『A』C3セル『B』C4セル『C』と それぞれアルファベットがあります。 そこでコンボボックスを使用し コンボボックス22にC2~C4セルを選択できるようにし 例えばC2セルを選択したら コンボボックス21の参照範囲をマスタシート内の D2~D13セルを選択できるようにし C3セルを選択したら コンボボックス21の参照範囲をマスタシート内の E2~E13セルを選択できるようにしたいのです。 すいませんがコードを記載して頂けますと 助かります。 Private Sub UserForm_Activate() '----------------------- With ComboBox22 .ColumnCount = 2 .ColumnWidths = "90;10" .RowSource = "マスタ!C2:C4" End With '↑こうすればコンボボックス22のマスタシートのC2からC4まで値を選択できるようになります。 '------------------------わかりやすく区切っています。 '--------------------------------------- If UserForm1.ComboBox22 = "A" Then With ComboBox21 .ColumnCount = 2 .ColumnWidths = "90;10" .RowSource = "マスタ!D2:D13" End With End If '↑コンボボックス22の値が(C2セルの値がAなら)コンボボックス21をマスタシートのD2からD13までを選択できるようにしたい If UserForm1.ComboBox22 = "B" Then With ComboBox21 .ColumnCount = 2 .ColumnWidths = "90;10" .RowSource = "マスタ!E2:E13" End With End If '↑コンボボックス22の値が(C3セルの値がBなら)コンボボックス21をマスタシートのE2からE13までを選択できるようにしたい '----------------------------------------区切っています。 End Sub

  • 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でコンボボックスを使いシートのデータをリストアップする方法

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

  • VBA コンボボックス

    VBAコンボボックスで AAAを選択→処理A BBBを選択→処理B CCCを選択→処理C としている場合、 AAAを選択→処理Aの後、コンボボックスで再度AAAをクリックしても次の処理Aにいきません。いったんBBBをクリックしてしてAAAをクリックすると処理Aに行きますが、連続AAAをクリックして処理Aはできないでしょうか。 何か方法はありませんか? Private Sub ComboBox1_Change() If ComboBox1.Value = "AAA" Then   ’処理Aへ ElseIf ComboBox1.Value = "BBB" Then   ’処理Bへ Else   ’処理Cへ End If End Sub

  • EXCEL VBAのコンボボックスで日だけを表示する方法

    EXCELのVBAを使って経費の打ち込みをするマクロを作っています その中で、コンボボックスで日付を選択するようにしました コンボボックスに表示する日付はセルから「RowSource」で取り出しました セルの日付の入力形式は「2008/10/1」です そのセルの書式設定で表示形式を「ユーザー定義で d (日だけ表示)」としています なので、コンボボックスで選択して表示する際も日だけを表示したいのですがうまくいきません ComboBox1 = Format(ComboBox1, "d") とすると、コンボボックス内で数字がちらちらしてランダムに数字が表示されてしまいます ComboBox1 = Format(ComboBox1, "m月d日") この形だと、きちんと「10月1日」の様に表示されます Private Sub UserForm_Initialize() With ComboBox1 .RowSource = "sheet1!A1:A5" '日付のセル End With End Sub Private Sub ComboBox1_Change() ComboBox1 = Format(ComboBox1, "m月d日") End Sub 日だけを表示する方法をご教授ください

  • エクセル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

  • EXCEL VBA ユーザーフォームコンボボックスのRowSourceの設定方法について

    EXCEL VBAのユーザーフォーム内のコンボボックスのRowSourceの設定方法について質問があります。 基本的な質問かもしれませんが、うまく検索できませんでした。 「リスト一覧」シートに     A1  B1   C1 1行 りんご ばなな ぶどう 2行 100円  200円 300円 3行 110円  210円 310円 という値を入れる。 ユーザーフォーム内にコンボボックスを2つ設置し、 コンボボックス1の値が「リスト一覧」シートの1行の値と同じときに コンボボックス2のRowSourceを同じ列の2行、3行に設定する。 Private Sub ComboBox1_Change() Dim i As Integer  i = 1   Do Until Sheets("リスト一覧").Cells(1, i) = ComboBox1.Value    i = i + 1   Loop ComboBox2.RowSource = i列の2行目及び3行目.Address End Sub というコードになると思うのですが、うまくいきません。 どうぞよろしくお願いいたします。

  • VBA コンボボックス リスト表示について

    初心者ですいません エクセル VBAのフォームでコンボボックス3つと、テキストボックス3つがあります シートのListにA~F列までのデータがあり、コンボボックス1にA列のリストを表示し コンボボックス2にA列で選んだリストを参照したB列のリストを表示し、コンボボックス3 にコンボボックス1,2で選んだリストを参照し、C列のリストを表示した後、 コンボボックス1,2,3で選ばれたもののD列、E列分をテキストボックス1,2に 反映しようと思っておりますがうまくいきません どのようにしたらよいか、おしえてください 宜しくお願いします ちなみに、リストの内容は A列   B列   C列     D列   E列 テレビ 42インチ  HDD内蔵  台    100,000 テレビ 32インチ  BD内蔵   台     80,000 テレビ 19インチ          台     50,000 ビデオ HDD   1TB     台    100,000   ビデオ HDD   500GB    台     80,000 ビデオ BD            台     70,000 が、入ってます 希望は、質問の際のカテゴリ選択のようになればよいのですが... さらに、希望を言えば、自動で、行ごとに1,2,3...と番号を振るようにしており スピンボタンで番号を選べば、登録された上記のデータをフォームに反映させるようにしております これもうまくいきません お願いばかりで申し訳ありませんが 宜しくお願いします

専門家に質問してみよう