ちょっと遅いなーと思いつつも時間もないのでこれで妥協.時間があるときにでももっと高速バージョンを考えられればと思います.
【事例】
Sub openADO()
'
' openADO Macro
Dim myrec As ADODB.Recordset
Set myrec = New ADODB.Recordset
Dim cnt As String
Dim sql As String
cnt = "DSN=EDA001;UID=EDA001;PWD=EDA001;"
sql = "SELECT * from EDA.M_P_AS"
myrec.Open sql, cnt
'列も自動的に発生する場合は下記のようにする
myrec.MoveFirst
'列の題名をDBのテーブルの列名を使うときは下記のようにする
For k = 0 To myrec.Fields.Count - 1
Cells(1, k + 1) = myrec.Fields(k).Name
Next k
'データ部分を2行目から全部表示する場合は下記のようにする
i = 1
Do Until myrec.EOF = True
For j = 0 To myrec.Fields.Count - 1
Cells(i + 1, j + 1) = myrec.Fields(j).Value
Next j
myrec.MoveNext
i = i + 1
Loop
'列を明示的に表示していきたいときには下記のようにすると良い
'myrec.MoveFirst
'i = 1
'Do Until myrec.EOF = True
'Cells(i, 1) = myrec.Fields(0).Value
'Cells(i, 2) = myrec.Fields(1).Value
'myrec.MoveNext
'i = i + 1
'Loop
myrec.Close
Set myrec = Nothing
End Sub
【解説】
上記はお約束のODBCからの接続なのでODBCの設定が必要です.そのうちこれの別途blogを書いておいたほうが良いかな(最近の忘却レベルは異常だ).
題名を表示するforルーチン,データを表示するforルーチンが別々に必要なところが注意.また、個人的に新たにわかったネタとしては"myrec.MoveFirst”でデータを一番初めに戻せるのでさらにfor文でデータを再度描きなおせるなーなどとプチ喜びがありました。