Access VBAでシートとセルを指定してエクスポート
やりたいこと
AccessでExcelの同一のシートへ追記したい。(通常のエクスポートでシート単位でデータが作成されるので)
こんなテーブルがあったとします。↓ ここから年齢別にクエリをかけて同じシートへ追記していくようにします。
Excelのシート、セルを指定して追記するコード
呼出側で指定されたクエリを読み込んで、データを追記していきます。ポイントはエクセルの最終行の取得の部分です。
introw = .cells(.rows.Count, 1).End(-4162).row + 1
[終端セルを参照する(Endプロパティ)]などで検索するとでてきます。エクセルVBAならxlupで良いのですが、Accessはそんなことはわからないので明示してあげます。また、追記するのは最終行の次の行になるので+1とします。
Sub Excelのセルを指定して貼りつけ(qname As String)
Dim db As Database
Dim rs As Recordset
Dim xpath As String
xpath = CurrentProject.Path
Dim introw,col as Integer
Dim xls As Object
Set db = CurrentDb
'呼出側のクエリ名を取得
Set rs = db.OpenRecordset(qname)
'Excelの生成
Set xls = CreateObject("Excel.Application")
xls.workbooks.Open (xpath & "\test.xls")
With xls.sheets("年齢別")
'見出し行をコピー
introw = 1
For col = 1 To rs.Fields.Count
'MsgBox rs.Fields(col - 1).Name
.cells(introw, col).Value = rs.Fields(col - 1).Name
'MsgBox .cells(row, col).Value
Next col
'見出し行以降をexcelの最終行に追記
introw = .cells(.rows.Count, 1).End(-4162).row + 1
Do Until rs.EOF
For col = 1 To rs.Fields.Count
.cells(introw, col).Value = rs.Fields(col - 1)
Next col
introw = introw + 1
rs.MoveNext
Loop
rs.close
End With
xls.workbooks("test.xls").Save
xls.workbooks("test.xls").Close
Set xls = Nothing
End Sub
次にこのサブルーチンを呼び出すコードを記述します。
クエリの条件を変更しながらデータを抽出して、先述のサブルーチンを実行していきます。
Sub クエリ実行()
Dim sql As String
Dim db As Database
Set db = CurrentDb
Dim myq As QueryDef
Dim age(2) As String
age(0) = 25
age(1) = 30
age(2) = 45
Dim i As Long
For i = 0 To 2
sql = "select * from T_顧客管理 where T_顧客管理.年齢=" & age(i) & ";"
Set myq = db.CreateQueryDef("Q_顧客管理", sql)
Call Excelのセルを指定して貼りつけ("Q_顧客管理")
Application.CurrentDb.QueryDefs.Delete "Q_顧客管理"
Next
db.Close
Set db = Nothing
End Sub
Author And Source
この問題について(Access VBAでシートとセルを指定してエクスポート), 我々は、より多くの情報をここで見つけました https://qiita.com/z0189/items/947032d85ba18871d290著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .