• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:コンボボックスのリストのテーブルからの直接取得の方法)

コンボボックスのリストのテーブルからの直接取得の方法

このQ&Aのポイント
  • Excelでコンボボックスのデータ取得を行う方法として、ワークシートに書き出す方法やレコードセットしたテーブルのデータを直接取得する方法があります。
  • 直接取得する方法としては、RowSourceType = "Field List"を使用してComboBoxのRowSourceにRecordsetを指定する方法が考えられます。
  • しかし、コンボボックスのリストに直接指定する方法の詳細については、質問文内では明示されていません。

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

  • ベストアンサー
  • KenKen_SP
  • ベストアンサー率62% (785/1258)
回答No.3

こんにちは。 試しに、下記手順を行って下さい。 1. process.mdb と同じフォルダ内に新規ブックを作成 2. シート名を [入力sheet] に変更 3. D110 セル付近に ComboBox を一つ書き込む   ※[表示]-[ツールバー]-[コントロール ツールボックス]から 4. ワークシート"入力sheet" モジュールに下記ソースをコピペ 以上。 ' 場所: ワークシート"入力sheet" モジュール Option Explicit Private Const MDB_NAME = "process.mdb" ' MDB ファイル名 Private Sub Worksheet_Change(ByVal Target As Range)      Dim Sql  As String   Dim sCode As String      ' 値が変化したセルが D100 だったら実行   If Target.Address = "$D$100" Then     ' 県名コード取得     sCode = Me.Range("D100").Text     ' Sql 生成     Sql = ""     Sql = Sql & "SELECT [顧客名]"     Sql = Sql & " FROM [002顧客名]"     If sCode = "" Then       Sql = Sql & ";" ' 全件出力     Else       Sql = Sql & " WHERE [県名] LIKE '" & sCode & "%';"     End If     ' コンボボックスにデータ追加     Call ComboBoxAddItem(Sql)   End If End Sub ' コンボボックスにアイテムを追加します Private Sub ComboBoxAddItem(ByVal Sql As String)      Dim Cn   As ADODB.Connection   Dim Rs   As ADODB.Recordset   Dim sConStr As String      ' MDB 接続文字列 -----------------------------------------------   sConStr = "Provider=Microsoft.Jet.OLEDB.4.0;" _       & "Data Source=" & ThisWorkbook.Path & "\" & MDB_NAME   '---------------------------------------------------------------   Set Cn = New ADODB.Connection   Set Rs = New ADODB.Recordset   ' DB 接続を開く   Cn.Open sConStr   ' 読み取り専用でレコードセットを作成   Rs.Open Sql, Cn, adOpenStatic, adLockReadOnly   ' ComboBox に追加   Me.ComboBox1.Clear   If Not Rs.EOF Then     Rs.MoveFirst     While Not Rs.EOF       Me.ComboBox1.AddItem Rs![顧客名]       Rs.MoveNext     Wend     Rs.Close: Set Rs = Nothing   End If   Cn.Close: Set Cn = Nothing    End Sub

snobman3
質問者

お礼

ご回答ありがとうございます。 こちらはまだうまくいかないのですが、推測とヘルプ参照だけでは、対応出来ないレベルのようで、VBAのデータベース関連の所を今勉強中です。いま少し時間を下さい。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (2)

  • KenKen_SP
  • ベストアンサー率62% (785/1258)
回答No.2

#1 補足について Excel VBA の話ですよね? コントロール名はご自分のものに合わせて下さい。 それから、該当データが1件も無い場合の例外処理も必要ですよ。 ComboBox とはユーザーフォーム上ですか? それともワークシート上に [表示]-[ツールバー]-[コントロール ツールボックス]で書いたものですか?

snobman3
質問者

補足

御返事ありがとうございます。 ComboBoxは、ワークシート上に書いたものです。 VBAは、標準モジュールでなく、Worksheets("入力sheet")に書いてます。 宜しくお願いいたします。

全文を見る
すると、全ての回答が全文表示されます。
  • KenKen_SP
  • ベストアンサー率62% (785/1258)
回答No.1

こんばんは。KenKen_SP です。 Excel の ComboBox なら AddItem するとか。 ComboBox1.Clear objrs.MoveFirst While Not objrs.EOF   ComboBox1.AddItem Rs![顧客名]   objrs.MoveNext Wend 試してないし、回答はコピペではなく直打ちなので若干ミスがあるが あるかもしれませんが、こんな感じです。 AddItem 以外ではご質問にあるとおり、セル経由の ListFillRange を 使うか、レコードセットの内容を一度配列にしまって List を使います。 が、、これは「同一内容を別の場所にコピー」するという点でともに 効率の悪い方法ですから最初から AddItem すると良いと思います。

snobman3
質問者

補足

御返事遅れ大変失礼しました。 試してみたのですが、 1行目で ComboBox1.Clear (予期せぬエラー) が発生、その後1行目を削除して動かしたら objrs.MoveFirst While Not objrs.EOF   ComboBox1.AddItem Rs![顧客名]   (オブジェクトが必要です) と、ここでエラーメッセージがでます。 いろいろ試したのですが、うまくいきませんでした。 追加アドバイスをお願いいたします。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • EXCELでSQL構文利用の方法

    EXCEL-VBAで、WHERE文での、コンボボックスの値の取得方法がよく分かりません。回答集に似たような質問がありましたが、基礎が無い為、前に進めません。都合のよい事を申しますが教えてください。 Sub テスト2( ) Dim objcon As ADODB.Connection Dim objrs As ADODB.Recordset Dim i As Integer Set objcon = New ADODB.Connection Set objrs = New ADODB.Recordset objcon.Open _ "Provider=Microsoft.Jet.OLEDB.4.0;" & _ "Data Source=" & ThisWorkbook.Path & "\process.mdb" With objrs .ActiveConnection = objcon .Source = "select * from 002顧客名 where 県名 = Worksheets[sheet1!].ComboBox1.Text;" 'コンボボックスの値の取得ができません .Open End With For i = 1 To objrs.Fields.Count Cells(1, i).Value = objrs.Fields(i - 1).name Next Range("a30").CopyFromRecordset objrs objrs.Close objcon.Close End With これ以下で、変数宣言するには、何が足りないのか教えてください objcon.Open _ "Provider=Microsoft.Jet.OLEDB.4.0;" & _ "Data Source=" & ThisWorkbook.Path & "\process.mdb" Dim name As Variant name = Worksheets("sheet1").ComboBox1.Text With objrs .ActiveConnection = objcon .Source = "select * from 002顧客名 where 県名 = name;" .Open End With 以上、なにとぞご指示をお願いします。

  • 同じコンボボックス、リストボックスを使うには?

    よろしくお願いします。 今、ユーザーフォームを使って製造計画表を作っています。 コンボボックスで会社名、リストボックスで会社ごとの製品名を選択させるとこまで出来ました。 1日に3つの製品を作ることが出来るので、同じ中身のコンボボックス、リストボックスを使って3つ作りたいと思っています。 ユーザーフォームの形的にはこのような感じですが。 1. コンボボックス  リストボックス 2. コンボボックス  リストボックス 3. コンボボックス  リストボックス 今は、1.のとこだけは出来たのですが、2.3.は1.と同じコードをコピーして必要と思われるとこだけをコンボボックス2と変えたりしてみたのですが、上手くいきませんでした。こんなコードですが。 Private Sub UserForm_initialize() 'ComboBox1セット Dim ico As Long ico = 1 With ThisWorkbook.Worksheets("Sheet1") Do While .Cells(1, ico) <> "" Me.ComboBox1.AddItem .Cells(1, ico).Value ico = ico + 1 Loop End With Me.ComboBox1.SetFocus End Sub Private Sub ComboBox1_Change() 'ListBox1セット Dim ico As Long 'Me.ListBox1.Clear ico = Me.ComboBox1.ListIndex + 1 With ThisWorkbook.Worksheets("Sheet1") Me.ListBox1.List = .Range(.Cells(2, ico), _ .Cells(.Cells(Rows.Count, ico).End(xlUp).Row, ico)).Value End With End Sub VBAも初めたばかりで質問の内容もわかりづらいとも思いますが、よろしくお願いします。

  • コンボボックスに取得したレコードデータを表示したい

    環境:winxp、vb6、access2000 以下の様にアクセスから抽出したレコード"rstdata"をCombo1のデータソースに指定してコンボボックスに表示したいのですが、何も表示されません。 原因が分かる方がいらっしゃればご教示ください。 *******コード******** Dim cn As New ADODB.Connection Dim cmd As ADODB.Command Dim rstdata As ADODB.Recordset Dim strSQLdata As String Set cn = New ADODB.Connection cn.ConnectionString = _ "Provider=Microsoft.Jet.OLEDB.4.0;" & _ "Persist Security Info=False;" & _ "Data Source=aaa.mdb;" & _ "Mode=Read" cn.Open Set rstdata = New ADODB.Recordset strSQLdata = "Select 項目名 From T_SHIKENDATA order by ID" rstdata.Open strSQLdata, cn, adOpenStatic Set Combo1.DataSource = rstdata rstdata.Close Set rstdata = Nothing cn.Close Set cn = Nothing

  • 2のコンボボックスの関連

    環境:Access2003 VB6.0 2つのコンボボックス関連させたいが、やり方がよくわからないです。 たとえばSCHOOLというテーブルに1YearとClassのフィールドがあります。そこで、YearのコンボボックスでYearフィールドの値を選択して、Classのコンボボックスに選択された値に対する値をセットしたいです。 例(1年と選択して、2個目のコンボボックスにA、B、C、Dとセットしたいです。 初心者で、説明がわかりにくいかもしれないですが、よろしくお願いします。 以下データベースの接続設定 Dim m_formlording As Integer Dim CONN As ADODB.Connection 'レコードセット Dim RECO As ADODB.Recordset Private Sub ConnOpen() Set CONN = New ADODB.Connection '接続文字列の設定 CONN.ConnectionString = "provider=Microsoft.jet.oledb.4.0;" _& "data source=D:\DB\dbstudent.mdb" 'コネクションをオープン CONN.Open End Sub Private Sub RecoSet() Set RECO = CONN.Execute("Select * From SCHOOL") End Sub 詳しい方、ご教授ください。

  • レコードセットのオープン

    修行中のものです。。。 エラーが発生してしまします。 間違いの点をお教え下さい。 自分的には”レコードセットのオープン”がいまいち分かりません。 【 objCon.Open 】 Dim objCon Dim objRS '##### コネクションオブジェクトの生成 ##### Set objCon = Server.CreateObject("ADODB.Connection") '##### レコードセットオブジェクトの生成 ##### Set objRS = Server.CreateObject("ADODB.Recordset") '##### 接続用パレメータの設定 ##### objCon.Provider = "Microsoft.Jet.OLEDB.4.0" '##### MDBの絶対パス指定 ##### objCon.ConnectionString = (Server.MapPath("/") & "データベース") '##### コネクションのオープン ##### objCon.Open '##### データ参照 ##### objRS = "select [ID],[NAME],[URL],[CM1],[CM2],[CM3] from SITE_DATA" %> レコード件数 <%=objRS.RecordCount%> <hr> <% '##### レコードセットのクローズ ##### objRS.Close Set objRS = Nothing '##### コネクションのクローズ ##### objCon.Close Set objCon = Nothing %> お願いします

  • コンボボックスのリスト全てをセルに書き出す

    private sub UserForm_Initialize()  me.combobox1.list = get_unique_and_visible_list(range("A2:A17"))  me.combobox2.list = get_unique_and_visible_list(range("B2:B17"))  me.combobox3.list = get_unique_and_visible_list(range("C2:C17"))  me.combobox4.list = get_unique_and_visible_list(range("D2:D17"))  me.combobox5.list = get_unique_and_visible_list(range("E2:E17"))  me.combobox6.list = get_unique_and_visible_list(range("F2:F17"))  me.combobox7.list = get_unique_and_visible_list(range("G2:G17"))  me.combobox8.list = get_unique_and_visible_list(range("H2:H17")) end sub private function Get_Unique_and_Visible_List(byref Target as range) as variant ’指定のセル範囲から可視セルを抽出し一意のリストを返す  dim h as range  dim myDic as object  set mydic = createobject("Scripting.Dictionary")  for each h in target.specialcells(xlcelltypevisible)   mydic(h.value) = 1  next  get_unique_and_visible_list = mydic.keys end function 上記方法で、コンボボックスのデータを取得しております。 取得したコンボボックスのリストを Sheet5のIVセルなどに書き出そうと思います。 この場合、 For i=1 To me.combobox1!="" step 1  Worksheets("Sheet5").Range("IV" & i)=me.combobox1.List( i, 0) Next こういった方法にすれば書き出せるのでしょうか? もっと簡単に書き出す方法がありそうですが、中々思いつかないので… 何か知恵をお菓子頂けると嬉しいです! よろしくお願い致します。

  • DBカラムをコンボボックスに設定する方法

    VB初心者ですみませんが、どなたか教えてください。 以下のようにADOにてDBのカラムからデータを取得し、コンボボックスに設定をしたいのですが、よくわかりません。 コンボボックスのはじめに空白→DBの項目を設定→最後に”なし”を設定したいのですが、教えてください。 Dim adors As New ADODB.Recordset adors.Open "SELECT A_FIELD FROM TABLE",・・・・ If adors.RecordCount <> 0 Then ComboBOX.AddItem ("") 'コンボボックスのはじめに空白を設定 Set ComboBOX.RowSource = adors ComboBOX.MatchEntry = dblExtendedMatching ComboBOX.ListField = "A_FIELD" ComboBOX.AddItem ("なし") 'コンボボックスの終わりにに’なし’を設定 End If

  • エクセル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のコンボボックス

    お世話になります。 コンボボックス1と2と3は選択されますが コンボボックス4には何の表示もされません。 選択して条件設定は4つ以上できないのでしょうか? Dim ITE As Variant Dim flg As Variant Private Sub ComboBox3_Change() 'ComboBox4セット Dim ico As Long ico = 1 With ThisWorkbook.Worksheets("data") KEY = Me.ComboBox1.Text KEY2 = Me.ComboBox2.Text KEY3 = Me.ComboBox3.Text Me.ComboBox4.Clear Do While .Cells(ico, 1) <> "" If .Cells(ico, 1) = KEY And .Cells(ico, 2) = KEY2 And .Cells(ico, 3) = KEY3 Then ITE = .Cells(ico, 4).Value flg = 0 For I = 0 To Me.ComboBox4.ListCount - 1 If ITE = Me.ComboBox4.List(I) Then flg = 1 Next If flg = 0 Then Me.ComboBox4.AddItem ITE End If ico = ico + 1 Loop End With Me.ComboBox4.SetFocus End Sub

  • ADO 「Set」は使ったほうがいいのでしょうか?

    Sub test1() Dim cn As ADODB.Connection Dim rs As ADODB.Recordset Set cn = New ADODB.Connection Set rs = New ADODB.Recordse End Sub Sub test2() Dim cn As New ADODB.Connection Dim rs As New ADODB.Recordset End Sub この二つは同じ意味ですか? 「Set」は使ったほうがいいのでしょうか? よろしくお願いします。