access PR

Access VBAでExcelへセル指定で出力する方法|Range・Cellsの実践例

記事内に商品プロモーションを含む場合があります

導入文

Access VBAでExcelへデータを出力する際、
「特定のセル位置に書き込みたい」「行や列を指定して整理したい」
といった場面は非常に多くあります。

本記事では、Access VBAからExcelを操作し、セルを指定して値を書き込む方法をRange・Cellsの両方で解説します。
※サンプルではクエリ名を qrySample としています。実際に使う場合は、お使いのクエリ名/テーブル名に変更してください。


Access VBAでExcelへセル指定出力する基本

「セル指定」とは、ExcelのA1B3のように、書き込む場所を決めて出力することです。
Access側のデータを「決まったレイアウト」に落とし込みたいとき、Range / Cells の指定がとても役立ちます。

  • Range(“A1”):直感的にセル番地で指定

  • Cells(行, 列):行番号・列番号で指定(ループ処理に強い)


Excelを起動してセルへ書き込む基本コード

まずは「Excelを起動 → セルに書き込み → 保存 → 終了」という基本の流れです。
Access VBAでExcelを操作する最小サンプルとして、そのままコピペで試せます。

コード①:最小(起動→書き込み→保存→終了)

Option Compare Database
Option Explicit

‘最小:Excelを起動してA1に書き込み、保存して終了
Public Sub Excel_Write_Minimum()
Dim xlApp As Object
Dim xlBook As Object
Dim xlSheet As Object
Dim savePath As String

savePath = CurrentProject.Path & “\sample_cell_output.xlsx”

On Error GoTo EH

Set xlApp = CreateObject(“Excel.Application”)
xlApp.Visible = True ‘動作確認後は False でもOK

Set xlBook = xlApp.Workbooks.Add
Set xlSheet = xlBook.Worksheets(1)

‘Rangeでセル指定
xlSheet.Range(“A1”).Value = “Access VBA から Excel へ出力しました”
xlSheet.Range(“A2”).Value = Now

xlBook.SaveAs savePath
xlBook.Close SaveChanges:=False
xlApp.Quit

Set xlSheet = Nothing
Set xlBook = Nothing
Set xlApp = Nothing

MsgBox “保存しました: ” & savePath, vbInformation
Exit Sub

EH:
MsgBox “エラー: ” & Err.Number & vbCrLf & Err.Description, vbExclamation
On Error Resume Next
If Not xlBook Is Nothing Then xlBook.Close SaveChanges:=False
If Not xlApp Is Nothing Then xlApp.Quit
End Sub

Range / Cellsでセルを指定して書き込む方法

Rangeは「A1」などのセル番地で指定できるので、レイアウトが決まっているExcelに出力するときに便利です。

コード②:Range / Cells の違いが分かる例

Option Compare Database
Option Explicit

‘RangeとCells:指定方法の違いが分かるサンプル
Public Sub Excel_Cell_Spec_Range_And_Cells()
Dim xlApp As Object
Dim xlBook As Object
Dim ws As Object
Dim i As Long

On Error GoTo EH

Set xlApp = CreateObject(“Excel.Application”)
xlApp.Visible = True

Set xlBook = xlApp.Workbooks.Add
Set ws = xlBook.Worksheets(1)

‘【Range】文字列で直感的に指定(例:A1, B2)
ws.Range(“A1”).Value = “Rangeで指定”
ws.Range(“B1”).Value = “Cellsで指定”
ws.Range(“A2”).Value = “A2 は Range(“”A2″”)”

‘【Cells】行・列番号で指定(Cells(行, 列))
‘ 2行目2列目 = B2
ws.Cells(2, 2).Value = “B2 は Cells(2,2)”

‘ループで行を増やすならCellsが便利
For i = 1 To 10
ws.Cells(i + 3, 1).Value = “行 ” & (i + 3) & ” / 列 A”
ws.Cells(i + 3, 2).Value = “行 ” & (i + 3) & ” / 列 B”
Next i

MsgBox “Range/Cells の書き込み例を作成しました。”, vbInformation
Exit Sub

EH:
MsgBox “エラー: ” & Err.Number & vbCrLf & Err.Description, vbExclamation
End Sub

Cellsでセルを指定して書き込む方法

Cellsは、Cells(行, 列) という指定ができるので、Accessのデータを1行ずつ書き込む「表形式の出力」に向いています。
行番号を変えながら出力したい場合は Cells が特に便利です。

AccessのデータをExcelの指定セルへ出力する実例(Recordset)

ここからが実務で一番よく使う部分です。
Accessのクエリ/テーブルを読み込み、Excelの「開始セル」を決めて、見出し+明細を出力します。

※ サンプルでは qrySample を使用していますが、
実際には既存のクエリ名またはテーブル名に置き換えてください。

コード③:Access → Excelへセル指定で出力(見出し付き)

Option Compare Database
Option Explicit

‘Accessのクエリ/テーブルを、Excelへセル指定で出力(見出し+明細)
Public Sub Access_To_Excel_CellOutput()
Dim xlApp As Object
Dim xlBook As Object
Dim ws As Object
Dim rs As DAO.Recordset
Dim db As DAO.Database

Dim startRow As Long, startCol As Long
Dim r As Long, c As Long
Dim savePath As String

On Error GoTo EH

‘出力開始セル(ここを変えれば「セル指定」になる)
startRow = 3
startCol = 2 ‘B列

savePath = CurrentProject.Path & “\access_to_excel_cell_output.xlsx”

Set db = CurrentDb
Set rs = db.OpenRecordset(“qrySample”, dbOpenSnapshot) ‘←ここを変更(クエリ/テーブル名)

Set xlApp = CreateObject(“Excel.Application”)
xlApp.Visible = True
Set xlBook = xlApp.Workbooks.Add
Set ws = xlBook.Worksheets(1)

‘タイトルなど(固定セルに出す例)
ws.Range(“A1”).Value = “AccessデータのExcel出力(セル指定)”
ws.Range(“A2”).Value = “出力日時: ” & Format(Now, “yyyy/mm/dd hh:nn:ss”)

‘見出し行(フィールド名)
c = 0
Dim f As DAO.Field
For Each f In rs.Fields
ws.Cells(startRow, startCol + c).Value = f.Name
c = c + 1
Next f

‘データ行
r = 1
Do Until rs.EOF
c = 0
For Each f In rs.Fields
ws.Cells(startRow + r, startCol + c).Value = Nz(f.Value, “”)
c = c + 1
Next f
r = r + 1
rs.MoveNext
Loop

‘見栄え(任意)
ws.Columns.AutoFit

xlBook.SaveAs savePath
xlBook.Close SaveChanges:=False
xlApp.Quit

rs.Close
Set rs = Nothing
Set db = Nothing
Set ws = Nothing
Set xlBook = Nothing
Set xlApp = Nothing

MsgBox “保存しました: ” & savePath, vbInformation
Exit Sub

EH:
MsgBox “エラー: ” & Err.Number & vbCrLf & Err.Description, vbExclamation
On Error Resume Next
If Not rs Is Nothing Then rs.Close
If Not xlBook Is Nothing Then xlBook.Close SaveChanges:=False
If Not xlApp Is Nothing Then xlApp.Quit
End Sub

Excelファイルを保存して閉じる方法(ポイント)

コード①と③では、基本的に以下の流れで後処理をしています。

  • SaveAs で保存

  • Close でブックを閉じる

  • Quit でExcelを終了

長時間使う処理ほど、「Excelが残ってしまう」問題が起きやすいので、エラー時にも終了処理が走るようにしておくのが重要です。


よくあるエラーと対処

  • クエリ名が存在しないqrySample を実在するクエリ/テーブル名に変更

  • Excelが残る:エラー時の Quit が走るように On Error GoTo EH を維持

  • 保存先に権限がないCurrentProject.Path を変更、または保存先フォルダを見直す


関連リンク(任意)

Accessでフォルダ内のファイル名を一覧取得し、Excelへ出力する方法【VBA】

Access VBA|Excelの列を選択してインポートできるフォームの作り方


まとめ

Access VBAを使えば、Excelを起動してセルを指定しながら柔軟にデータを書き出すことができます。

本記事では、Access VBAからExcelを操作し、Range・Cellsを使って指定したセル位置へ値を書き込む方法を解説しました。

ポイントは次の通りです。

  • Excel操作は「起動 → 書き込み → 保存 → 終了」が基本

  • Rangeはセル番地で指定したい場合に便利

  • Cellsは行番号を変えながら出力する処理に向いている

  • Accessのデータ(クエリ/テーブル)も指定セルから一覧出力できる

セル指定での出力を覚えておくと、帳票作成や一覧管理など、AccessとExcelを連携した作業の幅が大きく広がります。