【Access VBA】「Object」と「ADODB.Connection」の違いとは?CreateObjectとNewの使い分け解説

✅ はじめに

AccessやExcelなどでデータベースと接続する際に利用される
ADODB.ConnectionADODB.Recordset
VBAでこれらを扱うときに、次のような2通りの書き方があります。

' 遅延バインディング
Dim rs As Object
Set rs = CreateObject("ADODB.Recordset")

' 早期バインディング
Dim rs As ADODB.Recordset
Set rs = New ADODB.Recordset

これらは同じ動作をするようで、実は違いがたくさんあります。
この記事では、初心者でもわかるように、「Object」と「ADODB.Connection(またはRecordset)」の違いと、それぞれのメリット・デメリットを解説します。


遅延バインディングと早期バインディングの違い

項目 遅延バインディング(CreateObject) 早期バインディング(New)
型の指定 Object型(あいまい) 明示的な型指定(強い)
参照設定 不要 必要(ADOライブラリが必要)
補完機能(IntelliSense) × 使えない ○ 使える(開発が楽)
エラー検出 実行時 コンパイル時(安全)
実行速度 やや遅い 速い(最適化される)
配布のしやすさ ◎(環境問わず動く) △(参照設定が必要)

〇 サンプルコード比較

■ 遅延バインディング(CreateObject で動的に作成)

Public Sub Sample_LateBinding()
    Dim conn As Object
    Dim rs As Object
    Dim sql As String

    Set conn = CreateObject("ADODB.Connection")
    conn.Open "DSN=MyDSN;UID=user;PWD=pass"

    Set rs = CreateObject("ADODB.Recordset")
    sql = "SELECT * FROM M_User"
    rs.Open sql, conn, 1, 1

    MsgBox rs.Fields("担当者名称").Value

    rs.Close
    conn.Close
    Set rs = Nothing
    Set conn = Nothing
End Sub

補完機能が使えないため、タイポや構文ミスに気づきにくい。配布や軽量スクリプトには便利です。

■ 早期バインディング(Newキーワード+明示的な型指定)

Public Sub Sample_EarlyBinding()
    Dim conn As ADODB.Connection
    Dim rs As ADODB.Recordset
    Dim sql As String

    Set conn = New ADODB.Connection
    conn.Open "DSN=MyDSN;UID=user;PWD=pass"

    Set rs = New ADODB.Recordset
    sql = "SELECT * FROM M_User"
    rs.Open sql, conn, adOpenStatic, adLockReadOnly

    MsgBox rs.Fields("担当者名称").Value

    rs.Close
    conn.Close
    Set rs = Nothing
    Set conn = Nothing
End Sub

Visual Basic Editorで補完が使え、コードの可読性と保守性が圧倒的に向上します。


■ どちらを使えばいいの?

シチュエーション 推奨スタイル
開発・メンテナンス重視 ■ 早期バインディング(New)
実行環境が多様(配布) ■ 遅延バインディング(CreateObject)

■ 接続先の種類によって変化するのか?

両者の違いはあくまで「VBA(VB言語)とADODBライブラリの使い方の違い」であり、
接続先のデータベースの種類(Oracle / SQL Server / MySQL など)には依存しません。


■ まとめ:ObjectとADODB.Connectionの違いを理解して、状況に応じた書き方を!

VBAでは Object を使うことで 型をあいまいにした柔軟な記述ができますが、安全性や保守性を犠牲にすることにもつながります。

一方、ADODB.Connection や ADODB.Recordset のように型を明示することで、コード補完やエラー検出が強力にサポートされ、開発がスムーズになります。

配布するマクロや、実行環境が複数あるケースでは、遅延バインディングの方が適していることもあるため、プロジェクトの特性に応じて選ぶのがベストです。

■ 実務でのおすすめ

  • 開発中のマクロ → 早期バインディング:型チェック・補完・高速実行
  • 他人のPCでも動かしたい → 遅延バインディング:参照設定なしでOK

「何が良い/悪い」ではなく、目的と相手(環境)に応じて選ぶことが、VBA開発者として重要です。


■ 関連記事


【保存版】Oracle OO4O(Oracle Objects for OLE)とは?サポート終了とADOへの移行ガイド


【移行ガイド】OO4O→ADOに移行する際のフォーム関数の呼び出し方の違いと注意点


■ 関連キーワード

  • VBA Object Recordset 違い
  • ADODB.Connection CreateObject 使い方
  • VBA 早期バインディング 遅延バインディング
  • VBA 補完機能が効かない理由
  • Excel Access ADODB 参照設定