プロが教える店舗&オフィスのセキュリティ対策術

アクセス初心者です。よろしくお願いします。

エクセルVBAを使用してアクセスのレコードを1行選択しエクセルに取り込みたいと思っています。
copyfromrecordset data:=rs でテーブルのすべてのレコードを取り込むことはできますが、何行目かを指定して1行ずつ取り込みたいと思っています。
いろいろ検索しましたが見つかりませんでした。
ご教示お願いします。

A 回答 (1件)

ADO でのお話で良いですか



Recordset.Open する際に
CursorType に adOpenStatic / adOpenKeyset を指定すると
AbsolutePosition が使えたと思います

AbsolutePosition は読み込んだレコードの 1 ~ の連番で
rs.AbsolutePosition = 3 とすると、カレントが3レコード目になります

カレントを求めるのに Find 等使っても良いと思います。
また、SQL 文で絞り込んでも・・・

CopyFromRecordset は、そのカレントから書き出すものになるので
1レコード分が必要なら
Range("B2").CopyFromRecordset rs, 1
の様に指定します。

この CopyFromRecordset の後、
rs のカレントは処理したレコード数分進むので rs.MoveNext 等は不要

以下雰囲気で

Public Sub Samp1()
  Dim cn As Object, rs As Object
  Const adOpenStatic = 3
  Const adLockReadOnly = 1

  Set cn = CreateObject("ADODB.Connection")
  cn.Provider = "Microsoft.ACE.OLEDB.12.0"
  cn.Open "D:\Hoge\★★.accdb"

  Set rs = CreateObject("ADODB.Recordset")
  rs.Open "テーブル名", cn, adOpenStatic, adLockReadOnly

  rs.AbsolutePosition = 3
  Range("B2").CopyFromRecordset rs, 1
  Range("B4").CopyFromRecordset rs, 2
  rs.AbsolutePosition = 10
  Range("B7").CopyFromRecordset rs, 1

  rs.Close
  Set rs = Nothing

  cn.Close
  Set cn = Nothing
End Sub
    • good
    • 0
この回答へのお礼

助かりました

早速のご回答ありがとうございます。
職場に端末を持ち込めないので確認できるのが遅くなりますが、検索した時に見つからなかったことが書かれていますのでうまくいきそうな気がします。
本当にありがとうございました。

お礼日時:2015/10/06 15:59

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!