Private Sub Worksheet_Change(ByVal Target As Range) Dim idData As Range Set idData = Intersect(Target, Columns("b:b")) If Not idData Is Nothing Then Set shData = Sheets("Данные_") For Each Cell In idData If Cell <> "" Then With shData r = .Columns(1).Find(Cell, , xlValues, xlWhole).Row c = .Rows(1).Find("Столбец3", , xlValues, xlWhole).Column Cells(Cell.Row, "c").Resize(, 3) = .Cells(r, c + 1).Resize(, 3).Value End With Else Cells(Cell.Row, "c").Resize(, 3).ClearContents 'если не надо, убрать End If Next Cell End If End Sub
Как можно его адаптировать под случай, когда выбираемые данные расположены на строке листа "Данные"в разном порядке, а в строке листа "Выборка" последовательно?
Пример в файле
Здравствуйте, прошу помочь разобраться
есть макрос: [vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range) Dim idData As Range Set idData = Intersect(Target, Columns("b:b")) If Not idData Is Nothing Then Set shData = Sheets("Данные_") For Each Cell In idData If Cell <> "" Then With shData r = .Columns(1).Find(Cell, , xlValues, xlWhole).Row c = .Rows(1).Find("Столбец3", , xlValues, xlWhole).Column Cells(Cell.Row, "c").Resize(, 3) = .Cells(r, c + 1).Resize(, 3).Value End With Else Cells(Cell.Row, "c").Resize(, 3).ClearContents 'если не надо, убрать End If Next Cell End If End Sub
Как можно его адаптировать под случай, когда выбираемые данные расположены на строке листа "Данные"в разном порядке, а в строке листа "Выборка" последовательно?
If Cell <> "" Then With shData r = .Columns(1).Find(Cell, , xlValues, xlWhole).Row For i = 3 To lc Cells(Cell.Row, i) = WorksheetFunction.HLookup(Cells(1, i), .[a1].CurrentRegion, r, 0) Next i End With Else Cells(Cell.Row, "c").Resize(, lc).ClearContents 'если не надо, убрать End If
[/vba]
ska, пробуйте так: [vba]
Код
If Cell <> "" Then With shData r = .Columns(1).Find(Cell, , xlValues, xlWhole).Row For i = 3 To lc Cells(Cell.Row, i) = WorksheetFunction.HLookup(Cells(1, i), .[a1].CurrentRegion, r, 0) Next i End With Else Cells(Cell.Row, "c").Resize(, lc).ClearContents 'если не надо, убрать End If
Небольшое дополнение. Может возникать ошибка в случае если названия столбцов не будут совпадать. Скорректировал код следующим образом: [vba]
Код
With shData r = .Columns(1).Find(Cell, , xlValues, xlWhole).Row For i = 5 To lc If Not IsError(Application.HLookup(Cells(1, i), .[a1].CurrentRegion, r, 0)) Then Cells(Cell.Row, i) = WorksheetFunction.HLookup(Cells(1, i), .[a1].CurrentRegion, r, 0) End If Next i End With
[/vba]
все заработало
Небольшое дополнение. Может возникать ошибка в случае если названия столбцов не будут совпадать. Скорректировал код следующим образом: [vba]
Код
With shData r = .Columns(1).Find(Cell, , xlValues, xlWhole).Row For i = 5 To lc If Not IsError(Application.HLookup(Cells(1, i), .[a1].CurrentRegion, r, 0)) Then Cells(Cell.Row, i) = WorksheetFunction.HLookup(Cells(1, i), .[a1].CurrentRegion, r, 0) End If Next i End With