一般社団法人 全国個人事業主支援協会

COLUMN コラム

  • [ExcelVBA] CreateObjectは速い?遅い?

先日、ExcelVBAを専門に扱う同業者の中でオブジェクトのDictionaryやADOの宣言の方法が人によって異なるという話題になったので、そのことを記事に書こうと思います。

 

私も以前、宣言の方法を変えたのですが、

当初、書いていたコードは下記のようなコードです。

 


Dim Dic As Object

  Set Dic = Create.Object("Scripting.Dicrionary")


Dim ADO As Object

  Set ADO = Create.Object("ADODB.Stream")


こういった感じで、オブジェクトを作成して、

Create.objectで作り出してオブジェクトに代入していたんです。

 

作成時は全く気付かなかったんですが、

だんだんコードを使い続けている、主にテスト作業を繰り返し行っているとか、

改修が入った際に、遅くなってると思うことが多々ありました。

色々模索はしたんですが、正直原因は不明です。

ただ、やはりCreate.Objectを使用するとことが遅くなっていくということには気づきました。

別のブックに移し変えたりすると早くなったりするので、キャッシュ?なんだろう?というところです。

 

 

そこから記述方法を変更して、今使用している宣言のコードは下記のようなコードです。


Dim Dic As Scripting.Dictionary

  Set Dic = New Scripting.Dictionary


Dim ADO As ADODB.Stream

  Set ADO = New ADODB.Stream


 

早期バインディング型に変更しました。

書いてしばらくはどちらにも感覚や速度に差はないのですが、

こちらの方が、長年使っていても速度の維持ができている感覚があります。

 

基本的には同じような宣言なのに、全く違うっていうのも面白いなと思います。

ただ、人によってはこっちの方がいいっていうこだわりを持っている人も多いので、

これが一概とは言えませんが、経験上はこのコードが望ましいと思います。

 

The following two tabs change content below.

Ayaka.T

この記事をシェアする

  • Twitterでシェア
  • Facebookでシェア
  • LINEでシェア