未分類

Excel - セル参照の方法を変更して、処理速度向上を試す

Excel VBA でループ処理中にワークシートのセル参照の方法を変更すると、処理速度が向上するのではないかと考え、参照方法を検討しました。
Range オブジェクトを使用すると、Value プロパティを指定することになりますが、Cells オブジェクトでは必要ありません。
検証した結果ですが、200 個のワークブックをループ処理した場合、改善後は少しだけ (5% ほど) 速くなりました。劇的な速度向上ではありませんが、処理対象のワークブックが増えるほど効果があります。全面的にこちらに変更してもよいのですが、セルに名前を付けている箇所を参照する場合には、Range オブジェクトを使う必要があります。使い分けが必要かもしれません。

Range オブジェクトを使用するパターン

Dim wbReadBook As Object
Set wbReadBook = Workbooks.Open("D:\Test\TestBook1.xlsx")
With Workbooks("売掛金台帳").Worksheets("Sheet1")
  .Range("A1").Value = wbReadBook.Worksheets("Sheet1").Range("A1")
  .Range("A2").Value = wbReadBook.Worksheets("Sheet1").Range("A2")
  .Range("A3").Value = wbReadBook.Worksheets("Sheet1").Range("A3")
  .Range("A4").Value = wbReadBook.Worksheets("Sheet1").Range("A4")
  .Range("A5").Value = wbReadBook.Worksheets("Sheet1").Range("A5")
End With
wbReadBook.Close (False)

Cells オブジェクトを使用するパターン

Dim wbReadBook As Object
Set wbReadBook = Workbooks.Open("D:\Test\TestBook1.xlsx")
With Workbooks("売掛金台帳").Worksheets("Sheet1")
  .Cells(1,"A") = wbReadBook.Worksheets("Sheet1").Cells(1,"A")
  .Cells(2,"A") = wbReadBook.Worksheets("Sheet1").Cells(2,"A")
  .Cells(3,"A") = wbReadBook.Worksheets("Sheet1").Cells(3,"A")
  .Cells(4,"A") = wbReadBook.Worksheets("Sheet1").Cells(4,"A")
  .Cells(5,"A") = wbReadBook.Worksheets("Sheet1").Cells(5,"A")
End With
wbReadBook.Close (False)

-未分類