Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 25.08.2009, 06:05   #1
SAS888
Старожил
 
Аватар для SAS888
 
Регистрация: 05.12.2007
Сообщений: 4,180
По умолчанию Упростить

Пусть есть таблица Excel. И пусть требуется определить последнюю заполненную строку в столбце "A". Но... в этом листе есть скрытые строки. Сразу нужно оговорить, что UsedRange не подойдет из-за того, что ячейки таблицы содержат прорисованные границы. Так что пустая ячейка входит в UsedRange.
Сейчас я просматриваю все используемые строки, запоминаю номера скрытых строк, затем делаю видимыми все строки листа, определяю Cells(Rows.Count, 1).End(xlUp).Row, затем снова скрываю те строки, которые должны быть скрыты.
Все работает, но какой-то уж "огород" получается. Возможно ли как-то упростить эти действия?
Чем шире угол зрения, тем он тупее.
SAS888 вне форума Ответить с цитированием
Старый 25.08.2009, 09:33   #2
mchip
Форумчанин
 
Регистрация: 24.06.2008
Сообщений: 516
По умолчанию

А если использовать функцию промежуточные итоги?
Она может считать как со скрытыми значениями так и без..
Можно сделать все! Было бы время, да деньги...
mchip вне форума Ответить с цитированием
Старый 25.08.2009, 09:51   #3
Aent
Форумчанин
 
Аватар для Aent
 
Регистрация: 17.07.2009
Сообщений: 519
По умолчанию

SAS888, а как вам вариант посчитать массивную формулу ?
Код:
={МАКС(ЕСЛИ(ЕПУСТО(A1:A65536);0;СТРОКА(A1:A65536)))}
Aent вне форума Ответить с цитированием
Старый 25.08.2009, 10:21   #4
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

Не так уж и много кода в варианте с отображением и последующим скрытием строк...
Код:
Sub test()
    Dim ra As Range, ra2 As Range: Set ra = [a:a]
    Set ra2 = ra.SpecialCells(xlCellTypeVisible): ra.EntireRow.Hidden = False
    Debug.Print "Последняя ячейка: " & ra(ra.Cells.Count).End(xlUp).Address
    ra.EntireRow.Hidden = True: ra2.EntireRow.Hidden = False
End Sub
Можно и так попробовать:
Код:
Sub test2()
    Dim ra As Range: Set ra = [a:a]
    Debug.Print "Последняя ячейка: " & ra.SpecialCells(2)(ra.SpecialCells(2).Cells.Count).Address
    ' SpecialCells(2) = SpecialCells (xlCellTypeConstants)
End Sub
EducatedFool вне форума Ответить с цитированием
Старый 25.08.2009, 12:07   #5
SAS888
Старожил
 
Аватар для SAS888
 
Регистрация: 05.12.2007
Сообщений: 4,180
По умолчанию

mcip, Aent
Через формулы Application.WorksheetFunction, конечно, чуть быстрее (т.к. это реализуется на "C"), чем организовывать цикл в VB, но это все равно цикл, который использовать не хочется.
EducatedFool
Подобным образом я сейчас и решаю данную задачу. Но хотелось уточнить (узнать), нет ли метода, подобного End, который бы не зависел от "видимости" строк?
Чем шире угол зрения, тем он тупее.
SAS888 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Можно упростить этот макрос? valerij Microsoft Office Excel 84 14.09.2014 16:17
Упростить вырожение KinderX Microsoft Office Excel 5 30.06.2009 18:30
помогите упростить простой макрос frantic150 Microsoft Office Excel 2 23.06.2009 04:55
Помогите упростить код Ralf_ru Помощь студентам 7 01.04.2009 17:17
Упростить формулу Stif-rva Microsoft Office Excel 7 09.03.2009 11:03