Excel VBA で Access テーブルの 3 番目レコードを取得する方法

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 2Move N - 1(N 番目のレコード)へ変更
列見出しを自動取得Fields(i).Name で見出しを生成するループに置き換え
貼り付け先を別シートRange のシート参照を Worksheets("SheetName").Range に変更
DAO バージョン64 ビット Office 等で 12.0 が動作しない場合、DBEngine.140 へ変更

まとめ

DAO の Move メソッドを使えば、Access テーブルから任意のレコードを簡単に取得できます。Excel にデータを貼り付けてレポート作成や分析に活用することで、業務効率を大幅に向上させられます。ぜひお試しください。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

私が勉強したこと、実践したこと、してることを書いているブログです。
主に資産運用について書いていたのですが、
最近はプログラミングに興味があるので、今はそればっかりです。

目次