Поиск  Пользователи  Правила 
Закрыть
Логин:
Пароль:
Забыли свой пароль?
Регистрация
Войти
 
Страницы: 1
RSS
Как определить нижнюю границу неравномерной таблицы?
 
Всем здравствуйте!

У меня следующий вопрос, как определить диапазон таблицы на картинке? А точнее как определить нижнюю границу?
Имеются исходные данные что в B2 заголовок таблицы. Левую и правую границу можно определить циклом до первой пустой ячейки вправо и влево.
Как определить нижнюю границу таблицы? Что-то вроде CurrentRegion но он захватит и строчку над таблицей, а мне этого не надо.

Я пока вижу только один способ. Т.к. можно определить правую и левую границу таблицы (до первой пустой ячейки), идем циклом по строчкам в рамках этих границ и проверяем есть ли полностью пустая строка. Если есть, значит таблица закончилась строчку назад.
Можно ли без циклов? Каким-то другим способом?

Может как-то можно из [B2].CurrentRegion извлечь последнюю строчку? Может что-то ещё?
Спасибо!
 
Код
[B2].CurrentRegion.row + [B2].CurrentRegion.rows.count-1

но с такой таблицей это ненадёжно.
Но если гарантированно не будет пустых строк - тогда надёжно.
Изменено: Hugo - 18 Мар 2015 21:01:10
 
Hugo, Спасибо большое за ваш ответ! Как минимум заголовок будет в таблице точно!

По мотивам вашего ответа мне пришло в голову что ещё можно и вот так вот определить:
Код
row1 = [B2].CurrentRegion.Cells([B2].CurrentRegion.Cells.Count).Row


Значит через CurrentRegion буду определять.
 
Добрый вечер, еще вариант:
Код
ActiveSheet.UsedRange.SpecialCells(xlCellTypeLastCell).Address
' или
ActiveSheet.UsedRange.SpecialCells(xlCellTypeLastCell).Row
 
Vitallic, спасибо
Но такая конструкция у меня выдает ссылку на 8 строчку вместо шестой.
(диапазон.xlsm (15.88 КБ))
 
xlCellTypeLastCell покажет последнюю когда-то отформатированную или заполненную ячейку, что возможно уже давно забыто. Я этим никогда не пользуюсь.
Ну разве что применять на только что созданном и заполненном кодом листе - но если сам создал и заполнял, то уже и так знаешь сколько там строк.
 
Галина, как ни странно у меня на Вашем примере дает один и тот же результат и моя конструкция и Ваша (при этом результат верный):
22.jpg (56.95 КБ)
 
Vitallic,залейте цветом например A20, затем уберите заливку, и проверьте xlCellTypeLastCell.
И это ведь не пример Галины - это Ваш пример :)
У неё была картинка, и заметно другая.
 
Hugo, я не спорю про нюансы использования UsedRange есть такое дело,
просто предложил как вариант, все зависит от того что ТС делал до этого
с данными, есть вероятность что предложенный мною вариант в данном конкретном случае подойдет
 
У Галины ведь там на скрине под таблицей была одна пустая строка, далее написано "Другие данные" - т.е. в данном конкретном случае не подойдёт.
 
Цитата
Галина написал: Можно ли без циклов? Каким-то другим способом?
если у вас будет (на вашей картинке) какое-то значение в А7, тогда CurrentRegion захватит 8-ю строку.

И тогда только циклом проверять, попались ли в Intersect(CurrentRegion, столбцы заголовка) пустые строки (т.е. как вы предлагали, в границах столбцов заголовка таблицы). Пока больше ничего лучше в голову не приходит.
F1 творит чудеса
 
В таких случаях я всегда использую смарт-таблицу - и тогда вообще неважно, что там вокруг нее находится, диапазон всегда получим правильный)
 
Вариант: создать именованный динамический диапазон.
 
судя по всему, это выгрузка или какие-то старые/ручные таблицы, и чтобы создать именованный диапазон, нужно определить его заранее.
Создать умную таблицу из первой ячейки заголовка тоже не выйдет - по умолчанию выделится CurrentRegion...
F1 творит чудеса
 
Цитата
Максим Зеленский написал: нужно определить его заранее.
Согласен: задали, а потом в эту позицию загружаем данные))
 
Юрий М, а именованный динамический диапазон разве в данном случае получится создать?  там не подряд значения идут в строках а смещ и счетз опираются на непрерывные данные.
И ещё листы будут копироваться а к ним (к любому) применяться макрос.
 
Я предложил вариант - проверьте)
А какая необходимость размещать под таблицей ещё данные? Может их разнести в разные диапазоны столбцов? Тогда задача существенно упрощается.
 
При условии что таблица имеет заливку как в примере из сообщении №5 и других таблиц с такой заливкой нет
такой вариант:
Код
Sub Test14()
Application.FindFormat.Interior.Color = 14281213
MsgBox Cells.Find("", [aa100], , , , 2, , , True).Address
End Sub
если заливки нет то можна смотреть в сторону Border но при условии что таблиц опять таки нет.
[aa100] последняя ячейка от которой будем двигатся к последней нужной нам
пробовал вместо нее поставить что то типа (см. ниже) но ругается
Код
[c5].CurrentRegion.SpecialCells(xlCellTypeLastCell).Address(False, False)
Страницы: 1
Читают тему (гостей: 1)