Страницы: 1
RSS
VBA. Количество заполненых строк на листе
 
Подскажите ф-цию для того чтою узнать побыренькому(не переберая все строки), в скольких строках на листе есть информация.    
 
Или (И) функцию, возвращающюю неомер последней строки содержащей информацию.  
 
Спасибо.
 
Есть много вариантов, но ни один из них не является абсолютно точным. Я обычно использую такой вариант  
 
Sub Макрос1()  
Dim iLastRow As Long  
   iLastRow = Cells(Rows.Count, 1).End(xlUp).Row  
   MsgBox "Последний ряд таблицы в столбец А: " & iLastRow, , ""  
End Sub
 
Для общего развития можешь почитать эту тему.    
 
http://www.sql.ru/forum/actualthread.aspx?tid=463148#4535898  
 
Там участник с ником KL(XL) объясняет, недостатки всех приёмов нахождения последней заполненной (или пустой) строки на листе Excel.  
 
P.S. KL(XL) является "Microsoft MVP" по Excel (т.е. признанный компанией Microsoft профессионал по Excel)
 
{quote}{login=Человек}{date=09.07.2008 11:26}{thema=VBA. Количество заполненых строк на листе}{post}Подскажите ф-цию для того чтою узнать побыренькому(не переберая все строки), в скольких строках на листе есть информация.    
Или (И) функцию, возвращающюю неомер последней строки содержащей информацию.  
Спасибо.{/post}{/quote}  
---  
В Вашем вопросе фигурирует коварное слово "информация". Информацией ячеек могут быть:  значения, формулы, формат, шрифт, цвет, размеры, объединения, и проч., включая сочетания свойств.  
Наберите в VBA Range("A1") и поставьте точку - всплывет длинный список свойств и методов ячейки. Все свойства - это элементы информации.  
 
Если же Вас интересуют только ячейки со значениями и формулами, то:  
 
Последняя строка:  
LastRow = ActiveSheet.Cells.Find(What:="*", _  
SearchDirection:=xlPrevious, _  
SearchOrder:=xlByRows).Row  
 
Последняя колонка:  
LastCol = ActiveSheet.Cells.Find(What:="*", _  
SearchDirection:=xlPrevious, _  
SearchOrder:=xlByColumns).Column  
 
Последняя ячейка - в пересечении:  
Set LastCell = ActiveSheet.Cells(LastRow, LastCol)  
---  
ZVI
 
{quote}{login=Pavel55}{date=09.07.2008 11:49}{thema=}{post}Для общего развития можешь почитать эту тему...{/post}{/quote}  
я бы добавил :)(несмотря на признанность)  
 
метод end(xldown) лучше не применять вообще, так как он дает ошибку гораздо чаще, чем метод cells(rows.count,n).end(xlup)(догадайтесь какую)  
 
но и последний надо применять с осторожностью, а именно  
 
для пессимистов - проверить, пуста ли ячейка cells(rows.count,n)  
 
для всех остальных - проверить не пуста ли ячейка cells(rows.count,n).end(xlup) перед тем, как применять к ней offset(1,0)  
 
 
да, мы что-то сразу на VBA перешли, а человек просил "функцию"  
 
так вот:  
 
=макс(если(диапазон<>"";строка(диапазон);1) даст последнюю строку вашего "диапазона". (словие можно менять под различные надобности)
 
не знаю почему, но я тут не нашол примера который приводится в справке майкрософта:  
 
ThisWorkbook.Worksheets("имя листа").Activate  
ActiveSheet.Cells.SpecialCells(xlCellTypeLastCell).Activate  
k = ActiveCell.Row 'номер последней заполненной строки  
 
мне этот способ очень понравился, прошу спецов дать коменты по его целесообразности - или я о чем то не о том?:)
 
:-) "не нашол" - круто!  
Вопрос - "Количество заполненных строк на листе"  
См. Файл. Заполнена всего одна ячейка.
Я сам - дурнее всякого примера! ...
 
Гы-гы - прикольненько, но почему же вы не объяснили природу этого дивного явления? почему ексель думает что в 31й строке тоже есть данные? Раз формул нет то наверное вы в этой ячейке поменяли цвет заливки или границу? Если да то флаг пользователю в ж - есть хорошая поговорка: "Почему солнце всходит и заходит? - Работает? - Да - Вот и не трогайте настройки что б не сломалось!":) - в нашем случае не красьте облака, или там не меняйте вес луны, что бы солнце не поменяло орбиту:)  
 
Буду очень признателен если мне и другим ученикам раскроете тайну даного некорректного поведения екселя.  
 
Заранее спасибо.
 
божитымой :))  
ну где ж пытливость ума и жажда эксперимента?  
что за философия существования - жить на всём готовом, разжёванном и положенном в рот?  
ай, беда-беда-огорчение...  
 
впрочем, хватит патетики :)))  
 
идите хоть на 178-ю строчку, закрасьте ячейку в любой цвет. а потом для этой же ячейки выберите "нет заливки".  
и опять запустите макрос. ;)
фрилансер Excel, VBA - контакты в профиле
"Совершенствоваться не обязательно. Выживание — дело добровольное." Э.Деминг
Страницы: 1
Читают тему
Наверх