Access データベースのテーブルから特定レコードだけを取得したい場合、DAO(Data Access Objects)の Move
メソッドを利用すると簡単です。本記事では、3 番目のレコードを取得し、列見出しとともに Excel へ貼り付ける方法をご紹介いたします。
目次
サンプルコード
Sub GetThirdRecord()
Dim daoObj As Object ' DAO エンジン
Dim accDB As Object ' Access 接続
Dim rsProduct As Object ' レコードセット
Dim dbPath As String ' データベース パス
' Access ファイルのフルパス
dbPath = ThisWorkbook.Path & "\product_catalog.accdb"
' DAO エンジン生成とデータベース接続
Set daoObj = CreateObject("DAO.DBEngine.120")
Set accDB = daoObj.OpenDatabase(dbPath)
' テーブル (tbl_products) を開く
Set rsProduct = accDB.OpenRecordset("tbl_products")
' 見出し行をセル D1:F1 に書き込み
Range("D1:F1").Value = Array("ProductID", "ProductName", "UnitPrice")
' 3 番目のレコードへ移動 (0 番目基準で Move 2)
If Not rsProduct.EOF Then
rsProduct.Move 2
' レコードが存在すればセル D2:F2 に書き込み
If Not rsProduct.EOF Then
Range("D2:F2").Value = Array(rsProduct!ProductID, _
rsProduct!ProductName, _
rsProduct!UnitPrice)
End If
End If
' 後処理
rsProduct.Close
accDB.Close
End Sub
コードのポイント
項目 | 説明 |
---|---|
CreateObject("DAO.DBEngine.120") | DAO 12.0 を動的に生成。参照設定は不要です。 |
OpenRecordset("tbl_products") | 目的のテーブルを開き、最初のレコード位置にカーソルを配置します。 |
Move 2 | 先頭を 0 番目として 3 番目のレコード に移動します。 |
EOF チェック | レコード有無を判定し、存在する場合のみ貼り付けを実施します。 |
Range("D1:F1") | 見出し行のセル位置。必要に応じて変更してください。 |
カスタマイズ例
目的 | 変更箇所 |
---|---|
異なるレコード番号を取得 | Move 2 を Move N - 1 (N 番目のレコード)へ変更 |
列見出しを自動取得 | Fields(i).Name で見出しを生成するループに置き換え |
貼り付け先を別シート | Range のシート参照を Worksheets("SheetName").Range に変更 |
DAO バージョン | 64 ビット Office 等で 12.0 が動作しない場合、DBEngine.140 へ変更 |
まとめ
DAO の Move
メソッドを使えば、Access テーブルから任意のレコードを簡単に取得できます。Excel にデータを貼り付けてレポート作成や分析に活用することで、業務効率を大幅に向上させられます。ぜひお試しください。