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

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

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

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

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

textual
Листинг программы
Option Explicit
 
'Ключи собираем одним циклом по исходным данным.
'Затем вложенные циклы (3 шт.) по итогу:
'1 - по фио
'2 - по шапке первая строка с шагом 3
'3 - по шапке вторая строка 1-3
'собираем из этих 3-х значений ключ, если есть в словаре - извлекаем данные.
 
 
Sub tt()
    Dim a(), i&, ii&, iii&, t$
    Dim d1 As Object, d2 As Object
 
    Application.ScreenUpdating = False
 
    a = Sheets(1).[a1].CurrentRegion.Value
    Set d1 = CreateObject("scripting.dictionary"): d1.comparemode = 1
    Set d2 = CreateObject("scripting.dictionary"): d2.comparemode = 1
    For i = 2 To UBound(a)
        d1.Item(a(i, 1) & "|" & a(i, 8)) = a(i, 9)
        d2.Item(a(i, 1)) = a(i, 3)
    Next
 
    With Sheets(2)
        .UsedRange.Offset(2).ClearContents
        .[a3].Resize(d2.Count, 2) = Application.Transpose(Array(d2.keys, d2.items)) 'вываливаем фамилии и должности
        For i = 3 To 2 + d2.Count
            For ii = 3 To 12 Step 3
                For iii = 1 To 3
                    t = .Cells(i, 1) & "|" & .Cells(1, ii) & "." & .Cells(2, ii + iii - 1)
                    If d1.exists(t) Then .Cells(i, ii + iii - 1) = d1.Item(t)
                Next: Next: Next
    End With
 
    Application.ScreenUpdating = True
End Sub

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


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

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

7   голосов , оценка 4 из 5
Похожие ответы