この記事では、Recordsetで取得したAccessのテーブルデータをフォーム上に設置されたListboxに表示させる方法についてご説明します。
【動画】Recordsetで取得したAccessのテーブルデータをフォーム上に設置されたListboxに表示させる実際の動き
本題に入る前に、まずは次の動画をご覧ください。
AccessのテーブルデータをRecordsetで取得し、フォーム上に設置されたListboxに表示させています。
マクロ作成の流れ
コードの例
Excelのマクロのコード(例)
Option Explicit Private Sub UserForm_Activate() Dim DBName As String 'データベース名 Dim connDB As String 'データベース接続情報 Dim sqlStr As String 'SQL文 Dim adoCON As New ADODB.Connection 'Connection用変数 Dim adoRS As ADODB.Recordset 'レコードセット用変数 'Accessのデータベースファイルパスを取得 DBName = ActiveWorkbook.Path & "\" & "0119.mdb" 'データベース接続情報の取得 adoCON.ConnectionString = "provider=Microsoft.ACE.OLEDB.12.0;" _ & "Data Source=" _ & DBName & "" 'Accessに接続する adoCON.Open connDB 'Recordsetオブジェクトのインスタンスを生成する Set adoRS = CreateObject("ADODB.Recordset") 'Accessからテーブルデータを取得するSQL文を作成 sqlStr = "select * from tbl_datalist " sqlStr = sqlStr & " ORDER BY 1 ASC" 'Accessからテーブルデータを取得する adoRS.Open sqlStr, adoCON With UserForm1.ListBox1 'データの数分列を表示する .ColumnCount = 2 'Accessのテーブルから取得したデータをListboxに表示させる .Column = adoRS.GetRows End With 'Connectionを閉じる adoCON.Close Set adoCON = Nothing Set adoRS = Nothing End Sub
注目すべきコード①
最初に見て頂きたいのは15行目から20行目です。
'データベース接続情報の取得 adoCON.ConnectionString = "provider=Microsoft.ACE.OLEDB.12.0;" _ & "Data Source=" _ & DBName & "" 'Accessに接続する adoCON.Open connDB
15行目から17行目でAccessのデータベースファイルに接続するのに必要な情報を取得してConnectionStringプロパティに設定し、その情報をもとに20行目でAccessのデータベースファイルに接続します。
注目すべきコード②
次に見て頂きたいのは23行目です。
'Recordsetオブジェクトのインスタンスを生成する Set adoRS = CreateObject("ADODB.Recordset")
23行目でRecordsetオブジェクトのインスタンスを生成します。
インスタンスが生成されると、Recordsetを扱うことができます。
注目すべきコード③
次に見て頂きたいのは26行目から30行目です。
'Accessからテーブルデータを取得するSQL文を作成 sqlStr = "select * from tbl_datalist " sqlStr = sqlStr & " ORDER BY 1 ASC" 'Accessからテーブルデータを取得する adoRS.Open sqlStr, adoCON
26行目では、Accessのテーブルデータを取得するSQL文を用意します。
30行目では、先ほどのSQL文をOpenメソッドの引数に指定してOpenメソッドを実行し、Accessからテーブルデータを取得します。
Openメソッドの第2引数には、注目すべきコード①で用意したデータベース接続情報が格納された変数adoCONを指定します。
注目すべきコード④
次に見て頂きたいのは32行目から40行目です。
With UserForm1.ListBox1 'データの数分列を表示する .ColumnCount = 2 'Accessのテーブルから取得したデータをListboxに表示させる .Column = adoRS.GetRows End With
上記は、Listboxに関する設定を行っているコードです。
38行目では、GetRowsメソッドを実行してRecordsetで取得したAccessのテーブルデータをListboxのColumnプロパティに設定することで、フォーム上に設置されたListboxにAccessのテーブルデータを表示させています。
動作確認
今回の動作確認用にAccessのデータベースファイルと、そのAccessのデータベースファイルに都道府県の名称が保存されているテーブル「tbl_datalist」を用意しました。
この都道府県の名称を、Excelのフォーム上に設置されたListboxに表示させます。
マクロ実行前
下のVBEの画面は、マクロを実行する前の状態です。
フォーム上にlistboxが設置されています。
マクロ実行後
マクロを実行すると、下の画像のように都道府県の名称がExcelのフォーム上に設置されたListboxに表示されています。
【注意】参照設定が必要です
一つ注意点があるのですが、先ほどのコードを動かすには参照設定が必要です。
参照設定の一覧(下の画像を参考)から次の項目(ライブラリ)にチェックを付けて「OK」ボタンをクリックします。
- Microsoft ActiveX Data Objects 2.8 Library(msado28.tlb)
なぜ必要かというと、Excelマクロのコードの8行目「ADODB.Connection」と9行目の「ADODB.Recordset」というオブジェクトが「msado28.tlb」というファイルを参照するからです。
Dim adoCON As New ADODB.Connection 'Connection用変数 Dim adoRS As ADODB.Recordset 'レコードセット用変数
この参照設定をしないと下の画像のエラーが出ますので必ず行う必要があります。
ここでは「msado28.tlb」とは何者かについては記事の本題から逸れてしまうので詳細は割愛しますが、マクロで「ADODB.Connection」と「ADODB.Recordset」というオブジェクトを使う場合は参照設定しないと動かない、程度に思って頂ければと思います。
最後に
本記事では、Recordsetで取得したAccessのテーブルデータをフォーム上に設置されたListboxに表示させる方法についてご説明しました。
AccessのテーブルデータをExcelのフォーム上に設置されたListboxに表示させたい場合、Recordsetを使うと簡単に表示させることができます。是非参考にしてみてくださいね。
プログラミングのスキルを習得するなら
プログラミングのスキルを習得したい、今のスキルをもっと高めたい、そう考えているなら「プログラミングスクール」がおすすめです。
プログラミングのスキルの基礎を身につけるなら「TechAcademy」で1週間の無料体験があるので、これで「プログラミングの基礎」を学ぶのにおすすめですよ。