Получение числа заполненных ячеек в столбце (VBA)
Я только начинаю с "программирования" VBA на Excel, чтобы автоматизировать некоторые ругательные материалы... так что это будет звучать как полный нубийский вопрос, хотя я не очень хорошо знаком с объектами VBA и т.д.
Итак, мое задание:
Есть ли более элегантный способ узнать длину столбца? Моя первая колонка - это индекс с монотонно увеличивающимися числами, который заканчивается в не прогнозируемой точке.
Теперь я хочу узнать, сколько записей в этой колонке. Есть ли лучший способ, чем повторять это и следить за пустой ячейкой?
Greetz,
Poeschlorn
Ответы
Ответ 1
Один из способов: (Предположим, что индексный столбец начинается с A1)
MsgBox Range("A1").End(xlDown).Row
Что ищет 1-я незанятая ячейка вниз от A1 и показывает вам порядковый номер строки.
Вы можете выбрать следующую пустую ячейку с помощью:
Range("A1").End(xlDown).Offset(1, 0).Select
Если вам нужен конец набора данных (включая пробелы), попробуйте: Range ( "A: A" ). SpecialCells (xlLastCell).Row
Ответ 2
Если вы хотите найти последнюю заполненную ячейку в определенном столбце, лучший способ:
Range("A" & Rows.Count).End(xlUp).Row
В этом коде используется самая последняя ячейка во всем столбце (65536 для Excel 2003, 1048576 в более поздних версиях), а затем найдите первую заполненную ячейку над ней. Это позволяет игнорировать "перерывы" в ваших данных и найти истинную последнюю строку.
Ответ 3
Вы также можете использовать
Cells.CurrentRegion
чтобы дать вам диапазон, представляющий границы ваших данных на текущем активном листе
Msdn говорит по теме
Возвращает объект Range, который представляет текущий регион. Текущий регион - диапазон, ограниченный любой комбинацией пустых строк и пустых столбцов. Только для чтения.
Затем вы можете определить количество столбцов с помощью
Cells.CurrentRegion.Columns.Count
и количество строк через
Cells.CurrentRegion.Rows.Count
Ответ 4
Вы также можете использовать:
UsedRange.Rows.Count
Ответ 5
Чтобы найти последний заполненный столбец, используйте следующее:
lastColumn = ActiveSheet.Cells(1, Columns.Count).End(xlToLeft).Column