【PR】AccessやVBAの基礎をしっかり学びたい方には、
以下の入門書が分かりやすくておすすめです。
今回のような“テーブル構造”や“VBAでの自動化”を理解しやすくなります
AccessからExcelを操作したいけれど、
・正しい書き方が分からない
・セルの書式や罫線をVBAでどう指定するか知らない
・独学でコードを書いていて不安
・Excelのバージョン違いでエラーになることがある
こういった悩みは、現場でもよく聞きます。
この記事では、Access VBA から Excel を操作する方法を
「遅延バインディング(CreateObject)」に統一して解説します。
遅延バインディングは Excel のバージョンに左右されないため、
実務では最も安定して動作する方法です。
また、Excel の書式設定(フォント、色、罫線、配置、表示形式)を
“辞典のように一気に確認できる” ようにまとめました。
すべてコピペで動く形になっています。
まずは基本の Excel 起動から始めて、最後は
「Access のデータを Excel にきれいな表で出力する」
ところまで習得できます。
この記事でできること
Access VBA から Excel を正しく操作する方法がわかる
Excel の書式・罫線・表示形式を VBA で指定する方法を辞典的に学べる
すべて「遅延バインディング」でコピペして動く
Excel のバージョン差によるトラブルを避けられる
実務で使いやすい“正しい書き方”が身につく
AccessとExcelの連携方法(早期バインド・遅延バインド)
早期バインド(参照設定あり)
「Microsoft Excel XX.0 Object Library」を参照設定し、
Excel.Application として宣言する方法です。
メリット
IntelliSense(入力補完)が効く
定数(xlCenter など)が使える
一部の処理はわずかに高速
デメリット
Excel のバージョンが違うとエラーになる
複数バージョンが混在する職場では不向き
遅延バインド(この記事の標準)
参照設定を行わず、Object として宣言します。
Dim xlApp As Object
Set xlApp = CreateObject(“Excel.Application”)
メリット
どのExcelバージョンでも動きやすい
配布して使う場合に最適
実務の現場で最も採用される
デメリット
定数が使えない(数値指定が必要)
入力補完が効かない
この記事では、すべて遅延バインディングで書きます。
遅延バインディングでは Excel の定数が使えないため、
値(-4108 など)を直接指定します。
定数と値の対応表は以下よりダウンロードできます。
信頼できる場所のフォルダに入れて使用して下さい。
AccessからExcelを起動する基本(遅延バインド)
Excelを起動して新しいブックを作成
Private Sub コマンド1_Click()
Dim xlApp As Object
Dim xlBook As Object
Dim xlSheet As Object
Set xlApp = CreateObject(“Excel.Application”)
Set xlBook = xlApp.Workbooks.Add
Set xlSheet = xlBook.Worksheets(1)
xlApp.Visible = True
End Sub
既存のExcelファイルを開く
Set xlBook = xlApp.Workbooks.Open(“C:\test\sample.xlsx”)
Set xlSheet = xlBook.Worksheets(1)
Excelを非表示で操作する(実務向け)
xlApp.Visible = False
帳票作成や大量出力のときに高速化できます。
Excelを終了する正しい方法(メモリリーク対策)
xlBook.Close False
xlApp.Quit
Set xlSheet = Nothing
Set xlBook = Nothing
Set xlApp = Nothing
Excelのセルに値を書き込む(基礎)
A1に文字を書く
xlSheet.Range(“A1”).Value = “テスト”
xlSheet.Cells(1, 1).Value = “テスト”
A1〜A4(縦方向)に「テスト」
Dim i As Long
For i = 1 To 4
xlSheet.Cells(i, 1).Value = “テスト”
Next i
A1〜D1(横方向)に「テスト」
Dim i As Long
For i = 1 To 4
xlSheet.Cells(1, i).Value = “テスト”
Next i
With構文で読みやすくする
With xlSheet
.Cells(1, 1).Value = “ABC”
.Cells(1, 2).Value = “DEF”
End With
セルの書式設定(フォント)
基本例
With xlSheet.Cells(1, 1)
.Font.Name = “MS 明朝”
.Font.Size = 16
.Font.Bold = True
.Font.Color = RGB(255, 0, 0)
End With
セルの書式設定(塗りつぶし)
色
xlSheet.Cells(1, 1).Interior.Color = RGB(255, 255, 0)
パターン
xlSheet.Cells(1, 1).Interior.Pattern = 1 ‘xlSolid
xlSheet.Cells(1, 1).Interior.Pattern = -4126 ‘Gray75
セルの書式設定(配置)
横方向
xlSheet.Cells(1, 1).HorizontalAlignment = -4108 ‘中央
縦方向
xlSheet.Cells(1, 1).VerticalAlignment = -4108 ‘中央
折り返し・縮小表示
xlSheet.Cells(1, 1).WrapText = True
xlSheet.Cells(1, 1).ShrinkToFit = True
セル結合
縦書き
表示形式(NumberFormatLocal)
数値のカンマ区切り
xlSheet.Cells(1, 1).NumberFormatLocal = “#,##0”
小数点
xlSheet.Cells(1, 1).NumberFormatLocal = “#,##0.00”
マイナス赤表示
xlSheet.Cells(1, 1).Value = Format(Now, “yyyy/mm/dd”)
時刻
xlSheet.Cells(1, 1).Value = Format(Now, “hh:nn:ss”)
列幅・行の高さ
xlSheet.Columns(“A:A”).ColumnWidth = 15
xlSheet.Rows(“1:3”).RowHeight = 20
罫線(Borders)完全ガイド
上側・下側・左・右
xlSheet.Cells(1, 1).Borders(8).LineStyle = 1 ‘上
xlSheet.Cells(1, 1).Borders(9).LineStyle = 1 ‘下
xlSheet.Cells(1, 1).Borders(7).LineStyle = 1 ‘左
xlSheet.Cells(1, 1).Borders(10).LineStyle = 1 ‘右
ボックス罫線
xlSheet.Range(“A1:H10”).Borders.LineStyle = 1
Range を Cells で柔軟に指定
xlSheet.Range(xlSheet.Cells(1, 1), xlSheet.Cells(10, 8)).Borders.LineStyle = 1
Access→Excel 表作成の完全サンプル(実務用)
Private Sub コマンド0_Click()
Dim xlApp As Object
Dim xlBook As Object
Dim xlSheet As Object
Dim DAT(6, 2)
Dim i As Long
Set xlApp = CreateObject(“Excel.Application”)
Set xlBook = xlApp.Workbooks.Add
Set xlSheet = xlBook.Worksheets(1)
xlApp.Visible = True
‘ サンプルデータ
DAT(1, 1) = “AA”: DAT(1, 2) = 15000
DAT(2, 1) = “AB”: DAT(2, 2) = 8000
DAT(3, 1) = “AC”: DAT(3, 2) = 12000
DAT(4, 1) = “BA”: DAT(4, 2) = 7500
DAT(5, 1) = “CA”: DAT(5, 2) = 24000
DAT(6, 1) = “CB”: DAT(6, 2) = 6500
‘ 列幅・行高
xlSheet.Range(“A:D”).ColumnWidth = 9
xlSheet.Rows(“1:7”).RowHeight = 15
‘ セル結合
xlSheet.Range(“A2:A4”).Merge
xlSheet.Range(“A6:A7”).Merge
xlSheet.Range(“D2:D4”).Merge
xlSheet.Range(“D6:D7”).Merge
‘ 見出し
With xlSheet
.Cells(1, 1) = “区分”
.Cells(1, 2) = “分類”
.Cells(1, 3) = “数量”
.Cells(1, 4) = “合計”
.Cells(2, 1) = “A”
.Cells(5, 1) = “B”
.Cells(6, 1) = “C”
End With
‘ データ
For i = 1 To 6
xlSheet.Cells(i + 1, 2).Value = DAT(i, 1)
xlSheet.Cells(i + 1, 3).Value = DAT(i, 2)
Next i
‘ 合計計算
xlSheet.Cells(2, 4).Value = DAT(1, 2) + DAT(2, 2) + DAT(3, 2)
xlSheet.Cells(5, 4).Value = DAT(4, 2)
xlSheet.Cells(6, 4).Value = DAT(5, 2) + DAT(6, 2)
‘ 罫線
xlSheet.Range(“A1:D7”).Borders.LineStyle = 1
End Sub
Accessのテーブル・クエリ → Excel出力(実務向け)
最も安定する方法:TransferSpreadsheet
DoCmd.TransferSpreadsheet _
TransferType:=acExport, _
SpreadsheetType:=acSpreadsheetTypeExcel12Xml, _
TableName:=”T_売上”, _
FileName:=”C:\test\売上.xlsx”, _
HasFieldNames:=True
クエリに加工してから出力(推奨)
DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel12Xml, _
“Q_売上加工済”, “C:\test\売上.xlsx”, True
Recordset を使う方法(中級者向け)
Dim rs As DAO.Recordset
Set rs = CurrentDb.OpenRecordset(“SELECT * FROM T_売上”)
Dim r As Long: r = 2
Do While Not rs.EOF
xlSheet.Cells(r, 1).Value = rs!売上日
xlSheet.Cells(r, 2).Value = rs!担当
xlSheet.Cells(r, 3).Value = rs!金額
r = r + 1
rs.MoveNext
Loop
rs.Close
Access×Excel VBA の使い分け早見表
| 目的 | 推奨方法 |
|---|---|
| テーブル・クエリをExcelへ出力 | TransferSpreadsheet |
| 書式のある帳票を作りたい | 遅延バインドで書式指定 |
| データを加工して出力 | クエリで加工してから出力 |
| 1行ずつ細かく制御したい | Recordset → Cells |
まとめ
Access と Excel の連携は多くの方法がありますが、
この記事のように体系化すると 迷わず書けるようになります。
実務で30年使って分かったこと
VBAは理屈より、実際に動くコードを作って感覚で覚える部分が多いです。
独学でも十分に使い物になりますし、
何より「作りたいものを作れること」が一番重要です。
Excel定数ダウンロード

