LoginSignup
0
2

More than 3 years have passed since last update.

Access VBAでシートとセルを指定してエクスポート

Last updated at Posted at 2020-07-14

やりたいこと

AccessでExcelの同一のシートへ追記したい。(通常のエクスポートでシート単位でデータが作成されるので)
こんなテーブルがあったとします。↓ ここから年齢別にクエリをかけて同じシートへ追記していくようにします。
1png.png

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

クエリの実行結果が年齢順に追記されています。参考になれば幸いです。
4.png

0
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
2