Страница 2 из 2

Re: Можно ли упростить

Добавлено: 30 июл 2008, 05:04
SAS888
Позволю себе тоже подискутировать на эту тему. Безусловно, что подсчитывать количество используемых строк (UsedRange.Rows.Count) не подходит. Так, например, если используются строки с 5 по 8, то получим значение 4. Корректировать, т.е. проводить еще одну математическую операцию, нерационально.
Если речь идет об экономии того ничтожного времени, которое тратит Excel на подсчет количества строк, то для определения последней заполненной строки лучше вообще не использовать свойство Count. Если применить метод ActiveSheet.Cells.SpecialCells(xlCellTypeLastCell).Row, то будет чуть быстрее, за счет того, что Excel, где-то у себя в "недрах" хранит это значение и выдает его мгновенно. Правда, нужно заметить, что если, например, ввести данные в ячейку, расположенную "ниже" диапазона UsedRange, а затем очистить эту ячейку, то предлагаемый метод вернет номер строки этой ячейки. Но для определения, например, последней заполненной строки столбца "A", используя

Код: Выделить всё

Cells(Cells.SpecialCells(xlCellTypeLastCell).Row, "A").End(xlUp).Row
ошибки не будет. Т.е. таким образом, мы не привязаны к общему количеству строк (2003 или 2007) и не тратим время на свойство Count.

Re: Можно ли упростить

Добавлено: 30 июл 2008, 09:51
Serge_Bliznykov
SAS888, Супер. Класс. Блеск. Вы, как всегда, - бесподобны!!!!
Большое спасибо за информацию.

Re: Можно ли упростить

Добавлено: 30 июл 2008, 16:20
Aent

Код: Выделить всё

Cells(Cells.SpecialCells(xlCellTypeLastCell).Row, "A").End(xlUp).Row
вернёт номер строки ПЕРВОЙ а не последней заполненной в последней области
столбца А ячейки
Правильный код

Код: Выделить всё

Cells(Cells.SpecialCells(xlCellTypeLastCell).Row+1, "A").End(xlUp).Row
Rows.Count так же срабатывает мгновенно. Рекомендовал бы пользоваься им.

Re: Можно ли упростить

Добавлено: 30 июл 2008, 16:46
Serge_Bliznykov
ну вот... доверился на 100% мнению профессионалов.. а мнения разошлись...
прийдётся погонять тесты на скорость.
Спасибо.

Re: Можно ли упростить

Добавлено: 31 июл 2008, 06:20
SAS888
Aent. Да, конечно +1.
По поводу времени выполнения: оно ничтожно мало, и Rows.Count действительно выполняется быстрее. Странно, значит пересчитать все строки быстрее, чем выдать готовое значение. Где же он его хранит?

Re: Можно ли упростить

Добавлено: 31 июл 2008, 09:39
Aent
SAS888,
Где же он его хранит?
Как константу в классе, релизующем коллекцию Rows. Разумеется,никто строки не считает :)