#vba #dictionary #header #mapping
Вопрос:
У меня есть рабочая тетрадь с листом 1, листом 2, отображением. Я хочу скопировать значения со листа 2 на лист 1 на основе заголовков строк/столбцов на обоих листах. Заголовки столбцов не могли совпадать, поэтому я создал таблицу сопоставления на листе «Сопоставление», чтобы соответствовать этим заголовкам. Следующий код работает для заголовков столбцов, но я не знаю, как также учитывать заголовки строк. Поэтому любые советы будут оценены по достоинству :). Также я хочу использовать «именованную таблицу» для целевого листа, поэтому, если у вас есть какие-либо идеи..
Отображение:
Лист1:
Лист2:
Результат, которого я хочу:
Код:
Public Sub test()
Application.ScreenUpdating = False
stack "Sheet2", "Sheet1", "Mapping"
Application.ScreenUpdating = True
End Sub
Public Sub stack(ByVal Sheet2 As String, ByVal Sheet1 As String, ByVal Mapping As String)
Dim rng As Range, trgtCell As Range, src As Worksheet, trgt As Worksheet, helper As Worksheet
Set src = Worksheets("Sheet2")
Set trgt = Worksheets("Sheet1")
Set helper = Worksheets("Mapping")
With src
For Each rng In Intersect(.Rows(3), .UsedRange).SpecialCells(xlCellTypeConstants)
Dim lkup As Variant
With helper
lkup = Application.VLookup(rng.Value, .Range("A2:B" amp; .Cells(.Rows.Count, "A").End(xlUp).Row), 2, False)
End With
If Not IsError(lkup) Then
Set trgtCell = trgt.Rows(2).Find(lkup, LookIn:=xlValues, lookat:=xlWhole)
If Not trgtCell Is Nothing Then
.Range(rng.Offset(1), .Cells(.Rows.Count, rng.Column).End(xlUp)).Copy
With trgt
.Range(Split(trgtCell.Address, "$")(1) amp; 3).PasteSpecial
End With
End If
End If
Next rng
End With
End Sub