VBA技術解説
事前バインディングと遅延バインディング(実行時バインディング)

ExcelマクロVBAの問題点と解決策、VBAの技術的解説
公開日:2013-06-10 最終更新日:2019-12-21

事前バインディングと遅延バインディング(実行時バインディング)


マクロVBAでActiveXオブジェクトを操作する場合のVBA記述方法が2通りあります。
オブジェクトがオブジェクト変数に代入されるとき、事前バインディングと遅延バインディング(実行時バインディング)の2通りです。

バインディングとは

バインディングはbindingで、縛るとか束ねると言う意味の英単語です。
オブジェクトがオブジェクト変数に代入されるときにバインディングと呼ばれる処理を実行します。
記述方法の違いにより、事前バインディングと遅延バインディング(実行時バインディングとも呼びます)の2通りの方法があります。

事前バインディング

特定のオブジェクト型として宣言された変数に代入される場合、オブジェクトは事前(コンパイル時に)バインディングされます。
事前バインディングされたオブジェクトでは、アプリケーションが実行される前に、
コンパイラによってメモリの割り当てとその他の最適化が実行されます。
ただし、外部オブジェクトの場合は参照設定が必要になります。

遅延バインディング(実行時バインディング)

オブジェクトが Object 型として宣言された変数に代入される場合は、遅延(実行時)にバインディングされます。
この型のオブジェクトは、任意のオブジェクトへの参照を保持できますが、
事前バインディングされたオブジェクトの利点をほとんど持ちません。

実装(VBA記述)の違い

遅延バインディング

CreateObject関数を使用します。
・CreateObject関数の構文 ・CreateObjectの解説 ・CreateObject関数の使用例 ・GetObject関数

Dim objFSO As Object
Set objFSO = CreateObject("Scripting.FileSystemObject")


事前バインディング

「ツール」→「参照設定」で
「Microsoft Scripting Runtime」にチェックを付ける。

Dim objFSO As New FileSystemObject
または、
Dim objFSO As FileSystemObject
Set objFSO = New FileSystemObject


一言で言えば、
変数宣言の型が、Objectが遅延バインディング、特定のオブジェクト型が事前バインディング

事前バインディングの利点

可能な限り、事前バインディングされたオブジェクトを使用してください。
これによって、コンパイラは、アプリケーションをより効率的にする重要な最適化を実行できます。
事前バインディングされたオブジェクトは遅延バインディングされたオブジェクトよりも処理が高速です。
使用されているオブジェクトの種類が明確になるため、コードがより読みやすくなり、保守も簡単になります。
その他の利点として、自動コード補完機能が有効になり、プロパティ・メソッドの一覧を見る事が出来ます。

遅延バインディングの場合

Dim objFSO As Object
Set objFSO = CreateObject("Scripting.FileSystemObject")
If Not objFSO.FolderExist(strDir) Then
  MsgBox ("指定のフォルダは存在しません")
  Exit Sub
End If

上のコードには、スペルミスがあります。

探すのは困難ですね。

実行時には、

マクロ VBA サンプル画像

マクロ VBA サンプル画像


事前バインディングの場合

Dim objFSO As FileSystemObject
Set objFSO = New FileSystemObject
If Not objFSO.FolderExist(strDir) Then
  MsgBox ("指定のフォルダは存在しません")
  Exit Sub
End If

実行時には、

マクロ VBA サンプル画像

もとより、事前バインディングの場合は、

マクロ VBA サンプル画像

このように入力候補がでるので、スペルミスはほとんどなくなります。

よほど特殊な事情が無い限り、事前バインディンクするようにして下さい。

参照設定の方法
VBEの画面で、「ツール」→「参照設定」
ここで必要なオブジェクトにチェックを付けます。

非常に多くのライブラリがあります。
正式な名称を知らずに、その場で探すことは困難です。
事前に正式なライブラリ名称を調べてから設定して下さい。




同じテーマ「マクロVBA技術解説」の記事

事前バインディングと遅延バインディング(実行時バインディング)
Dictionary(ディクショナリー)連想配列の使い方について
Dictionary(ディクショナリー)のパフォーマンスについて
VBAでのInternetExplorer自動操作
VBAでのSQLの基礎(SQL:Structured Query Language)
VBAで正規表現を利用する(RegExp)
VBAでメール送信する(CDO:Microsoft Collaboration Data Objects)
VBAでのOutlook自動操作
ADO(ActiveX Data Objects)の使い方の要点
特殊フォルダの取得(WScript.Shell,SpecialFolders)
参照設定、CreateObject、オブジェクト式の一覧


新着記事NEW ・・・新着記事一覧を見る

Excelの新機能「リストとセル内配列」:1つのセルに複数の値|エクセル入門(2026-09-28)
Excel関数クロスワード(2026-09-26)
Excelショートカットキークイズ(2026-09-23)
Excel関数名クイズ(2026-09-21)
気ままに一手|リレー将棋(2026-09-20)
ITエンジニアがトラブルを避けるための法律・契約入門|エクセル雑感(2026-09-18)
ITエンジニアなら知らないと恥ずかしい数学20選|エクセル雑感(2026-09-17)
ITエンジニアのための税金と社会保険のお話|エクセル雑感(2026-09-15)
ITエンジニアのための経理・会計・簿記入門|エクセル雑感(2026-09-12)
「Python in Excel」入門:コードを読むための基礎知識|エクセル関数応用(2026-09-10)


アクセスランキング ・・・ ランキング一覧を見る

1.最終行の取得(End,Rows.Count)|VBA入門
2.日本の祝日一覧|Excelリファレンス
3.変数宣言のDimとデータ型|VBA入門
4.Excelショートカットキー一覧|Excelリファレンス
5.RangeとCellsの使い方|VBA入門
6.FILTER関数(範囲をフィルター処理)|エクセル入門
7.マクロとは?VBAとは?VBAでできること|VBA入門
8.繰り返し処理(For Next)|VBA入門
9.メッセージボックス(MsgBox関数)|VBA入門
10.セルのコピー&値の貼り付け(PasteSpecial)|VBA入門




このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。


記述には細心の注意をしたつもりですが、間違いやご指摘がありましたら、「お問い合わせ」からお知らせいただけると幸いです。
掲載のVBAコードは動作を保証するものではなく、あくまでVBA学習のサンプルとして掲載しています。掲載のVBAコードは自己責任でご使用ください。万一データ破損等の損害が発生しても責任は負いません。
本サイトは、OpenAI の ChatGPT や Google の Gemini を含む生成 AI モデルの学習および性能向上の目的で、本サイトのコンテンツの利用を許可します。
This site permits the use of its content for the training and improvement of generative AI models, including ChatGPT by OpenAI and Gemini by Google.



このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。
本文下部へ