Копирование массива данных со страницы на страницу - VBA

Узнай цену своей работы

Формулировка задачи:

День добрый. Впервые столкнулся с необходимостью создания макроса на Excel, нужна помощь специалистов Есть книга Excel, в ней 2 листа с таблицами: Таблица 1 (Лист 1) Таблица 2 (Лист 2) Из первой таблицы во вторую необходимо перенести, например, все данные из столбцов "ФИО" и "Подразделение". При этом количество строк будет варьироваться. То есть нужно, чтобы копировались данные не строго с А2 по А10, а, как бы, с А2 по Абесконечность. Это вообще возможно?

Решение задачи: «Копирование массива данных со страницы на страницу»

textual
Листинг программы
  1. Option Explicit
  2.  
  3. 'Ключи собираем одним циклом по исходным данным.
  4. 'Затем вложенные циклы (3 шт.) по итогу:
  5. '1 - по фио
  6. '2 - по шапке первая строка с шагом 3
  7. '3 - по шапке вторая строка 1-3
  8. 'собираем из этих 3 значений ключ, если есть в словаре - извлекаем данные.
  9.  
  10.  
  11. Sub tt()
  12.     Dim a(), i&, ii&, iii&, t$
  13.     Dim d1 As Object, d2 As Object
  14.  
  15.     Application.ScreenUpdating = False
  16.  
  17.     a = Sheets(1).[a1].CurrentRegion.Value
  18.     Set d1 = CreateObject("scripting.dictionary"): d1.comparemode = 1
  19.     Set d2 = CreateObject("scripting.dictionary"): d2.comparemode = 1
  20.     For i = 2 To UBound(a)
  21.         d1.Item(a(i, 1) & "|" & a(i, 8)) = a(i, 9)
  22.         d2.Item(a(i, 1)) = a(i, 3)
  23.     Next
  24.  
  25.     With Sheets(2)
  26.         .UsedRange.Offset(2).ClearContents
  27.         .[a3].Resize(d2.Count, 2) = Application.Transpose(Array(d2.keys, d2.items)) 'вываливаем фамилии и должности
  28.        For i = 3 To 2 + d2.Count
  29.             For ii = 3 To 12 Step 3
  30.                 For iii = 1 To 3
  31.                     t = .Cells(i, 1) & "|" & .Cells(1, ii) & "." & .Cells(2, ii + iii - 1)
  32.                     If d1.exists(t) Then .Cells(i, ii + iii - 1) = d1.Item(t)
  33.                 Next: Next: Next
  34.     End With
  35.  
  36.     Application.ScreenUpdating = True
  37. End Sub

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

7   голосов , оценка 4 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы