• 締切済み

VBA コンボボックスのリストをセルから取得

VBAでのコンボボックスのリストをセルD7~セルの中にデータが空になっている所まで、セルから取得しコンボボックスに入れたいのですが・・ Dim celJ As Integer  celJ = 4  Do Until Cells(7,celJ).Value = ""   ComboBox1.AddItem (Worksheets("表").Cells(7, celJ).Value)   celJ = celJ + 1 Loop これでは失敗するのですが、どうすればいいでしょうか? 最初D7には何もデータが入っていません。どんどんD7~からデータを書き込んでいき、コンボボックスにも反映させていきたいのですがアドバイスお願い致します。

みんなの回答

  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.4

Excelはどのバージョンですか? エラーになる箇所はどこでしょう? またどのようなエラーなのでしょう コンボボックスはどちらのですか? コントロールツールボックス or フォーム D7に何も入力されていないなら Untilの条件が成立しないので Doループに入らないと思いますが ... このサブルーチンはどこに記述してあるのでしょう? 標準モジュールなら ComboBox1などを特定するのにSheet1などのワークシートオブジェクトが必要ですよ 同様のことがCellsにも言えます...

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

(1)VBAにも数種あって、どれか標題に書くこと。 読み進むとWorkSheetという言葉があるので、エクセルVBAらしい。 (2)エクセルVBAでは、プロパティにListFiiiRangeがあり、これを使うのが予想されている。 ワークシートのSheet1のG列にリストが有る場合の例 Sub test01() r = Range("G30").End(xlUp).Row MsgBox r MsgBox Range(Cells(2, "G"), Cells(r, "G")).AddressLocal() Worksheets("Sheet1").ComboBox1.ListFillRange = Range(Cells(2, "G"), Cells(r, "G")).Address End Sub Msgboxの行はテスト後削除 必要ならイベントプロシージュアーの赤に入れてください G30の部分はリストの最下限を見繕って変えてください。 増えた都度実行するならTarget.Rowを使えるでしょう。 ーー AddItemを使ってやってみました Sub test02() r = Range("G30").End(xlUp).Row MsgBox r 'Worksheets("Sheet1").ComboBox1.ListFillRange = "" Worksheets("Sheet1").ComboBox1.Clear For i = 2 To r Worksheets("Sheet1").ComboBox1.AddItem Cells(i, "G") Next i End Sub ーーー 既出回答でご指摘が有るように、コンボの乗る台紙(コンテナ?)に当たる (A)ワークシート (B)ユーザーフォーム(Form) 、グラフシートなどを指定しなければなりません。 上記は(A)の例です。 ーー (B)UserFormに載せたComboBoxの場合 http://www.excel.studio-kazu.jp/mag2/backnumber/mm20040706.html

回答No.2

A) D7 から横方向(E7, F7, G7...)に読み込むんですか? B) どう失敗するのでしょうか? C) コンボボックスはどこにおいてあるのでしょうか? どこぞのシートなのかユーザーフォームなのか。 「どんどん書き込んでいき」ってことはシート上ですか? D) 追加だけですか? D7~G7 に値が入っていてコンボボックスにも反映されているとして、E7 の値を変更した場合もコンボボックスに反映させますか? 基本的にトリガーとしては A) シートのイベントを使う B) 入力後、ユーザーがボタンを押すなど、明示的にトリガーを引く といった感じになると思います。 そしてコンボボックスへの反映は、毎回コンボボックスの全アイテムを削除してから全アイテムを追加しなおす。 "表" という名前のシートの D7 から横方向に入力した値を、同じく "表" シート上にあるコンボボックス "ComboBox1" に反映させる場合は WorkSheet "表" オブジェクトの Change イベントに Private Sub Worksheet_Change(ByVal Target As Range)   ComboBox1.Clear   Dim j As Integer   j = 4   Do Until Cells(7, j).Value = ""     Me.ComboBox1.AddItem Cells(7, j).Value     j = j + 1   Loop End Sub てな感じです。 なお html の都合上、上記コードのインデント部分は全角半角を使っても明日のでコピペは注意してください。

  • Ce_faci
  • ベストアンサー率36% (46/127)
回答No.1

こんばんわ Worksheets("表").Combobox・・・・・・・かな いきなり Combo じゃないです。

関連するQ&A