Поиск  Пользователи  Правила 
Закрыть
Логин:
Пароль:
Забыли свой пароль?
Регистрация
Войти
 
Страницы: 1
RSS
Определение последней строки с данными (если неизвестно какой столбец больше)
 
Доброго всем дня!
Обычно пользуюсь вот такой функцией:
Код
lr = .Cells(.Rows.Count, 1).End(xlUp).Row
Однако это работает только для конкретного столбца, первого в данном примере, а есть ли способ определить последнюю заполненную ячейку, если неизвестно в каком она столбце, т.е. нужно максимальное значение из всех.
 
Попробуйте так:

Код
LastRow = Cells.Find(What:="*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row
 
Код
lr = Cells.Find("*", [A1], , , xlByRows, xlPrevious).Row
Изменено: Hugo - 18 Мар 2018 15:35:57
 
Код
.UsedRange.Rows.Count + .UsedRange.Row - 1

В пользовательский диапазон попадают все строки, даже если значений нет, но форматирование строк было.

P.S. +- поменял местами. Было неправильно.
 
Ого, столько вариантов! Спасибо!
 
А может так:
Код
.UsedRange.Rows.Count + .UsedRange.Row-1
Изменено: Nordheim - 18 Мар 2018 16:52:09
"Все гениальное просто, а все простое гениально!!!"
 
О, спасибо, знаки перепутал. Исправляюсь...
 
Посмотрите результаты предложенных выше вариантов на приложенном примере ;)
Изменено: ZVI - 18 Мар 2018 17:26:58
Vladimir Zakharov
Microsoft MVP – Excel
 
Влад, так нечестно - с фильтром )
 
Цитата
Юрий М написал: так нечестно
Ну, Excel же может себя вести нечестно :)
Еще можно и без автофильтра вручную скрыть строки 7:9 данных.
А некоторые варианты ведь и без скрытия/фильтрации строк могут озадачить
Изменено: ZVI - 18 Мар 2018 17:38:13
Vladimir Zakharov
Microsoft MVP – Excel
 
Для большего изобличения в "нечестности" Excel нужно перед таблицей добавить несколько пустых неформатированных строк.В этом случае будет видна ошибка определения строки в тесте4

В работах использую три варианта:
- когда уверен, что первая строка всегда в диапазоне пользователя
Код
.UsedRange.Rows.Count 

- когда не уверен  или выше есть неформатированные пустые строки
Код
.UsedRange.Rows.Count + .UsedRange.Row - 1 

-  когда уверен, что фильтр на листе не применяется или после раскрытия всех строк:
Код
.Cells(.Rows.Count, 1).End(xlUp).Row

Часто пользователи по неумению (недосмотру) форматируют диапазоны строк, которые намного превышают количество строк с данными. В .UsedRange попадут все. Это тоже нужно учитывать.

Недавно такое: на листе применяется фильтр, пользователи любят "украшать" лишние строки (запретить нельзя):
.UsedRange, потом в цикле искал последнее значение (в данных могли быть пропуски) и удалял лишние строки.
 
Цитата
vikttur написал: будет видна ошибка определения строки в тесте4
Тесты 4 и 5 и так выдают 20 строк, а это вряд ли то, что хотелось (явные данные A1:B9 - 9 строк) - толкование результата зависит от намерений авторов кода, конечно.
Вообще, нужно признать, что Excel все делает правильно, но по своим, а не нашим правилам
Изменено: ZVI - 18 Мар 2018 18:04:31
Vladimir Zakharov
Microsoft MVP – Excel
 
Владимир, я не заметил этого подвоха в примере :)
Но описал этот случай в своем сообщении
 
Виктор, когда-то эти нюансы мы обсуждали в теме  Последняя ячейка при скрытых столбцах/строках
Изменено: ZVI - 18 Мар 2018 18:05:39
Vladimir Zakharov
Microsoft MVP – Excel
 
По указанной ссылке отобразил ошибочно скрытые ответы Димы.
Страницы: 1
Читают тему (гостей: 1)