Excel макрос для заполнения ячеек на другом листе

С этим макросом данные копируются на другой лист, но при этом стирается 1 строка названием столбцов, и следующая вставка ячеек происходит со второй строки, надо чтобы данные вносились после последней заполненной строки, при этом оставался заголов 1 строки с названиями столбцов
[moder]
Не надо цитировать посты целиком, это нарушение Правил форума.[/moder]

С этим макросом данные копируются на другой лист, но при этом стирается 1 строка названием столбцов, и следующая вставка ячеек происходит со второй строки, надо чтобы данные вносились после последней заполненной строки, при этом оставался заголов 1 строки с названиями столбцов
[moder]
Не надо цитировать посты целиком, это нарушение Правил форума.[/moder] Controler

Сообщение цитата удалена

С этим макросом данные копируются на другой лист, но при этом стирается 1 строка названием столбцов, и следующая вставка ячеек происходит со второй строки, надо чтобы данные вносились после последней заполненной строки, при этом оставался заголов 1 строки с названиями столбцов
[moder]
Не надо цитировать посты целиком, это нарушение Правил форума.[/moder] Автор — Controler
Дата добавления — 14.03.2016 в 08:56

Источник

5 различных методов переноса данных с одного листа Excel на другой

Как мы все знаем, Microsoft Excel – очень полезная и популярная рабочая книга, которую пользователи могут хранить любые важные данные.

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

Но сегодня в этом моем сообщении блога я расскажу о , как автоматически копировать данные из одной ячейки в другую в Excel ? Кроме того, узнайте , как автоматически обновлять один лист Excel с другого листа, автоматически переносить данные с одного листа Excel на другой, и многое другое подробно.

Итак, просто внимательно просмотрите этот блог.

Практический сценарий

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

У меня есть рабочая тетрадь с 6 листами внутри; один из листов – мастер; это просто остальные 6 листов, составленные в один большой. Мне нужно настроить его так, чтобы любые новые данные, введенные в новые отдельные листы, автоматически вводились в мастер-лист в первой пустой строке.

Столбцы не одинаковы на всех листах. . Надеюсь, здесь профи будет легче, чем мне, в этом я бился головой о стену. Я буду тщательно проверять эту ветку, поэтому, если вам понадобится дополнительная информация, просто дайте мне знать …

Заранее благодарим за любую помощь.

Источник: https://ccm.net/forum/affich-1019001-automatically-update-master-worksheet-from- другие рабочие листы

Методы передачи данных из одной книги Excel в другую

Существует множество различных способов переноса данных из одной книги Excel в другую , и они следующие:

Метод № 1: автоматически Обновление одного листа Excel с другого листа

В книге MS Excel мы можем легко обновить данные, связав один лист с другим. Эта ссылка известна как динамическая формула, которая автоматически передает данные из одной книги Excel в другую .

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

Ниже приведены две разные точки для связывания Excel. данные книги для автоматических обновлений.

1) С использованием функции копирования и вставки

  • В исходный лист, выберите и скопируйте данные, которые вы хотите связать на другом листе.
  • Теперь на целевом листе Вставьте данные, к которым вы связали исходный лист ячейки.
  • После этого выберите меню Вставить ссылку из Другие параметры вставки в книге Excel

  • Сохраните всю свою работу из исходного рабочего листа перед его закрытием.

2) Введите формулу вручную

  • Откройте целевой рабочий лист, коснитесь ячейки, в которой есть формула связи, и поместите знак равенства (=) поперек нее.
  • Теперь перейдите к источник ш eet и коснитесь ячейки, в которой есть данные. нажмите Enter на клавиатуре и сохраните свои задачи.

Примечание- Всегда помните одну вещь, что формат исходного рабочего листа и конечный рабочий лист одинаковы.

Метод № 2: обновить электронную таблицу Excel данными из другой электронной таблицы

Чтобы обновить электронные таблицы Excel данными из другой электронной таблицы, просто следуйте приведенным ниже пунктам, которые будут применимы к версии Excel 2019, 2016, 2013, 2010, 2007.

  • Сначала перейдите в меню Данные .
  • Выберите параметр Обновить все

  • Здесь вы должны увидеть, когда и как обновляется соединение
  • Теперь щелкните любую ячейку, содержащую подключенные данные.
  • Снова в меню Данные , cli ck на стрелке рядом с параметром Обновить все и выберите Свойства соединения

  • После этого в меню Использование установите параметры которые вы хотите изменить.
  • На вкладке Использование установите любые параметры, которые вы хотите изменить.

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

Метод № 3: Как автоматически скопировать данные из одной ячейки в другую в Excel

Чтобы скопировать данные из одной ячейки в другую в Excel, просто выполните следующие пункты, указанные ниже:

  • Сначала откройте исходный рабочий лист и целевой рабочий лист.
  • На исходном листе перейдите к листу, который вы хотите переместить или скопировать.
  • Теперь нажмите меню Главная и выберите параметр Формат .
  • Затем выберите «Переместить или скопировать лист» в разделе «Организовать листы».
  • После этого снова в в меню Главная выберите параметр Формат в группе ячеек.
  • Здесь в Переместить или скопировать выберите целевой лист, и Excel отобразит только открытые листы в списке.

  • Иначе, если вы хотите скопировать рабочий лист вместо перемещения, сделайте копию книги Excel перед

  • Наконец, нажмите ОК кнопку, чтобы скопировать или переместить целевую электронную таблицу Excel.

Метод № 4: Как скопировать данные с одного листа на другой в Excel с помощью формулы

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

  • Для копирования и вставки ячейки Excel в текущий рабочий лист Excel, , например; скопируйте ячейку От A1 до D5, вы можете просто выбрать целевую ячейку D5, затем ввести = A1 и нажать клавишу Enter, чтобы получить значение A1.
  • Для копирования и вставки ячеек с одного рабочего листа на другой, например скопируйте ячейку A1 листа Sheet1 в ячейку D5 листа Sheet2, выберите ячейку D5 на листе Sheet2, затем введите = Sheet1! A1 и нажмите клавишу Enter, чтобы получить значение.

Метод № 5: копирование данных с одного листа на другой в Excel с помощью макросов

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

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

Sub OpenWorkbook ()
‘Открыть книгу
‘Метод открытия требует ссылки на полный путь к файлу.
Workbooks.Open «C: Users username Documents New Data.xlsx»

‘ Метод открытия имеет дополнительные параметры
‘Workbooks.Open (FileName, UpdateLinks, ReadOnly, Format, Password, WriteResPassword, IgnoreReadOnlyRecommended, Origin, Delimiter, Editable, Notify, Converter, AddToMru, Local, CorruptLoad)

Sub CloseWorkbook ()
‘Закройте книгу
Workbooks («New Data.xlsx»). Close SaveChanges: = True
‘Метод Close имеет дополнительные параметры
‘ Workbooks.Close (SaveChanges, Filename, RouteWorkbook)

Рекомендуемое решение: средство восстановления и восстановления MS Excel

Когда вы выполняете свою работу в MS Excel и по ошибке или случайно делаете это не сохранять данные книги, иначе ваш рабочий лист будет удален, тогда у нас есть для вас профессиональный инструмент восстановления, например MS Excel Repair & Recovery Tool .

С С помощью этого инструмента вы также можете легко восстановить все потерянные данные или поврежденные файлы Excel. Это очень полезное программное обеспечение, позволяющее с легкостью возвращать все типы файлов MS Excel .

Шаги по использованию средства восстановления и восстановления MS Excel:

Заключение:

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

Я надеюсь, что вы удовлетворены приведенными выше методами, предоставленными вам по обновлению листа Excel .

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

Маргрет

Маргрет Артур – предприниматель и эксперт по контент-маркетингу. Она ведет технические блоги и специализируется на MS Office, Excel и других технических вопросах. Ее отличительное искусство подачи технической информации простым для понимания языком очень впечатляет. Когда не пишет, она любит незапланированные путешествия.

MicroKnowledge, Inc.

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

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

Теперь мне нужны три отдельных листа, по одному для каждого представителя службы поддержки в столбце« Кому назначено », которые будут содержать только билеты службы поддержки этого человека. Но в дополнение к этому мне нужно следующее, чтобы быть возможно:

  • Новые данные, добавленные в основной лист, будут автоматически заполняться на соответствующих подмножествах листов.
  • Мастер-лист можно сортировать и фильтровать сам по себе, не затрагивая подмножества листов.
  • Функции и диаграммы, анализирующие данные на любом листе, должны автоматически подстраиваться под новые данные.

Звучит сложно? Это не так!

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

(Эта функция также доступна в предыдущих версиях Excel. )

  1. Создайте все нужные листы в книге. Здесь я создал лист для каждого представителя службы поддержки.
  2. Создайте именованный диапазон для своей главной таблицы. Выделите данные в своей таблице (включая заголовки), введите e введите имя диапазона в поле имени слева от строки формул, затем нажмите Enter. Именованный диапазон необходим Microsoft Query для выбора данных для анализа.
  3. Создайте таблицу из вашей главной таблицы. Выделите свои данные, как описано выше. Откройте вкладку Вставить . Щелкните Таблица . Этот шаг немного избыточен, но преобразование ваших данных в таблицу имеет массу преимуществ, главное из которых состоит в том, что при добавлении в нее новых данных она автоматически расширяется для сбора новых данных. В свою очередь, это также автоматически расширит ваш именованный диапазон.
  4. Перейдите на лист, на который вы хотите поместить результаты запроса. Это может быть другой рабочий лист или даже другая книга.
  5. Щелкните вкладку Данные . Нажмите Из других источников . Выберите Из Microsoft Query . Откроется окно Выбрать источник данных .
  6. Выберите файлы Excel. Нажмите ОК . Откроется окно Выбрать книгу .
  7. Найдите и выберите книгу для запроса. Обратите внимание, что это может быть та же книга, что и открытая в данный момент. Нажмите ОК . Отображается Мастер запросов .
  8. Должны появиться ваши именованные диапазоны в левой части окна в виде таблицы. Я выберу все столбцы слева, чтобы показать их на листах подмножества. Щелкните Далее .
  9. На шаге мастера «Фильтровать данные» выберите фильтрацию данных, которые вы хотите отобразить на этом листе. Здесь я делаю лист Джерри, поэтому мне нужны только данные, где Назначено равно Джерри. Нажмите Далее .
  10. Выполните оставшиеся шаги в мастера, пока вы не будете готовы выбрать место назначения для ваших данных. В диалоговом окне Импорт данных убедитесь, что Таблица выбрана в качестве способа вставки ваших данных.. Я решил вставить данные в A1 на листе Джерри.
  11. Поскольку вы вставили данные в качестве таблицы у вас есть особая возможность Обновить, если вы вносите какие-либо изменения в основную таблицу. Вы можете найти Обновить на вкладке «Данные» или на вкладке «Работа с таблицами» Дизайн .

Вам понадобится повторить шаги 4–11 для каждого имеющегося у вас подмножества листов. Но как только все это настроено, у вас есть небольшая симпатичная база данных Excel!

Источник

Adblock
detector

Макрос по заполнению диапазона значениями с другого листа

29.06.2017, 17:52. Показов 4718. Ответов 8


Студворк — интернет-сервис помощи студентам

Добрый день!
В написании макросов я новичок. По долгу службы надо было оптимизировать работу, поэтому пришлось приложить усилия и что-то наваять.

Смысл работы нижеприведенного макроса следующий:
1) первым действием макрос вытягивает из листа «Реестр операций» на лист «Cash flow»(данный лист является основным)
2) затем выполняется цикл по суммированию (с помощью суммеслимн) и заполнению определенных диапозонов на листе «Cash flow» . Данные для суммирования также берутся из листа «Реестр операций».

Подскажите, как можно оптимизировать цикл по заполнению ячеек, поскольку сейчас выполнение макроса занимает от 3 до 5 мин. Как можно его ускорить, либо быть может заменить имеющийся цикл For next на другую более быструю структуру.

Ниже приведен макрос.

Option Explicit
Sub Rachet()

Dim vItem, avArr, li As Long
ReDim avArr(1 To Rows.Count, 1 To 1)

Dim k As Integer, i As Integer, j As Integer
Dim a, b, c, d, e As Range
Dim Sum(1 To 18) As Long
Dim Name As String
Dim Shape As Shape
Dim sheet1, sheet2 As Worksheet

Set sheet1 = Worksheets(«Cash flow»)
Set sheet2 = Worksheets(«Реестр операций»)
Set a = sheet2.Range(«H3:H999000»)
Set b = sheet2.Range(«F3:F999000»)
Set c = sheet2.Range(«C3:C999000»)
Set d = sheet2.Range(«L3:L999000»)
Set e = sheet2.Range(«G3:G999000»)

‘Блок №1 — вытаскивает уникальные значение «Статей затрат» на лист Кэшфло

With New Collection
On Error Resume Next
For Each vItem In b.Value
.Add vItem, CStr(vItem)
If Err = 0 Then
li = li + 1: avArr(li, 1) = vItem
Else: Err.Clear
End If
Next
End With
If li Then sheet1.[C8].Resize(li).Value = avArr

‘Блок №2 — заполнение ячеек с помощью формулы СУММЕСЛИМН на листе Кэшфло

sheet1.Select

For j = 1 To 70
k = 3
For i = 4 To 35
Sum(1) = Application.WorksheetFunction.SumIfs(a, b, sheet1.Cells(j + 7, 3), c, sheet1.Cells(2, k + 1), d, «*» & sheet1.Cells(j + 7, 2) & «*»)
Cells(j + 7, i) = Sum(1)

Sum(2) = Application.WorksheetFunction.SumIfs(a, b, sheet1.Cells(j + 79, 3), c, sheet1.Cells(2, k + 1), d, «*» & sheet1.Cells(j + 79, 2) & «*»)
Cells(j + 79, i) = Sum(2)

Sum(3) = Application.WorksheetFunction.SumIfs(e, b, sheet1.Cells(j + 150, 3), c, sheet1.Cells(2, k + 1), d, «*» & sheet1.Cells(j + 150, 2) & «*»)
Cells(j + 150, i) = Sum(3)

Sum(4) = Application.WorksheetFunction.SumIfs(a, b, sheet1.Cells(j + 223, 3), c, sheet1.Cells(2, k + 1), d, «*» & sheet1.Cells(j + 223, 2) & «*»)
Cells(j + 223, i) = Sum(4)

Sum(5) = Application.WorksheetFunction.SumIfs(e, b, sheet1.Cells(j + 294, 3), c, sheet1.Cells(2, k + 1), d, «*» & sheet1.Cells(j + 294, 2) & «*»)
Cells(j + 294, i) = Sum(5)

Sum(6) = Application.WorksheetFunction.SumIfs(e, b, sheet1.Cells(j + 367, 3), c, sheet1.Cells(2, k + 1), d, «*» & sheet1.Cells(j + 367, 2) & «*»)
Cells(j + 367, i) = Sum(6)

Sum(7) = Application.WorksheetFunction.SumIfs(a, b, sheet1.Cells(j + 442, 3), c, sheet1.Cells(2, k + 1), d, «*» & sheet1.Cells(j + 442, 2) & «*»)
Cells(j + 442, i) = Sum(7)

Sum(8) = Application.WorksheetFunction.SumIfs(e, b, sheet1.Cells(j + 513, 3), c, sheet1.Cells(2, k + 1), d, «*» & sheet1.Cells(j + 513, 2) & «*»)
Cells(j + 513, i) = Sum(8)

Sum(9) = Application.WorksheetFunction.SumIfs(a, b, sheet1.Cells(j + 589, 3), c, sheet1.Cells(2, k + 1), d, «*» & sheet1.Cells(j + 589, 2) & «*»)
Cells(j + 589, i) = Sum(9)

Sum(10) = Application.WorksheetFunction.SumIfs(e, b, sheet1.Cells(j + 660, 3), c, sheet1.Cells(2, k + 1), d, «*» & sheet1.Cells(j + 660, 2) & «*»)
Cells(j + 660, i) = Sum(10)

Sum(11) = Application.WorksheetFunction.SumIfs(a, b, sheet1.Cells(j + 736, 3), c, sheet1.Cells(2, k + 1), d, «*» & sheet1.Cells(j + 736, 2) & «*»)
Cells(j + 736, i) = Sum(11)

Sum(12) = Application.WorksheetFunction.SumIfs(e, b, sheet1.Cells(j + 807, 3), c, sheet1.Cells(2, k + 1), d, «*» & sheet1.Cells(j + 807, 2) & «*»)
Cells(j + 807, i) = Sum(12)

Sum(13) = Application.WorksheetFunction.SumIfs(a, b, sheet1.Cells(j + 883, 3), c, sheet1.Cells(2, k + 1), d, «*» & sheet1.Cells(j + 883, 2) & «*»)
Cells(j + 883, i) = Sum(13)

Sum(14) = Application.WorksheetFunction.SumIfs(e, b, sheet1.Cells(j + 954, 3), c, sheet1.Cells(2, k + 1), d, «*» & sheet1.Cells(j + 954, 2) & «*»)
Cells(j + 954, i) = Sum(14)

Sum(15) = Application.WorksheetFunction.SumIfs(a, b, sheet1.Cells(j + 1027, 3), c, sheet1.Cells(2, k + 1), d, «*» & sheet1.Cells(j + 1027, 2) & «*»)
Cells(j + 1027, i) = Sum(15)

Sum(16) = Application.WorksheetFunction.SumIfs(e, b, sheet1.Cells(j + 1098, 3), c, sheet1.Cells(2, k + 1), d, «*» & sheet1.Cells(j + 1098, 2) & «*»)
Cells(j + 1098, i) = Sum(16)

Sum(17) = Application.WorksheetFunction.SumIfs(a, b, sheet1.Cells(j + 1176, 3), c, sheet1.Cells(2, k + 1), d, «*» & sheet1.Cells(j + 1176, 2) & «*»)
Cells(j + 1176, i) = Sum(17)

Sum(18) = Application.WorksheetFunction.SumIfs(e, b, sheet1.Cells(j + 1247, 3), c, sheet1.Cells(2, k + 1), d, «*» & sheet1.Cells(j + 1247, 2) & «*»)
Cells(j + 1247, i) = Sum(18)

k = k + 1
Next i
Next j

End Sub



0



Перенос заполненных ячеек на другой лист этой же книги

Controler

Дата: Понедельник, 14.03.2016, 07:52 |
Сообщение № 1

Группа: Пользователи

Ранг: Новичок

Сообщений: 14


Репутация:

0

±

Замечаний:
20% ±


Excel 2007

Всем добрый день!

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

[vba]

Код

Sub Перенос()
Sheets(«Отчет за сутки).Range(«A:j»).SpecialCells(2).Copy Sheets(«Отчет за 2016 г.»).Range(«A» & Rows.Count).End(xlUp)
ThisWorkbook.Sheets(«Отчет за сутки»).Copy
Sheets(«Отчет за сутки»).Range(«a2:j10»).ClearContents
MsgBox («Данные в отчет за 2016 г. внесены!»)
End Sub

[/vba]

У меня почему копируются ячейки с названием столбцов, а мне нужно чтобы копировались только данные
[moder]Оформляйте коды тегами (кнопка #). На первый раз исправила[/moder]

К сообщению приложен файл:

2192281.xls
(76.0 Kb)

 

Ответить

KuklP

Дата: Понедельник, 14.03.2016, 08:30 |
Сообщение № 2

Группа: Проверенные

Ранг: Старожил

Сообщений: 2369


Репутация:

486

±

Замечаний:
0% ±


2003-2010

[vba]

Код

Sub Перенос()
    With ThisWorkbook.Sheets(«Отчет за сутки»)
        .Range(«A2:j» & .Cells(.Rows.Count, 1).End(xlUp).Row).SpecialCells(2).Copy Sheets(«Отчет за 2016 г.»).Range(«A» & Rows.Count).End(xlUp)
        .Copy
        .Range(«A2:j» & .Cells(.Rows.Count, 1).End(xlUp).Row).ClearContents
        MsgBox («Данные в отчет за 2016 г. внесены!»)
    End With
End Sub

[/vba]


Ну с НДС и мы чего-то стoим! kuklp60@gmail.com
WM Z206653985942, R334086032478, U238399322728

 

Ответить

Controler

Дата: Понедельник, 14.03.2016, 08:56 |
Сообщение № 3

Группа: Пользователи

Ранг: Новичок

Сообщений: 14


Репутация:

0

±

Замечаний:
20% ±


Excel 2007

цитата удалена

С этим макросом данные копируются на другой лист, но при этом стирается 1 строка названием столбцов, и следующая вставка ячеек происходит со второй строки, надо чтобы данные вносились после последней заполненной строки, при этом оставался заголов 1 строки с названиями столбцов
[moder]
Не надо цитировать посты целиком, это нарушение Правил форума.[/moder]

 

Ответить

KuklP

Дата: Понедельник, 14.03.2016, 09:45 |
Сообщение № 4

Группа: Проверенные

Ранг: Старожил

Сообщений: 2369


Репутация:

486

±

Замечаний:
0% ±


2003-2010

В Вашем файе-примере НЕТ данных. Вот заполните таблицы данными, попробуйте, а потом уж сюда, если что не так. И с файлом с данными. Мне не настолько нечего делать, чтоб рисовать за вас примеры.


Ну с НДС и мы чего-то стoим! kuklp60@gmail.com
WM Z206653985942, R334086032478, U238399322728

 

Ответить

Controler

Дата: Понедельник, 14.03.2016, 10:47 |
Сообщение № 5

Группа: Пользователи

Ранг: Новичок

Сообщений: 14


Репутация:

0

±

Замечаний:
20% ±


Excel 2007

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

К сообщению приложен файл:

0258731.xls
(81.5 Kb)

 

Ответить

KuklP

Дата: Понедельник, 14.03.2016, 10:58 |
Сообщение № 6

Группа: Проверенные

Ранг: Старожил

Сообщений: 2369


Репутация:

486

±

Замечаний:
0% ±


2003-2010

И что не так? Попробовал — все внеслось, записалось, скопировалось и очистилось. Заголовки нетронуты. В Вашем макросе кстати будет затираться последняя строка в Отчет за 2016 г. Если это не планировалось специально, то лучше:
[vba]

Код

        .Range(«A2:j» & .Cells(.Rows.Count, 1).End(xlUp).Row).SpecialCells(2).Copy Sheets(«Отчет за 2016 г.»).Range(«A» & Rows.Count).End(xlUp)(2)

[/vba]


Ну с НДС и мы чего-то стoим! kuklp60@gmail.com
WM Z206653985942, R334086032478, U238399322728

 

Ответить

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

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

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

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

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

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

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

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

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

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

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

Sub Resheniye1()

Dim n1 As Long, n2 As Long, n3 As Long, n4 As Long, _

i1 As Long, gorod As Variant

n1 = Sheets(«Лист1»).Cells(1, 1).CurrentRegion.Rows.Count

  For i1 = 1 To n1

    With Sheets(«Лист1»)

      If gorod <> .Cells(i1, 1) Then

        gorod = .Cells(i1, 1)

        n2 = 1

        n3 = n3 + 1

        n4 = 1

      Else

        n2 = 2

      End If

      Do While .Cells(i1, n2) <> «»

        Sheets(«Лист2»).Cells(n3, n4) = .Cells(i1, n2)

        n4 = n4 + 1

        n2 = n2 + 1

      Loop

    End With

  Next

End Sub

Переменные:

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

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

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

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

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

‘Объявление глобальных переменных

‘в разделе Declarations

Dim massiv1 As Variant, n2 As Long, _

n3 As Long, i1 As Long, txt1 As Variant

‘Исполняемая процедура для решения

‘задания вторым способом

Sub Resheniye2()

Dim n1 As Long, gorod As Variant

With Sheets(«Лист1»).Cells(1, 1)

    massiv1 = .CurrentRegion

    n1 = .CurrentRegion.Rows.Count

    n2 = .CurrentRegion.Columns.Count

End With

n3 = 0

txt1 = «»

  For i1 = 1 To n1

    If gorod <> massiv1(i1, 1) Then

      If txt1 <> «» Then

        Call Vstavka

      End If

        gorod = massiv1(i1, 1)

        txt1 = massiv1(i1, 1)

        Call Kopirovanie

    Else

        Call Kopirovanie

    End If

    If i1 = n1 Then

        Call Vstavka

    End If

  Next

End Sub

‘Копирование данных из массива в

‘строковую переменную через разделитель

Sub Kopirovanie()

Dim i2 As Long

  For i2 = 2 To n2

    If massiv1(i1, i2) <> Empty Then

      txt1 = txt1 & «|» & massiv1(i1, i2)

    End If

  Next

End Sub

‘Обработка данных из строковой

‘переменной в дополнительных массивах и

‘вставка очередной строки на второй лист

Sub Vstavka()

Dim n4 As Long, massiv2 As Variant, _

massiv3 As Variant, i3 As Long

n3 = n3 + 1

massiv2 = Split(txt1, «|»)

n4 = UBound(massiv2)

ReDim massiv3(0 To 0, 0 To n4)

  For i3 = 0 To n4

    massiv3(0, i3) = massiv2(i3)

  Next

Sheets(«Лист2»).Range(Cells(n3, 1), _

Cells(n3, n4 + 1)).Value = massiv3

End Sub

Подпрограммы 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 программного модуля.


  • Редакция Кодкампа

17 авг. 2022 г.
читать 1 мин


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

Шаг 1: введите данные на первом листе

Во-первых, давайте введем следующие данные в Sheet1 в Excel:

Шаг 2: Автозаполнение данных на втором листе

Теперь предположим, что у нас есть еще один лист под названием Sheet2 , который содержит следующие данные:

Предположим, мы хотим автоматически заполнить значения из столбца Points на Sheet1 в столбце Points на Sheet2 .

Для этого мы можем ввести следующую формулу в ячейку C2 Листа2 :

=Sheet1!B2

Это автоматически заполнит ячейку C2 в Sheet2 значением из ячейки B2 в Sheet1 :

Чтобы автоматически заполнить остальные значения в столбце C, наведите указатель мыши на правый нижний угол ячейки C2 , пока не появится крошечный крестик «+». Затем дважды щелкните.

Каждая из оставшихся ячеек в столбце C будет заполнена:

Обратите внимание, что все значения из столбца Points в Sheet1 были автоматически заполнены в Sheet2 .

Дополнительные ресурсы

В следующих руководствах объясняется, как выполнять другие распространенные задачи в Excel:

Как автозаполнять даты в Excel
Как заменить пустые ячейки нулем в Excel
Как заменить значения #N/A в Excel

Написано

Редакция Кодкампа

Замечательно! Вы успешно подписались.

Добро пожаловать обратно! Вы успешно вошли

Вы успешно подписались на кодкамп.

Срок действия вашей ссылки истек.

Ура! Проверьте свою электронную почту на наличие волшебной ссылки для входа.

Успех! Ваша платежная информация обновлена.

Ваша платежная информация не была обновлена.

Понравилась статья? Поделить с друзьями:
  • Excel макрос для заполнения таблиц
  • Excel макрос для заливки ячейки
  • Excel макрос для другой страницы
  • Excel макрос для горячей клавиши
  • Excel макрос для выпадающего списка