Excelで日々のデータを入力・集計し、その結果をマスターデータが保管されているAccessのデータベースに登録したい、という運用は非常に一般的です。VBAを使えば、Excelから直接Accessデータベースに接続し、新しいデータ(レコード)を追加する処理を自動化できます。
この記事では、VBAでAccessデータベースを操作するための主要な技術である**DAO (Data Access Objects)**を使い、Accessのテーブルに新しいレコードを1件追加するための基本的なコードと、その仕組みを解説します。
【重要】実行前の参照設定
DAOの機能をVBAで利用するには、事前に**「参照設定」**が必要です。この設定を行うことで、VBAがAccessデータベースの部品(オブジェクト)を正しく認識できるようになります。
- VBE(
Alt+F11)を開き、メニューのツール>参照設定をクリックします。 - 一覧の中から**「Microsoft Office XX.0 Access database engine Object Library」**を探し、チェックを入れて「OK」をクリックします。(XX.0の部分はお使いのOfficeのバージョンによって異なります)
完成したVBAコード
以下が、Accessデータベースに接続し、指定したテーブルに新しいレコードを追加するVBAコードです。
'参照設定: Microsoft Office XX.0 Access database engine Object Library
Sub AddNewRecordToAccess()
' DAOオブジェクト用の変数を宣言します
Dim db As DAO.Database
Dim rs As DAO.Recordset
Dim dbPath As String
' --- 1. データベースに接続 ---
' データベースファイルのパスを指定
dbPath = ThisWorkbook.Path & "\SampleDB.accdb"
' 指定したデータベースを開く
Set db = DBEngine.OpenDatabase(dbPath)
' --- 2. テーブル(レコードセット)を開く ---
' "M_Employees"テーブルを開く
Set rs = db.OpenRecordset("M_Employees")
' --- 3. 新規レコードを追加して値を設定 ---
' 新しいレコードを追加する準備
rs.AddNew
' 各フィールドに値を設定
rs!EmployeeID = "EMP025"
rs!EmployeeName = "田中 太郎"
rs!Department = "営業部"
' レコードの変更を保存(確定)
rs.Update
' --- 4. オブジェクトを閉じて後片付け ---
' 開いた順とは逆の順で閉じる
rs.Close
db.Close
' オブジェクト変数を解放
Set rs = Nothing
Set db = Nothing
MsgBox "Accessデータベースにレコードを追加しました。"
End Sub
コードのポイント解説
① データベースへの接続
Set db = DBEngine.OpenDatabase(dbPath)
参照設定を行うと、VBAのプログラム全体を管理するDBEngineオブジェクトが使えるようになります。その.OpenDatabaseメソッドに、接続したいAccessデータベースファイル(.accdb)のパスを渡すことで、データベース全体を操作するためのDatabaseオブジェクトを取得します。
② レコードセットを開く
Set rs = db.OpenRecordset("M_Employees")
次に、データベースオブジェクト(db)の.OpenRecordsetメソッドを使い、操作したいテーブルの名前(例: "M_Employees")を指定します。これにより、テーブル内のレコードの集まり(レコードセット)を操作するためのRecordsetオブジェクトが取得できます。
③ 新規レコードの追加と値の設定
これがレコードを追加する一連の処理の核心部です。
rs.AddNew
rs!EmployeeID = "EMP025"
rs!EmployeeName = "田中 太郎"
rs.Update
.AddNew: まず、.AddNewメソッドを実行します。これは、テーブルに新しいデータを書き込むための「空の行(バッファ)」を用意する命令です。rs!フィールド名 = 値: 用意された空の行の各フィールドに、!(エクスクラメーションマーク)を使って値を設定していきます。rs!EmployeeIDは、「rsレコードセットのEmployeeIDフィールド」という意味になります。.Update: 全てのフィールドに値を設定し終えたら、最後に必ず.Updateメソッドを実行します。この命令により、バッファに書き込まれたデータが、実際のデータベースのテーブルに保存(コミット)されます。.Updateを忘れると、追加した内容はすべて破棄されてしまうので注意してください。
④ クローズ処理とオブジェクトの解放
rs.Close
db.Close
Set rs = Nothing
Set db = Nothing
データベースの操作が終わったら、必ず後片付けを行います。オブジェクトは開いた時とは逆の順序で閉じるのが基本です。まずレコードセット(rs)を.Closeし、次にデータベース(db)を.Closeします。最後に、各オブジェクト変数にNothingを代入して、メモリを完全に解放します。
まとめ
DAOを使ってAccessにレコードを追加する手順は、以下の流れになります。
- OpenDatabase でデータベースに接続する。
- OpenRecordset でテーブルを開く。
- AddNew で新しい行の準備をする。
rs!フィールド名 = 値でデータをセットする。- Update で保存を確定する。
- Close と Nothing で後片付けをする。
この一連の流れは、AccessデータベースをVBAで操作する際の基本パターンですので、ぜひ覚えて活用してください。
副業から独立まで「稼げる」Webスキルを習得する(PR)
ここまで読んでいただきありがとうございます。 最後に宣伝をさせてください。
「副業を始めたいが、何から手をつければいいかわからない」「独学でスキルはついたが、収益化できていない」という悩みを持つ方には、マンツーマン指導のWebスクール**「メイカラ」**が適しています。
このスクールは、単に技術を教えるだけでなく、**「副業として具体的にどう稼ぐか」**という実務直結のノウハウ提供に特化している点が特徴です。
講師陣は、実際に「副業Webライターから1年で独立して月収100万円」を達成したプロや、現役で利益を出し続けているブロガーなど、確かな実績を持つプレイヤーのみで構成されています。そのため、机上の空論ではない、現場で通用する戦術を学ぶことができます。
副業に特化した強み
- 最短ルートの提示: 未経験からでも実績を出せるよう、マンツーマンで指導。
- AI活用の習得: 副業の時間対効果を最大化するための、正しいAI活用スキルも網羅。
- 案件獲得のチャンス: 運営がWebマーケティング会社であるため、実力次第で社内案件の紹介など、仕事に直結する可能性があります。
受講者の多くは、「在宅でできる仕事を探している」「副業を頑張りたい」という20代・30代・40代が中心です。
受講前には、講師による無料説明が行われます。無理な勧誘はなく、自分に合った副業スタイルやプランを相談できるため、まずは話を聞いてみることから始めてみてはいかがでしょうか。
