#780 レコードセットをそのままExcelのシートに出力する方法(DAO版) VBA

Excelオブジェクトの「CopyFromRecordset」メソッドを利用し、その引数としてDAOで生成したRecordsetオブジェクトを渡すことで、そのレコードセットに含まれるレコード・フィールドのデータを一括してExcelのワークシートに出力することができます。

次のプログラム例では、テーブル「mtbl商品マスタ」からRecordsetを生成しオブジェクト変数「rst」に代入、それをCopyFromRecordsetメソッドに渡すことで各データをExcelワークシート上に出力しています。

Dim dbs As Database
Dim rst As Recordset
Dim xls As Object

Set dbs = CurrentDb

'レコードセットを開く
Set rst = dbs.OpenRecordset("mtbl商品マスタ")

'Excelオブジェクトを生成
Set xls = CreateObject("Excel.Application")

With xls
  '新しいブックを追加
  .Workbooks.Add

  '1行目の3列目(C1セル)からレコードセットを出力
  .Cells(1, 3).CopyFromRecordset rst

  'ワークシートを最後尾に追加
  .Worksheets.Add after:=.Worksheets(.Worksheets.Count)
  'レコードセットを先頭レコードに戻す
  rst.MoveFirst
  'D4セルから先頭の10レコード・4フィールド分だけ出力
  .Range("D4").CopyFromRecordset rst, 10, 4

  'Excelを可視状態にする
  .Visible = True

End With

Set xls = Nothing

※2例目では「rst.MoveFirst」でカレントレコードを先頭に戻しています。これは1例目の処理でカレントレコードがすでに最終レコードより後ろ(EOF)に達している状態にあるためです。上記のような1つのレコードセットを連続して出力する処理でなければこの命令は必要ありません。

実行例:
  • 1行目の3列目(C1セル)からレコードセットを出力

  • D4セルから先頭の10レコード・4フィールド分だけ出力

※参考Tips:ADO版 → 「#686 レコードセットの内容をそのままExcelのシートに出力する方法」
| Index | Prev | Next |



T'sFactory
Accessで動く生産管理DB
Ureru Express
Webで使う販売顧客管理
Access開発&アドバイス
DB開発やテクニカルアドバイス
Copyright © T'sWare All rights reserved