Консультация № 97092
02.08.2007, 13:08
0.00 руб.
0 5 5
Пожалуйста, подскажите, как узнать количество заполненных строк и столбцов на листе Excel (некоторые строки или столбцы могут быть пустыми)? При нажатии Ctrl+End это сразу видно, а как это вычислить программно?

Обсуждение

Неизвестный
02.08.2007, 13:34
общий
это ответ
Здравствуйте, Mart Land!
Для этого можно воспользоваться свойством CurrentRegion.
Object.CurrentRegion, где Object - это объект Range.
Данное свойство возвращает текущую область диапазона Object.
Текущая область определяется каак область, окружающая текущую ячейку или диапазон ячеек, ограниченный пустыми строками сверху-снизу и пустыми столбцами слева-справа.
"Программирование на VBA 2002" Кузьменко В.Г.
А попроще - в примере.

Приложение:
Sub Module1()Dim a, bDim R_ange As ObjectSet R_ange = ActiveCell.CurrentRegion ‘Устанавливаем текущий регион ‘Вместо ActiveCell может быть Range с заполненной ячейкойa = R_ange.Rows.Count ‘Количество строкb = R_ange.Columns.Count ‘количество колонокEnd Sub
Неизвестный
02.08.2007, 14:37
общий
это ответ
Здравствуйте, Mart Land!

Если нужен аналог Ctrl+End, то используйте UsedRange - прямоугольная область, объединяющая все использованные ячееки на листе, например:

ActiveSheet.UsedRange.Rows.Count - количество использованных строк.
Неизвестный
02.08.2007, 15:49
общий
это ответ
Здравствуйте, Mart Land!
Попробуйте организовать цикл - пример в приложении.
Макрос читает все ячейки из колонки A и добавляет к переменной n еденицу в случая если ячейка не пуста.


Приложение:
dim i as integer, n as integerfor i=1 to 65536range("A" & i).selectif len(ActiveCell.FormulaR1C1) > 0 then n=n+1next i
Неизвестный
02.08.2007, 17:45
общий
это ответ
Здравствуйте, Mart Land!
Вот Ваш код:
Set ran = ActiveSheet.UsedRange
‘Посчитываем количество строк i и количество столбцов j в которых содержатся данные на листе
For i = 1 To ActiveSheet.UsedRange.Rows.Count
For j = 1 To ActiveSheet.UsedRange.Columns.Count
Next j
Next i
ActiveSheet.UsedRange.Select ‘И, если нужно, выделяем их
Selection.Copy ‘А потом, если надо, копируем выделенное
Удачи!
Неизвестный
02.08.2007, 19:41
общий
это ответ
Здравствуйте, Mart Land!
Можно также воспользоваться записью макросов.
Возьмите непустой лист, установите курсор на ячейку A1 и выберите меню [Сервис] - [Макрос] - [Начать Запись...].
Начнется запись действий пользователя в виде макроса.
Нажмите Ctrl-End, затем нажмите кнопку окончания записи макроса (в ввиде квадратика).
После этого в редакторе VBA посмотрите, что записалось. В частности у меня получилось:
Sub Макрос1()

‘ Макрос1 Макрос
‘ Макрос записан 02.08.2007 (Alec Perle)



ActiveCell.SpecialCells(xlLastCell).Select
End Sub
то есть

ActiveCell.SpecialCells(xlLastCell)

указывает как раз на необходимую Вам ячейку на активном листе.
PS. Таким способом можно узнать большое количество процедур, свойств и методов объектов Excel, особенно, как в Вашем случае, если есть необходимость реализовать в виде программы некоторые действия пользователя.
Форма ответа