Страницы: 1 2 След.
RSS
последняя ячейка при скрытых столбцах/строках
 
Подскажите, как можно узнать в VBA адрес последней ячейки в строке/столбце, если она скрыта. Стандартная команда    
Cells(Selection.Row, Cells(Selection.Row, 256).End(xlToLeft).Column).Select  
переходит к последней ВИДИМОЙ ячейке.
 
может определить видимую последнею,  
offset  +1 ячейку вниз  
определяем позицию курсора, -1 строка и есть последняя.
 
{quote}{login=Марчук}{date=04.02.2009 11:17}{thema=}{post}может определить видимую последнею,  
offset  +1 ячейку вниз  
определяем позицию курсора, -1 строка и есть последняя.{/post}{/quote}  
 
пробовал. почему-то по оффсет выбирает следующую строку, а не следующую видимую
 
может не так задаю?
 
lLastRow = Cells(1,1).SpecialCells(xlLastCell).Row 'Последняя строка  
lLastColumn = Cells(1,1).SpecialCells(xlLastCell).Column 'Последний столбец  
 
Не имеет значения скрыты ячеки или нет
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
{quote}{login=The_Prist}{date=04.02.2009 11:42}{thema=}{post}lLastRow = Cells(1,1).SpecialCells(xlLastCell).Row 'Последняя строка  
lLastColumn = Cells(1,1).SpecialCells(xlLastCell).Column 'Последний столбец  
 
Не имеет значения скрыты ячеки или нет{/post}{/quote}  
 
А вот и нет... всё равно выдает адрес последней видимой ячейки :(
 
Тада так  
iCountRow = ActiveSheet.UsedRange.Rows.Count  
iCountClm = ActiveSheet.UsedRange.Columns.Count
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
{quote}{login=The_Prist}{date=04.02.2009 12:15}{thema=}{post}Тада так  
iCountRow = ActiveSheet.UsedRange.Rows.Count  
iCountClm = ActiveSheet.UsedRange.Columns.Count{/post}{/quote}  
О, спасибо :)    
А привязать это к какой-нибудь конкретной строке/столбцу не получится? ну т.е. при разной наполняемости строк вычислить последнюю именно в данной строке?
 
{quote}{login=The_Prist}{date=04.02.2009 12:15}{thema=}{post}Тада так  
iCountRow = ActiveSheet.UsedRange.Rows.Count  
iCountClm = ActiveSheet.UsedRange.Columns.Count{/post}{/quote}  
 
определит максиальные размеры, не обязательно для заданной строки/столбца
 
{quote}{login=The_Prist}{date=04.02.2009 12:15}{thema=}{post}Тада так  
iCountRow = ActiveSheet.UsedRange.Rows.Count  
iCountClm = ActiveSheet.UsedRange.Columns.Count{/post}{/quote}  
Не всегда. Например, если взять пустой лист и записать, единичку в ячейку C4, то предложенная формула выдаст  iCountRow=1 и iCountClm=1, что неверно.  
 
В общем случае вопрос неполный, т.к. не дано определение "последней ячейки".  
А ведь это иожет быть:  
- ячейка с константой  
- с формулой, результат которой может быть и пустая строка ""  
- с комментарием, при этом больше ни с чем  
- пустая ячейка, но с форматом / границами  
- пустая, но с измененной шириной строки или высоты колонки  
А еще учитывть ли объединенные ячейки и те, над которыми размещены автофигуры или другие объекты и т.п.
 
Я так ищу:
 
{quote}{login=VikNik}{date=04.02.2009 01:01}{thema=}{post}Я так ищу:{/post}{/quote}  
если скрыть ячеку 12 , крайний знак  9 , 4
 
{quote}{login=VikNik}{date=04.02.2009 01:01}{thema=}{post}Я так ищу:{/post}{/quote}  
А так дает ошибку на скрытых строках и столбцах :-)  
Скройте 12-ю строку, например. Вопрос-то задавался изначально с учетом пустых  строк. Опять же, без определения того, что понимается под последней строкой сравнивать не имеет смысла.
 
Вопрос последней ячейки будет обсуждаться, наверное, бесконечно.  
"Воспользуемся формулой слэна"  
Но на VBA.  
см. пример
Bite my shiny metal ass!      
 
Засада :)
 
{quote}{login=Лузер™}{date=04.02.2009 01:12}{thema=}{post}Вопрос последней ячейки будет обсуждаться, наверное, бесконечно.  
"Воспользуемся формулой слэна"  
Но на VBA.  
см. пример{/post}{/quote}  
Добавьте где-нибудь значительно ниже или правее формулу, которая выдает пустую строку, например, =ЕСЛИ(1;"";0) или добавьте комментарий. И то, и другое не ищется таким методом.
 
Вот так находим номер последней строки в столбце А  
 
 
Sub Макрос1()  
Dim iLastRow As Long  
   On Error Resume Next  
   iLastRow = Columns("A").Find(What:="*", LookIn:=xlFormulas, SearchDirection:=xlPrevious).Row  
   If Err <> 0 Then  
       Err.Clear  
       MsgBox "Столбец А пуст!", 64, ""  
       Exit Sub  
   End If  
   MsgBox "Номер последней строки: " & iLastRow, 64, ""  
End Sub  
 
Последний столбец находится по аналогии (для столбца не тестировал)
 
Если ввести в ячейку ="" формула Слэна вываливается в Debug, а процедура уважаемого Pavel55 ее не видит...
 
{quote}{login=Pavel55}{date=04.02.2009 01:34}{thema=}{post}Вот так находим номер последней строки в столбце А  
 
 
Sub Макрос1()  
Dim iLastRow As Long  
   On Error Resume Next  
   iLastRow = Columns("A").Find(What:="*", LookIn:=xlFormulas, SearchDirection:=xlPrevious).Row  
   If Err <> 0 Then  
       Err.Clear  
       MsgBox "Столбец А пуст!", 64, ""  
       Exit Sub  
   End If  
   MsgBox "Номер последней строки: " & iLastRow, 64, ""  
End Sub  
 
Последний столбец находится по аналогии (для столбца не тестировал){/post}{/quote}  
Павел, если скрыть заполненные ячейки автофильтром, то Ваш вариант их не обнаружит
 
Осталось циклом перебрать все ячейки листа по адресам с проверкой на <>"".  
Или еще будут предложения?
 
{quote}{login=VikNik}{date=04.02.2009 02:00}{thema=}{post}Осталось циклом перебрать все ячейки листа по адресам с проверкой на <>"".  
Или еще будут предложения?{/post}{/quote}  
Циклом - это верное решение, но бегать можно не по всем ячекам, а в зависимости от того, ячейка/строка/столбец ли ищется.
 
В процессе обсуждения вы уже не раз удовлетворили мои скромные потребности по определению "последней ячейки" (для моих целей подходят почти все варианты).  
Но, как верно сказал Лузер,    
{quote}{login=Лузер™}{date=04.02.2009 01:12}{thema=}{post}Вопрос последней ячейки будет обсуждаться, наверное, бесконечно.  
{/post}{/quote}  
хотя читать обсуждение очень интересно. Для разных случаев лучше по-разному искать эту самую последнюю ячейку, и, в конце концов, чтобы никого не обидеть, можно сделать проверку всеми способами, и из полученных результатов выбрать наибольший [номер столбца/строки] :))
 
Прилагаю свою небольшую библиотечку функций определения последней ячейки/строки/столбца на заданном/активном листе или в строках/столбцах заданного/активного диапазона, поиск производится в константах/формулах/комментариях.  
 
Если не нужен поиск в комментариях, то вместо:  
SpecCells = Array(xlCellTypeConstants, xlCellTypeFormulas, xlCellTypeComments)  
нужно записать:  
SpecCells = Array(xlCellTypeConstants, xlCellTypeFormulas)  
 
Может кому-то/никому что-то/ничего/всё пригодится/не_пригодится :-)  
 
Не архивирую (57 КБайт), т.к. у некоторых есть проблемы со скачиванием архивов.
 
Хорошее завершение :)  
Предлагаю эту тему сделать аналогично теме vikttur с правилами форума и кидать ссылку на нее, если кто еще будет спрашивать про последние ячейки :)
 
Исправил опечатку в LastColInRow()  
Обновление прилагаю
 
Я так полагаю, что на каждом форуме есть своя тема, посвящённая поиску последней строки )  
 
Как-то давно сохранил ссылку на такую тему с форума SQL.RU  
 
http://www.sql.ru/forum/actualthread.aspx?tid=463148#4535898  
 
Как видите результат такой, что не существует реально надежного/универсального метода определения последней строки, у всех методов есть свои слабые стороны
 
Павел, ну я то как раз считаю, что реально надежные методы существуют.  
Проблема лишь может быть в том, что именно включать в представление о последней ячейке, строке, колонке для конкретной задачи. Например, при очистке последних пустых, но отформатированных строк/столбцов (задача уменьшения размера файлов), приходится учитывать многое из перечисленного мною в первом сообщении данной темы.
 
ZVI,  
а что получается за массив  
Dim SpecCells()  
SpecCells = Array(xlCellTypeConstants, xlCellTypeFormulas) ?  
 
это что, что-то типа    
Dim Dim SpecCells As Range  
Set SpecCells = Union(SpecialCells.xlCellTypeConstants, SpecialCells.xlCellTypeFormulas)?  
Но ведь тогда это не массив, а диапазон...  
Что-то я нигде не встречал такого использования Array
С уважением, Алексей (ИМХО: Excel-2003 - THE BEST!!!)
 
Суда по тому, что у ZVI вдруг появился аватар, он в сети... А на вопросы почему-то не отвечает :-(  
Ну, может, тогда кто-нибудь из других гуру Планеты мне ответит на вчерашний вопрос?
С уважением, Алексей (ИМХО: Excel-2003 - THE BEST!!!)
 
{quote}{login=Alex_ST}{date=22.07.2010 01:45}{thema=}{post}Суда по тому, что у ZVI вдруг появился аватар, он в сети...{/post}{/quote}Alex_ST, а как по-Вашему наличие аватара связано с присутствием в сети?
Страницы: 1 2 След.
Наверх