Как написать код обработки диапазонов данных любых размеров в 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), что приведет к потере остальных данных. Существование пустой ячейки может привести к тому, что в ежедневном отчете будут отсутствовать тысячи строк данных, что подорвет доверие к отчету и к вам лично. Выполните дополнительную операцию, чтобы перейти к последней строке рабочего листа, что позволит резко уменьшить вероятность возникновения ошибок.


Top