2025年4月頃からADO.Connection.Openが遅くなる事象が発生しています。 発生している事象と現時点で取れる対応策をご紹介します
問題の詳細
症状
ADO.Connection.Openを開いているブック(マクロ実行ブックを含む)に対して実行すると処理に12秒程度の時間がかかる
影響を受ける処理
'問題が発生する典型的なコード Dim myCON As ADODB.Connection Set myCON = New ADODB.Connection myCON.Provider = "Microsoft.ACE.OLEDB.12.0" myCON.Properties("Extended Properties") = "Excel 12.0" myCON.Open ThisWorkbook.FullName '←ここで12秒程時間がかかる
解決策
IMEXを指定する
ConnectionオブジェクトのPropertiesにIMEXを指定することで、処理時間を約半分の6秒まで短縮することが出来ます。
'問題が発生する典型的なコード Dim myCON As ADODB.Connection Set myCON = New ADODB.Connection myCON.Provider = "Microsoft.ACE.OLEDB.12.0" myCON.Properties("Extended Properties") = "Excel 12.0;IMEX=1" myCON.Open ThisWorkbook.FullName '↑指定する
IMEXプロパティ
IMEXは「IMport EXport mode」の略で、ADOでExcelファイルに接続する際のデータ読み書きモードを指定するパラメータです。
モード | 機能 | 用途 |
---|---|---|
0 | Export mode(書き込みモード) | データの書き込み・更新処理 |
1 | Import mode(読み込み専用モード) | データの読み取り・抽出処理 |
2 | Linked mode(読み書きモード) | 読み取り・変更・保存の両方 |
1のImport modeを設定することで処理時間を短縮することが出来ます。
この方法であればIMEXの記述を追加するだけで可能なためどの環境でも対応できます。
プロバイダーの切り替え
Excelを操作するためのプロバイダーを「Microsoft.ACE.OLEDB.12.0」から「Microsoft.ACE.OLEDB.15.0」に変更することで症状を完全に直すことが可能です。
ただしOffice365の標準の環境ではMicrosoft.ACE.OLEDB.15.0を使用することが出来ません。
Access 2013 Runtimeをインストールする必要があります。
Access 2013 Runtimeのインストール
以下は筆者が実際に行ったインストール作業です。
途中でソフトのインストール・アンインストールを行っておりますが、実行については自己責任でよろしくお願いします。
Access 2013 Runtimeをダウンロード
下記サイトでAccess 2013 Runtimeをダウンロード
www.microsoft.com
Access database engine 2010をアンイストール
上記でダウンロードしたAccess 2013 Runtimeインストールしようとしたところ下記のエラーが発生しました。
コントロールパネル → プログラム → プログラムと機能
Microsoft Access database engine 2010をアンイストール
アンインストール後にダウンロードしたAccess 2013 Runtimeをインストールすれば準備完了です
修正後コード
Dim myCON As ADODB.Connection Set myCON = New ADODB.Connection myCON.Provider = "Microsoft.ACE.OLEDB.15.0" myCON.Properties("Extended Properties") = "Excel 12.0" myCON.Open ThisWorkbook.FullName
こちらの対応を行った場合、IMEXの設定を行わなくても処理速度は改善されます。
12秒が0.1秒前後に改善されます。
まとめ
ADO.Connectionの遅延問題は、プロバイダーをMicrosoft.ACE.OLEDB.15.0に切り替えることで解決できます。
ただし、Access 2013 Runtimeのインストールが必要となるため、会社等では対応ができない可能性もあります。
その場合はIMEXの設定を活用することで遅延影響を少しでも抑える対応を試してみてください。