Почему так велика разница в варианте изменения стоимости? - PullRequest
0 голосов
/ 25 июня 2011

Пожалуйста, объясните мне, почему второй вариант быстрее?

iTimer! = Timer
sname = Split(Cells(2, 300).Address, "$")(1)

Range("A300:" & sname & "600").Value2 = Range("A300:" & sname & "600").Value2

    MsgBox "Time is " & _
Timer - iTimer! & " sec.", vbExclamation, ""

Выполняется за ~ 1 сек.

iTimer! = Timer
sname = Split(Cells(2, 300).Address, "$")(1)
Range("A1:" & sname & "300").Select
Range("A300:" & sname & "600").Value2 = ActiveCell.Value2

    MsgBox "Time is " & _
Timer - iTimer! & " sec.", vbExclamation, ""

Выполняется за ~ 0,01 с

1 Ответ

1 голос
/ 25 июня 2011

Для меня 1-й вариант, т.е. без shenanigan Select-ActiveCell, быстрее (примерно в 6-8 раз), чем второй вариант (с Select-ActiveCell).

Этого следует ожидать, потому что каждое взаимодействие между VBA и листом Excel сопряжено с определенными издержками, и вы минимизируете количество взаимодействий в первом варианте.

Теперь я понятия не имею, почему вы испытали бы обратное. Разве это не опечатка и ты имел ввиду вариант 1 быстрее? Я не знаю. Обратите внимание, что я тестировал его в Excel 2003 (и поэтому в тесте пришлось сократить количество столбцов до 256, т. Е. Cells(2, 256)). Я не понимаю, почему результаты будут отличаться в Excel 2007 или 2010, но, к сожалению, у меня их нет и я не могу их протестировать.

Кроме того, я использовал Debug.Print вместо MsgBox для отображения результатов, что гораздо менее раздражает при выполнении нескольких реализаций теста.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...