ADOを使ってエクセルからアクセスのデータを取得しています。
(2003です。)
Sub アクセスのデータをエクセルへ()
Dim cn As New ADODB.Connection
Dim rs As New ADODB.Recordset
Dim i As Long
Range("a1") = "番号"
Range("b1") = "種類"
rs.Open "SELECT * FROM Tbl", cn, adOpenKeyset, adLockOptimistic
For i = 1 To rs.RecordCount
Range("a" & i + 1) = rs("番号")
Range("b" & i + 1) = rs("種類")
rs.MoveNext
Next i
End Sub
結果は
A B
1 番号 種類
2 ×× ○○
となるのですが
コート゛の
Range("a1") = "番号"
Range("b1") = "種類"
の部分を省略して
テーブルのフィールド名から取得できないでしょうか?
例は2つのフィールドしかないから楽なのですが
実際はTblには30列くらいあるのです。
アクセスのOffice Linksや
アクセスからメニュー[ファイル]-[エクスポート]のような結果がほしいです。
どうしてもADOでやりたいので
どなたかご教授よろしくお願いします。
No.3ベストアンサー
- 回答日時:
現状、お示しのコードでちゃんと動いているのでしたら、
For i = 1 To rs.RecordCount
以下を下記に書き換えてみてください。
Dim j As Long
With rs
For i = 1 To .RecordCount
For j = 0 To .Fields.Count - 1
Cells(1, j + 1) = .Fields.Item(j).Name
Cells(i + 1, j + 1) = .Fields.Item(j)
Next j
.MoveNext
Next i
End With
End Sub
No.5
- 回答日時:
質問のコードで動きましたか?疑問あり。
出来るだけ完全なものを上げてください。
私の場合でやってみた。db2というmdbがあり、そこに生徒テーブルがあり、氏名と学校フィールドが有る。
第3番目と第5番目のフィールドです。フィールドのINDEXは0から始まる。
質問は何が判っている前提での話か。
順番
名前
>テーブルのフィールド名から取得できないでしょうか
フィールド名がわかっているなら、質問のような書き方になるのでは?
言いたいことが、良くわからん。
Sub test04()
Const cnsADO_CONNECT1 = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source="
Dim cn As New ADODB.Connection
Dim rs As New ADODB.Recordset
Dim i As Long
MsgBox CurDir
cn.Open cnsADO_CONNECT1 & CurDir & "\" & "\db2.mdb;"
rs.Open "SELECT * FROM 生徒", cn, adOpenKeyset, adLockOptimistic
Range("a1") = rs.Fields(2).Name
Range("b1") = rs.Fields(4).Name
For i = 1 To rs.RecordCount
Range("a" & i + 1) = rs("氏名")
Range("b" & i + 1) = rs("学校")
rs.MoveNext
Next i
End Sub
ーー
A列 B列
氏名学校
大田黒南小学校
上野北小学校
目黒山上中興小学校
木下中央小学校
・・
となったから間違いないでしょう。
ーー
エクセル側で参照設定が必要。
No.4
- 回答日時:
[回答番号:No.3] の DOUGLAS_ です。
ちょっとしたミスですが、
Cells(1, j + 1) = .Fields.Item(j).Name
の行は、
If i = 1 Then Cells(1, j + 1) = .Fields.Item(j).Name
に変えてください。
もちろん、
Application.ScreenUpdating = False
などの処理はお好きなように。。。
No.1
- 回答日時:
Private Sub Sample1()
Dim oApp As Object
Dim rs As New ADODB.Recordset
Dim i As Integer
Set oApp = CreateObject("Excel.Application")
oApp.Workbooks.Add
rs.Source = "SELECT * FROM Tbl;"
rs.Open , CurrentProject.Connection, adOpenForwardOnly, adLockReadOnly
If (Not rs.EOF) Then
For i = 0 To rs.Fields.Count - 1
oApp.Cells(1, i + 1).Value = rs.Fields(i).Name
Next
oApp.Range("A2").CopyFromRecordset rs
End If
rs.Close
oApp.Visible = True
Set oApp = Nothing
End Sub
※フィールド名は rs.Fields(i).Name でわかります
※得られたレコードセットを A2 から展開します
※ 参照設定
Microsoft ActiveX Data Objects X.Y Library
Microsoft Excel X.0 Object Library
※ 処理が終わった後Excelを表示します。
(保存が必要なら処理を追加してください)
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) access count数を変数に格納 2 2022/03/30 19:21
- Visual Basic(VBA) データベースから絞り込んでデータを読み込み 1 2023/02/21 19:51
- Visual Basic(VBA) A列B列C列 3 2023/04/26 18:11
- Access(アクセス) 実行時エラー3131 FROM 句の構文エラーです について 7 2022/06/13 15:45
- Excel(エクセル) 指定文字列が該当するA列をアクティブセルにするには 3 2022/08/17 13:18
- Visual Basic(VBA) VBAが止まります。 1 2022/09/02 14:51
- Visual Basic(VBA) VBAが止まります。 2 2022/09/02 14:02
- Excel(エクセル) Excelにて、フォルダ内のTextファイルをマクロで統合すると文字化けしてしまう時の解消コード 4 2023/01/01 07:32
- Visual Basic(VBA) 【ご教示ください】VBAの記述方法がわかりません。 2 2022/08/12 21:28
- Visual Basic(VBA) エクセル VBA 処理スピードを上げたいのですが。 6 2023/03/31 20:52
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
クリスタルレポートで困ってい...
-
Access VBA 添付型フィールド
-
criteria の読み方
-
Accessの画像挿入のVBAコード
-
2つ目のレコードの値を取得す...
-
Accessのフィールド名に半角括...
-
Access 2010で実行時エラー3061
-
ASP(VBScript)からACCESSデータ...
-
accessでフィールド追加のあと...
-
VB2005のBindingSourceのFilter...
-
FTPサーバーから受信したファイ...
-
アクセス 横スクロールの分割
-
ACCESSで日別集計をする場合
-
VBA 変数名に変数を使用したい。
-
【VB】コンボボックスにデータ...
-
WORD VBA プログラム修正をお願...
-
Excel VBAでグループ毎に集計す...
-
Dir関数で読み取り順を操作でき...
-
VBとアクセスでSQL文に変...
-
エクセルデータをVBで検索でき...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Accessのフィールド名に半角括...
-
DataTableに特定のフィールドが...
-
accessでフィールド追加のあと...
-
INT64対応のprintf系関数はあり...
-
2つ目のレコードの値を取得す...
-
Access 2010で実行時エラー3061
-
日付と文字列を条件としてDLook...
-
AccessのDAOでフィールド名を配...
-
SQLで複数のテーブルと結合した...
-
テーブルのデータ型の変更がで...
-
フィールド名をループの添え字...
-
クリスタルレポート(8.5)の書式...
-
AccessVBAで他テーブルのデータ...
-
アクセスでADO 並べ替えが適用...
-
Accessの画像挿入のVBAコード
-
NULLを含む文字列の結合で...
-
クリスタルレポートで文字列の...
-
ACCESSデータベースにV...
-
ノーツ:ユーザ名から別名を取...
-
Access クエリで変数を参照する...
おすすめ情報