VBAでコンボボックスにリストを設定する方法
- VBAを使用してコンボボックスにリストを設定する方法をご教授ください。
- 特定の列のデータをリストとしてコンボボックスに設定したい場合、どのようにするのが効率的でしょうか?
- Excel2003のバージョンで、コンボボックスにA列とC列のデータを設定する方法をお教えください。
- ベストアンサー
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 は連続的なデータを設定する場合のプロパティだと思うのですが、このように飛んだ列のデータを効率的に指定するにはどのようにするのが一番いいのでしょうか? 分かる方がいっらしゃいましたらご教授願います。
- tomokidayo
- お礼率58% (14/24)
- オフィス系ソフト
- 回答数1
- ありがとう数1
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
ComboBoxは、あまりRowSourceを取ることはしませんね。データを書き換える目的がないからですが。 Private Sub UserForm_Initialize() Dim Ar() Dim rng As Range Dim c As Variant, i As Long Set rng = Worksheets("Sheet1").Range("A2:A5") ReDim Ar(0 To rng.Rows.Count, 1) i = 1 'データ初期値 初期値0なら、上のrng.Rows.Count -1 にする For Each c In rng Ar(i, 0) = c.Value Ar(i, 1) = c.Offset(, 2).Value i = i + 1 Next c With ComboBox1 .ColumnCount = 2 .ColumnWidths = "50;50" .List = Ar End With Set rng = Nothing End Sub
関連するQ&A
- 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
- ベストアンサー
- Visual Basic
- EXCEL コンボボックスのリスト設定
リストインデックスが複数ある場合は動くのですが、 インデックスが0 もしくは1個しかない場合は、どのように処理を追加したらいいでしょうか。。 実行時エラー381 Lisプロパティを設定できません。プロパティの配列のインデックスが無効です、と メッセージが出ます。 いろいろ試してるのですがわかりません。 コンボボックスの値は別シートで参照先を指定しています。 ----------- Private Sub ComboBox3_DropButtonClick() Dim lRow As Long Dim i As Long, myCnt As Long Dim myData With Worksheets("部門名") lRow = .Range("O" & Rows.Count).End(xlUp).Row ’O列の最終行を確認 myData = .Range("O2:O" & lRow).Value ’コンボボックスのリストデータ End With With ComboBox3 .ColumnCount = 1 .ColumnWidths = "50" .List = myData End With End Sub
- 締切済み
- Visual Basic
- 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 というコードになると思うのですが、うまくいきません。 どうぞよろしくお願いいたします。
- ベストアンサー
- オフィス系ソフト
- リストボックスに複数シートのデーターを表示させる。
リストボックスに複数シートのデーターを表示させる。 下記の構文で複数表示はできたのですが、このListBox1のColumnCount7つ目に シートBのC列のデーターを表示させる方法をお教えください。 With ListBox1 .ColumnCount = 7 ↓ .ColumnWidths = "0;100;120;0;0;0;120" .RowSource = "シートA!B5:G" & Worksheets("シートA").Cells(Rows.Count, 5).End(xlUp).Row → .RowSource = "シートB!C5:C" & Worksheets("シートB").Cells(Rows.Count, 5).End(xlUp).Row .MultiSelect = fmMultiSelectMulti .ListStyle = fmListStyleOption End With よろしくお願いします
- ベストアンサー
- Visual Basic
- 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)のようなものを使ってデータが入っている最後の行を調べるのかと思いましたが、どうもうまくいきませんでした。 よろしくお願いします。
- ベストアンサー
- オフィス系ソフト
- リストボックスの複数データをセルに転記する
よろしくお願いします。 複数表示させたリストの2番目のリストを抜いて 1、3、4、5番目のリストを、 シートAの、C6からF6に転記する With ListBox1 .ColumnCount = 5 .ColumnWidths = "150;0;150;0;0" ↑ .RowSource = "シートA!C6:F" & Worksheets("シートA").Cells(Rows.Count, 5).End(xlUp).Row End With
- ベストアンサー
- その他(プログラミング・開発)
- VBAのコンボボックスのカラムについて
以下のようにしてコンボボックスのカラムにも文字列が入るようにしております。 With ComboBox1 .AddItem "hogehoge" ComboBox1.List(0, 1) = "aiueo" End With これによってコンボボックスをクリックして出てくるリストにはhogehogeとaiueoの両方が 出てきますが、これを選択するとhogehogeだけがコンボボックスに残され、 (0,1)にあった文字列は消えてしまいます。 リストから選択した後もコンボボックス内にカラムの文字を残すにはどのようにすればよろしいでしょうか?(できれば区切りありで) よろしくお願いします。
- ベストアンサー
- その他(プログラミング・開発)
- リストボックスのリストをシートのセル範囲で表示する
リストボックスのリストをシートのセル範囲で表示する おはようございます。 朝から行き詰っています。 リストは、シートのセル範囲で列の離れたリストを複数表示させる。 下のようにしたのですが、うまくできません。 よろしくアドバイスをお願いします。 With ListBox2 .ColumnCount = 3 .ColumnWidths = "150;150;150" .RowSource = "受注物件!C5:D,F5:F" & Worksheets("受注物件").Cells(Rows.Count, 5).End(xlUp).Row .MultiSelect = fmMultiSelectMulti .ListStyle = fmListStyleOption End With
- ベストアンサー
- Visual Basic
- エクセル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
- ベストアンサー
- オフィス系ソフト
- 連携する複数のコンボボックスに同じリストを設定
初心者なので質問がトンチンカンでしたらすみません ユーザーフォームにコンボボックスを計12個配置しています ComboBox1で選択した値に応じてComboBox2のリストが選ばれる ComboBox3で選択した値に応じてComboBox4のリストが選ばれる ・・・・・・・ ComboBox11で選択した値に応じてComboBox12のリストが選ばれる という風に設定したいのですが、コンボボックスの数だけリストの設定を するのが大変なので見よう見まねで下記の様にしてみたのですが全く 動きません。 UserForm_Initializeでイベント発生させてるので動かないのでしょうか? どこがおかしいのかご教授お願いします。 Private Sub UserForm_Initialize() Dim i As Variant Dim Ari As Variant Ari = Array("1", "3", "5", "7", "9", "11") For Each i In Ari If UserForm4.Controls("ComboBox" & i).Value = "車いす" Then With UserForm4.Controls("ComboBox" & i + 1) .ColumnCount = 5 .List = Worksheets("商品マスタ").Range("車いすテーブル").Value End With ElseIf UserForm4.Controls("ComboBox" & i).Value = "車いす付属品" Then With UserForm4.Controls("ComboBox" & i + 1) .ColumnCount = 5 .List = Worksheets("商品マスタ").Range("車いす付属品テーブル").Value End With ElseIf UserForm4.Controls("ComboBox" & i).Value = "特殊寝台" Then With UserForm4.Controls("ComboBox" & i + 1) .ColumnCount = 5 .List = Worksheets("商品マスタ").Range("特殊寝台テーブル").Value End With End If Next End Sub
- ベストアンサー
- Visual Basic
お礼
やはりrousourceはこのような用途には使用しないのですね! 前から悩んでいた事なので本当に助かりました! ありがとうございました。