5.5 テーブルのデータをワークブックへ出力
テーブルに保存されているデータを、ADOを使って開いたワークシートやCSVファイルへ出力する例です。

元のデータを集計・編集・データの絞り込みたいとき、シート上の既存のデータへ追加したときなど、DoCmd.TransferSpreadsheetで対応しきれないときはこの方法がオススメです。
プログラムの作成例
次のプログラム例は、Accessのテーブルのデータをワークブックへ出力する処理の例です。コネクション情報(ADODB.Connection)を2種類使用しているのがポイントで、一つはMDBを扱うためのコネクション(objMDBCon)、もう一つはワークブックを扱うためのコネクション(objXLSCon)です。

最初に、MDBのコネクション情報(objMDBCon)を使ってレコードセットを作成します。この部分が、テーブルから情報を取り出す処理です。もし、取り出し対象がクエリのときは、SQLのFROM句へクエリ名を指定しましょう。

次に、ワークブックへの出力です。取り出したテーブルの情報(objRS)を使ってSQL(INSERT命令)を組み立て、このSQLをワークブックのコネクションを使って実行(Execute)します。あとは、SQLの組み立て〜SQLの実行を、レコードセットがカラになるまで繰り返せばOK!

ちなみに、各コネクション情報の作成を変えると、SQL ServerのデータをCSVへ出力したり、ExcelのデータをMDBへ取り込んだりなど、いろいろ応用できます。

Sub MDBtoWorkbook()

    'Access VBA Tips
    '5.5 テーブルのデータをワークブックへ出力

    Dim objMDBCon As adodb.Connection
    Dim objXLSCON As New adodb.Connection
    Dim objRS     As adodb.Recordset
    Dim strSQL    As String

    'MDB用コネクション作成
    Set objMDBCon = Application.CurrentProject.Connection

    'ワークブック用コネクション作成(ReadOnly=0は更新モード)
    objXLSCON.Open "Driver={Microsoft Excel Driver (*.xls)}; " & _
                   "DBQ=c:\happy\ADR_BOOK.xls;" & _
                   "ReadOnly=0"

    'レコードセットの作成(テーブルのデータを取り出す)
    Set objRS = objMDBCon.Execute("select  漢字氏名" & _
                                  "       ,カナ氏名" & _
                                  "       ,性別コード" & _
                                  "       ,生年月日" & _
                                  "  from  アドレス帳テーブル")

    'レコードセットがカラになるまで繰り返します
    Do Until objRS.EOF = True

       '追加用のSQLを組み立てます
       strSQL = vbNullString
       strSQL = strSQL & "insert  into [Sheet1$]"
       strSQL = strSQL & "       (漢字氏名"
       strSQL = strSQL & "       ,カナ氏名"
       strSQL = strSQL & "       ,性別コード"
       strSQL = strSQL & "       ,生年月日 )"
       strSQL = strSQL & "values ('" & objRS("漢字氏名") & "'"
       strSQL = strSQL & "       ,'" & objRS("カナ氏名") & "'"
       strSQL = strSQL & "       ," & objRS("性別コード")
       strSQL = strSQL & "       ,#" & objRS("生年月日") & "#)"

       'ワークブックへデータを追加
       '(ワークブックのコネクションを使ってSQLを実行します)
       objXLSCON.Execute (strSQL)

       '次のレコードへ進みます
       objRS.MoveNext

    Loop

    'レコードセットのクローズ
    objRS.Close

    'コネクションのクローズ
    objMDBCon.Close
    objXLSCON.Close

    'オブジェクトの破棄
    Set objRS = Nothing
    Set objMDBCon = Nothing
    Set objXLSCON = Nothing

End Sub
Copyright(C) 1999-2006 結城圭介。 All rights reserved