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

VBA Excel. Копирование данных с одного листа на другой

    Решение задачи по копированию данных с одного листа на другой без использования и с использованием массивов. Вызов из кода VBA Excel других процедур.

    Условие задачи по копированию данных

    На одном листе расположен список повторяющихся городов с информацией о предприятиях общепита:

    Исходная таблица задания №1

    Исходная таблица задания №1

    Необходимо данные по каждому городу перенести в одну строку на другом листе (таблица обрезана справа):

    Часть результирующего списка задания №1

    Часть результирующего списка задания №1

    Решение копированием с листа на лист

    Это решение значительно проще, чем с использованием массивов, но более медленное. При больших объемах информации обработка может длиться достаточно долго. Решение достигается путем присваивания значений ячеек из таблицы первого листа ячейкам второго листа.

    Переменные:

    • n1 – количество строк в исходной таблице;
    • n2 – номер столбца текущей ячейки исходной таблицы, к которой обращается цикл;
    • n3 – номер строки текущей ячейки на втором листе;
    • n4 – номер столбца текущей ячейки на втором листе;
    • i1 – счетчик цикла For… Next;
    • gorod – переменная с наименованием города, предназначенная для контроля за сменой текущего города, который обрабатывается циклом.

    Решение с использованием массивов

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

    Подпрограммы Kopirovanie и Vstavka используются в цикле For... Next процедуры Resheniye2 по два раза, поэтому их коды вынесены за пределы процедуры Resheniye2 и вызываются по мере необходимости.

    Переменные:

    • massiv1 – его элементам присваиваются значения ячеек исходной таблицы;
    • massiv2 – одномерный массив, заполняемый данными из переменной txt1;
    • massiv3 – двумерный массив, заполняемый данными из одномерного массива massiv2 и используемый для вставки очередной строки на второй лист;
    • txt1 – сюда копируются через разделитель значения элементов массива massiv1, предназначенные для заполнения очередной строки на втором листе;
    • n1 – количество строк в исходной таблице;
    • n2 – количество столбцов в исходной таблице;
    • n3 – номер текущей строки на втором листе;
    • n4 – количество столбцов текущей строки на втором листе (соответствует количеству элементов массива massiv2);
    • i1, i2, i3 – счетчики цикла For… Next;
    • gorod – переменная с наименованием города, предназначенная для контроля за сменой текущего города, который обрабатывается циклом.

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


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

    6 комментариев для “VBA Excel. Копирование данных с одного листа на другой”

    1. Классно! Авторам — уважение! Толково, без соплей, со знанием дела.
      Можете подсказать синтаксис такой проблемы: таблица 10 строк, 8 столбцов, если первая ячейка не пустая, скопировать на другой лист этой книги, а лучше — в отдельную книгу всю строку таблицы. Потом то же самое со строкой ниже, и так до последней. Потом пустые строки надо скрыть.
      Это сложно?
      Заранее спасибо за ответ.

      1. Привет, Илья!
        Для диапазона A1:H10:

        1. Здравствуйте, Евгений! Огромное Вам спасибо! Потраченное время и желание помочь дорогого стОит, это большая редкость в наше время, поверьте. Ваш макрос — не совсем то, что мне нужно (например, новую книгу открывать не нужно, она уже есть, нужно просто на неё (и нужный лист) сослаться). Месторасположение ячеек в книгах не совпадает, строки тоже (27-я строка первой книги вставляется в 6-ю второй, т.е., например D27 в E6). И самое главное — вторая книга заполняется с нарастающим итогом. Т.е с первой книги берутся данные, вносятся во вторую, потом первая заполняется по новой, эти данные вносятся во вторую, но уже ниже и т.д.
          Но, в любом случае, огромное спасибо, Вы дали направление, куда двигаться, буду думать ):

    2. Добрый день, Евгений!
      Существует способ автоматической передачи (копирования) данных из одного файла эксель в другой методом =…
      А метод автоматической передачи (копирования) цвета имеется?
      Подскажите пожалуйста!

    3. Спасибо за код и описание действий, очень помогло, делал по аналогии для своего проекта!!!

    Добавить комментарий

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