Найти в Дзене
VBA Excel с нуля

VBA Excel № 103. Работа с диапазонами. Копирование и перемещение диапазона.

Оглавление
Скриншот с моего ноутбука
Скриншот с моего ноутбука

Примеры, представленные в этой и последующих статьях, нацелены на более детальное объяснение методов управления диапазонами в таблицах Excel при использовании языка программирования VBA.

В данном контексте будем рассматривать следующие темы: методы копирования областей, определение типа данных диапазона, создание запросов для ввода данных в ячейку, выявление первой пустой ячейки в столбце, остановка выполнения макроса для возможности выбора пользователем диапазона, подсчет ячеек в пределах диапазона, циклический обход ячеек в диапазоне и различные другие манипуляции, выполняемые с диапазонами.

Копирование (дублирование) диапазона

Инструмент записи макросов в Excel применяется не только для формирования эффективного кода, но и для обнаружения соответствий необходимых объектов, методов и свойств. Код, полученный в результате записи макроса, не всегда является идеальным, однако он обычно предоставляет ценную информацию.

Например, при записи простой операции копирования из ("A1") и вставки в ("B1") можно получить пять строк кода на языке VBA.

Коротко: выделяем ячейку, копируем ячейку, выделяем ячейку куда надо скопировать, вставляем скопированное, отменяем выделение. Скриншот с моего ноутбука.
Коротко: выделяем ячейку, копируем ячейку, выделяем ячейку куда надо скопировать, вставляем скопированное, отменяем выделение. Скриншот с моего ноутбука.

Как видно, программа выделяет ячейку A1, копирует ее, затем выделяет ячейку B1 и выполняет операцию вставки. Тем не менее, в VBA необязательно выделять объект для работы с ним. Более краткую версию вышеуказанной процедуры можно получить, заменив эти строки на более лаконичный метод Copy (копировать), который использует аргумент, представляющий адрес места вставки копируемого диапазона (процедура называется ДиапазонКопирования).

Скриншот с моего ноутбука
Скриншот с моего ноутбука
В обоих случаях предполагается, что активен рабочий лист, и операция выполняется на активном листе.

Для выполнения копирования диапазона на другой рабочий лист или в другую книгу, требуется определить ссылки на соответствующие места. В следующем примере (процедура называется ДиапазонКопирования2) производится копирование диапазона с листа "Лист1" в книге "Файл1.xlsx" на лист "Лист1" в книге "Файл2.xlsx". Благодаря корректным ссылкам данный пример функционирует независимо от активной рабочей книги.

Скриншот с моего ноутбука
Скриншот с моего ноутбука

Другим способом решения задачи является использование объектных переменных (более подробнее про объектные переменные в статье № 68) для представления диапазонов, как показано в следующем коде. (процедура называется ДиапазонКопирования3)

Скриншот с моего ноутбука
Скриншот с моего ноутбука

Конечно же вам уважаемые читатели очевидно, что операция копирования может и не ограничивается одной ячейкой. Например, следующая процедура (ДиапазонКопирования4) копирует диапазон из 12 ячеек.

Скриншот с моего ноутбука
Скриншот с моего ноутбука
Хочу напомнить, что адрес места вставки определяется единственной ячейкой, представляющей левый верхний угол вставляемого диапазона.

Перемещение (перенос) диапазона

Инструкции VBA для перемещения диапазона ячеек аналогичны инструкциям по копированию диапазона, однако отличаются использованием метода Cut (вырезать) вместо метода Copy (копировать). Опять же хочу отметить, что при указании целевого диапазона для вставки необходимо указывать только адрес левой верхней ячейки.

Следующий пример иллюстрирует операцию перемещения 12 ячеек (из диапазона A1:C4) на новое место, начиная с ячейки D1 (на том же листе).

Скриншот с моего ноутбука
Скриншот с моего ноутбука

Этот код осуществляет вырезание выбранного диапазона и вставку его, начиная с указанной ячейки D1.