
✅ はじめに
AccessやExcelなどでデータベースと接続する際に利用される
ADODB.Connection と ADODB.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 参照設定