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)