Перейти к содержимому
Наше приложение «Дешевые авиабилеты» в AppGallery >>

VBA Excel. Переменная диапазона ячеек (As Range)

    Присвоение диапазона ячеек объектной переменной в VBA Excel. Адресация ячеек в переменной диапазона и работа с ними. Определение размера диапазона. Примеры.

    Присвоение диапазона ячеек переменной

    Чтобы переменной присвоить диапазон ячеек, она должна быть объявлена как Variant, Object или Range:

    Чтобы было понятнее, для чего переменная создана, объявляйте ее как Range.

    Присваивается переменной диапазон ячеек с помощью оператора Set:

    В выражении Range(Cells(3, 4), Cells(26, 18)) вместо чисел можно использовать переменные.

    Для присвоения диапазона ячеек переменной можно использовать встроенное диалоговое окно Application.InputBox, которое позволяет выбрать диапазон на рабочем листе для дальнейшей работы с ним.

    Адресация ячеек в диапазоне

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

    Индексация ячеек в присвоенном диапазоне осуществляется слева направо и сверху вниз, например, для диапазона размерностью 5х5:

    1 2 3 4 5
    6 7 8 9 10
    11 12 13 14 15
    16 17 18 19 20
    21 22 23 24 25

    Индексация строк и столбцов начинается с левой верхней ячейки. В диапазоне этого примера содержится 5 строк и 5 столбцов. На пересечении 2 строки и 4 столбца находится ячейка с индексом 9. Обратиться к ней можно так:

    Обращаться в переменной диапазона можно не только к отдельным ячейкам, но и к части диапазона (поддиапазону), присвоенного переменной, например,

    обращение к первой строке присвоенного диапазона размерностью 5х5:

    и обращение к первому столбцу присвоенного диапазона размерностью 5х5:

    Работа с диапазоном в переменной

    Работать с диапазоном в переменной можно точно также, как и с диапазоном на рабочем листе. Все свойства и методы объекта Range действительны и для диапазона, присвоенного переменной. При обращении к ячейке без указания свойства по умолчанию возвращается ее значение. Строки

    равнозначны. В обоих случаях информационное сообщение MsgBox выведет значение ячейки с индексом 6.

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

    Преимущество работы с диапазоном ячеек в объектной переменной заключается в том, что все изменения, внесенные в переменной, применяются к диапазону (который присвоен переменной) на рабочем листе.

    Пример 1 — работа со значениями

    Скопируйте процедуру в программный модуль и запустите ее выполнение.

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

    Пример 2 — работа с форматами

    Продолжаем работу с тем же диапазоном рабочего листа «C6:E8»:

    Опять же, обратите внимание, что все изменения форматов в присвоенном диапазоне отобразились на рабочем листе, несмотря на то, что мы непосредственно с ячейками рабочего листа не работали.

    Пример 3 — копирование и вставка диапазона из переменной

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

    Скопировать и вставить диапазон полностью со значениями и форматами можно при помощи метода Copy, указав место вставки (ячейку) на рабочем листе.

    В примере используется тот же диапазон, что и в первых двух, так как он уже заполнен значениями и форматами.

    Информационное окно MsgBox добавлено, чтобы вы могли увидеть работу процедуры поэтапно, если решите проверить ее в своей книге Excel.

    Размер диапазона в переменной

    При получении диапазона с помощью метода Application.InputBox и присвоении его переменной диапазона, бывает полезно узнать его размерность. Это можно сделать следующим образом:

    Запустите процедуру, выберите на рабочем листе Excel любой диапазон и нажмите кнопку «OK». Информационное сообщение выведет количество строк и столбцов в диапазоне, присвоенном переменной myRange.

    Содержание рубрики VBA Excel по тематическим разделам со ссылками на все статьи.

    113 комментариев для “VBA Excel. Переменная диапазона ячеек (As Range)”

    1. Добрый день, Евгений!
      Подскажите пожалуйста, как можно добавить один день к датам во всех заполненных ячейках столбца С? Столбец называется Next revision. Заранее спасибо!

      1. Евгений

        Здравствуйте, Данила!
        Для дат, хранящихся в формате даты:

        Даты, записанные в текстовом формате, тоже будут увеличены на один день, но формат отображения может стать другим, что позволит отследить неправильные форматы. У меня текст 17.01.2022 был преобразован в 1/18/2022.

    2. Sheets("Лист1").Range("A1:S2"). Copy Sheets("Лист2").Range("D3")
      Эта команда копирует "A1:S2" на первом листе и вставляет в ячейку D3 на втором листе

      диапазону (A1:S2) присвоил имя "Header"
      Как получить такой же результат используя "Header" ?

      Range("D3:V4").Select
      Selection = Range("Header")

      такое решение машине не нравится

        1. похоже что не совсем понятно изложил своё «Хочу»
          Я специально ввел имя чтобы обращаться непосредственно к диапазону
          я не хочу каждый раз прописывать
          Sheets("Лист1") и Copy

          попробую объяснить еще раз
          L2= "Новый год" и ей присвоено имя "Fdo"
          Если на любом листе набрать
          Range("h2") = [Fdo]
          тогда в ячейке Н2 будет запись "Новый год"
          при этом я нигде не указываю
          Sheets("Лист1").[Fdo].Copy ...

          Такой же результат хочу получить не с одной ячейкой, а с диапазоном

          1. Евгений

            Тогда так:

            1. именно так я и хотел
              Спасибо.
              С наступившим 2023-им !

    3. Добрый день!
      Возможно не совсем по теме, но близко. Мне нужно создать несколько десятков именованных диапазонов, у меня в столбце А имя диапазона, в столбце В прописана область в таком виде: ='Мзал'!$B$3:ИНДЕКС('Мзал'!$E$5:$E$60;МИН(ЕСЛИ(ЕОШИБКА('Мзал'!$E$5:$E$60);СТРОКА('Мзал'!$E$5:$E$60)-СТРОКА('Мзал'!$E$4)))-1). То есть начало диапазона задано однозначно, а конец в зависимости от значения (не ошибка). Можно ли каким то образом загрузить эту таблицу через макрос всю и сразу, а не через «Задать имя» по одному? Спасибо

    Обсуждение закрыто.