Как написать код обработки диапазонов данных любых размеров в Excel 2010
Чтобы написать эффективный VBA-код, следует освоить несколько простых методик. Средство записи макросов строго определяет диапазон управляемых данных, например A1:L87601. Хотя такой код эффективно работает с текущим набором данных, он может быть неприменим к новым наборам данных. Поэтому целесообразно создать код, который может обрабатывать диапазоны данных различных размеров.
Для ссылки на ячейку средство записи макросов использует синтаксис Range("Н12")
. Однако есть более эффективный способ создания ссылки, к примеру, на ячейку в строке 12 столбца 8, заключающийся в применении синтаксиса Cells (12,8)
. Подобным образом средство записи макросов будет ссылаться на прямоугольный диапазон ячеек с помощью синтаксиса Range ("A1:L87601")
. Однако для большей гибкости следует применить метод Cells() для указания верхнего левого угла диапазона, а затем метод Resize() — для определения количества строк и столбцов в диапазоне. Этот способ используют некоторые разработчики при создании аркады на компьютер. Альтернативный синтаксис описания предыдущего диапазона имеет следующий вид: Cells(1,1).Resize(8760l/12)
. Этот способ обеспечивает большую гибкость, поскольку появляется возможность заменить любое число переменной.
В пользовательском интерфейсе Excel можно использовать клавишу End для перехода в конец диапазона данных. Если поместить курсор в итоговую строку рабочего листа и нажать End, то курсор перейдет к последней строке данных. В VBA эквивалентный код имеет следующий вид:
Range("А1048576").End(xlUp).Select
Вам не нужно выбирать саму ячейку — требуется лишь определить номер последней строки. Следующий код указывает строку и сохраняет ее номер в переменной FinalRow:
FinalRow = Range("А1048576").End(xlUp)-Row
В имени переменной FinalRow нет ничего магического. Этой переменной можно присвоить иное имя, например х, у или любое другое. Однако поскольку в VBA лучше использовать описательные названия переменных, то для описания итоговой строки рекомендуются такие имена, как FinalRow.
Программа Excel 2010 поддерживает использование 1 048 576 строк и 16 384 столбцов на листе. Файлы, сохраненные в режиме совместимости Excel 2003, поддерживают 65 536 строк и 256 столбцов. Чтобы рабочую книгу можно было открывать как в Excel 2003, так и в Excel 2010, предыдущий код можно изменить следующим образом:
FinalRow = Cells(Application.Rows.Count,1).End(xlUp).Row
Можно также определить последний столбец в наборе данных. Если вы точно уверены, что набор данных начинается со строки 1, то можете использовать клавишу End в комбинации с клавишей ←, чтобы перейти от ячейки XFD1 к последнему столбцу таблицы, в котором содержатся данные. Чтобы обеспечить выполнение кода в устаревших версиях Excel, можно использовать следующий код:
FinalCol = Cellstl, _ Application.Columns.Count).End(xlToLeft).Column
Использование комбинаций клавиш END+↓ и END+↑
Многие полагают, что для определения последней строки диапазона, начинающегося в ячейке А1, следует нажать комбинацию клавиш End+A. Не стоит рассчитывать на такой метод, поскольку данные, передаваемые из другой системы, могут оказаться неполными. Если программа последние пять лет импортирует 500 000 строк из устаревшей компьютерной системы, в один прекрасный момент в наборе данных может появиться нулевое значение. Это приведет к образованию пустой ячейки или даже строки в середине набора данных. Именно в этой ячейке перестанет выполняться выражение Range("А1").End(xlDown)
, что приведет к потере остальных данных. Существование пустой ячейки может привести к тому, что в ежедневном отчете будут отсутствовать тысячи строк данных, что подорвет доверие к отчету и к вам лично. Выполните дополнительную операцию, чтобы перейти к последней строке рабочего листа, что позволит резко уменьшить вероятность возникновения ошибок.