【ACCESS VBA】ACCESSでSQLを使うサンプル(CREATE TABLE等(データ定義言語(DDL))はDAO.Executeを使う SELECT(データ操作言語(DML))はOpenRecordsetを使う)

VBA・Officeカテゴリを表すパンダのイラスト VBA・Office

この記事でできること

Access VBAでDAO(Data Access Objects)を使用してSQLを実行する方法を解説します。テーブルの作成(DDL)やデータの追加・更新・削除(DML)には Execute メソッドを使い、データの取得(SELECT)には OpenRecordset メソッドを使う基本的なサンプルコードと手順を確認できます。

前提条件

  • Microsoft Access がインストールされている環境
  • VBAの基本的な操作方法(VBEの標準モジュールにコードを貼り付けて実行できること)についての基礎知識

サンプルコード

以下のVBAコードを標準モジュールに貼り付けて実行してください。トランザクション処理を用いて、テーブル作成からデータ操作、SELECTによるイミディエイトウィンドウへの出力までの一連の流れを安全に実行します。

Public Sub ACCESSでSQLを使うサンプル()
Dim wrk As DAO.Workspace
Dim dbs As DAO.Database
Dim rs As DAO.Recordset

Set wrk = DBEngine(0)
Set dbs = CurrentDb

On Error GoTo trans_Err

' トランザクションの開始
wrk.BeginTrans

' データ定義言語(DDL)・データ操作言語(DML)は Execute を使用する
dbs.Execute "CREATE TABLE テスト(番号 INT, 名前 CHAR(10), 誕生日 DATE);", dbFailOnError

dbs.Execute "INSERT INTO テスト(番号, 名前, 誕生日) VALUES (1, '山田太郎', #2016/1/21#);", dbFailOnError
dbs.Execute "INSERT INTO テスト(番号, 名前, 誕生日) VALUES (2, '山田花子', #2016/2/21#);", dbFailOnError
dbs.Execute "INSERT INTO テスト(番号, 名前, 誕生日) VALUES (2, '山田チーズ', #2016/3/21#);", dbFailOnError
dbs.Execute "UPDATE テスト SET 名前 = '山田太郎次郎' WHERE 番号 = 1;", dbFailOnError
dbs.Execute "DELETE FROM テスト WHERE 番号 = 2;", dbFailOnError

' データ操作言語(DML)のSELECTは OpenRecordset を使用する
Set rs = dbs.OpenRecordset("SELECT * FROM テスト;")

Do Until rs.EOF
Debug.Print rs(0); " / "; rs(1); " / "; rs(2)
rs.MoveNext
Loop

rs.Close
Set rs = Nothing

' テスト用テーブルの削除(必要に応じてコメントアウトを解除)
' dbs.Execute "DROP TABLE テスト;", dbFailOnError

' トランザクションのコミット
wrk.CommitTrans dbForceOSFlush

trans_Exit:
' クリーンアップ
If Not rs Is Nothing Then rs.Close
Set dbs = Nothing
Set wrk = Nothing
Exit Sub

trans_Err:
' エラー時のロールバック
Debug.Print "エラー発生: " & DAO.Errors(0).Description
wrk.Rollback
Resume trans_Exit
End Sub

コードの要点と使い分け

  • Execute メソッド: CREATE TABLE や INSERT, UPDATE, DELETE など、レコードを返す必要のないSQL文(DDLおよびDML)を実行します。
  • OpenRecordset メソッド: SELECT クエリなど、結果セットを取得する必要がある場合に使用します。
  • トランザクション (BeginTrans / CommitTrans / Rollback): まとまった処理の途中でエラーが発生した場合に安全にロールバックできるようにしています。

期待される出力結果

上記のコードを実行し、イミディエイトウィンドウ(Ctrl + G)を確認すると、以下のような結果が出力されます。

1 / 山田太郎 / 2016/01/21

トラブルシューティングと注意点

  • すでに同名の「テスト」テーブルが存在する場合は CREATE TABLE でエラーが発生するため、事前にテーブルを削除するか別名を指定してください。
  • AccessのSQL(Jet/ACE SQL)では、日付リテラルを #(シャープ)で囲む必要があります。

この記事の更新履歴

この記事は、生成AIを活用した自動レビュー・更新フローにより内容を見直し、必要な修正を反映しています。

2026年9月27日

  • 変更未定義だったRecordset変数(rs)の宣言を追加し、コードブロック形式で正しく表示されるように修正しました。
  • 追加この記事でできること、前提条件、DDL/DMLの使い分けに関する解説、および期待される出力結果を追加しました。

文書情報

記事タイトル
【ACCESS VBA】ACCESSでSQLを使うサンプル(CREATE TABLE等(データ定義言語(DDL))はDAO.Executeを使う SELECT(データ操作言語(DML))はOpenRecordsetを使う)
作成日
更新日
Source URL
https://papanda925.com/?p=643

ライセンス: 本記事のうち、当サイトが権利を有する本文・自作図表は、特記なき限り CC BY 4.0 で利用できます。生成AIを活用して作成・編集した内容を含みます。コードについて、別途ライセンス表示またはリンク先GitHubリポジトリのライセンスがある場合は、その条件を優先します。引用・第三者資料・画像・商標等は本ライセンスの対象外です。 利用ポリシー

タイトルとURLをコピーしました