Здравствуйте, необходима помощь в создании макроса. Есть столбец с данными в Лист1 "Наименование " необходимо выбрать из нее значения, в лист2 по Коду. каждая деталь в соответствующий столбец кода. P.S. в оригинале деталей больше, здесь фрагмент. заранее благодарен.
Здравствуйте, необходима помощь в создании макроса. Есть столбец с данными в Лист1 "Наименование " необходимо выбрать из нее значения, в лист2 по Коду. каждая деталь в соответствующий столбец кода. P.S. в оригинале деталей больше, здесь фрагмент. заранее благодарен.Abay
А в оригинале количество ячеек под каждый код такое же?
[vba]
Код
Sub uuu() With Sheets("Лист1") a = .Range("A2", Cells(Rows.Count, 2).End(xlUp)).Value End With Set sd = CreateObject("Scripting.Dictionary") For i = 1 To UBound(a) sd.Item(a(i, 2)) = sd.Item(a(i, 2)) & "|" & a(i, 1) Next With Sheets("Лист3") rw = 1 For Each key_ In sd.Keys .Cells(rw, 1) = "Код " & key_ rw = rw + 1 sp = Split(sd.Item(key_), "|") For Each item_ In sp If item_ <> "" Then .Cells(rw, 1) = item_ rw = rw + 1 End If Next rw = rw + 1 Next End With End Sub
[/vba]
Результат на Лист3
А в оригинале количество ячеек под каждый код такое же?
[vba]
Код
Sub uuu() With Sheets("Лист1") a = .Range("A2", Cells(Rows.Count, 2).End(xlUp)).Value End With Set sd = CreateObject("Scripting.Dictionary") For i = 1 To UBound(a) sd.Item(a(i, 2)) = sd.Item(a(i, 2)) & "|" & a(i, 1) Next With Sheets("Лист3") rw = 1 For Each key_ In sd.Keys .Cells(rw, 1) = "Код " & key_ rw = rw + 1 sp = Split(sd.Item(key_), "|") For Each item_ In sp If item_ <> "" Then .Cells(rw, 1) = item_ rw = rw + 1 End If Next rw = rw + 1 Next End With End Sub
Предлагаю такой макрос. В ячейках с номером кода убрана текстовая часть.
[vba]
Код
Sub Item_Delivery()
Application.ScreenUpdating = True With ThisWorkbook.Sheets(1)
Dim X As Long Dim Y As Long Dim Target As Range
For X = 2 To .Cells(Rows.Count, 1).End(xlUp).Row Y = 0 Set Target = Sheets(2).[A:A].Find(what:=.Cells(X, 2).Value, LookIn:=xlValues) Do While Sheets(2).Cells(Target.Row + Y, 1).Value <> "" If Sheets(2).Cells(Target.Row + Y, 1).Value = .Cells(X, 1).Value Then Exit For Y = Y + 1 Loop Sheets(2).Cells(Target.Row + Y, 1).Value = .Cells(X, 1).Value Next X
End With Application.ScreenUpdating = False
End Sub
[/vba]
Abay, здравствуйте.
Предлагаю такой макрос. В ячейках с номером кода убрана текстовая часть.
[vba]
Код
Sub Item_Delivery()
Application.ScreenUpdating = True With ThisWorkbook.Sheets(1)
Dim X As Long Dim Y As Long Dim Target As Range
For X = 2 To .Cells(Rows.Count, 1).End(xlUp).Row Y = 0 Set Target = Sheets(2).[A:A].Find(what:=.Cells(X, 2).Value, LookIn:=xlValues) Do While Sheets(2).Cells(Target.Row + Y, 1).Value <> "" If Sheets(2).Cells(Target.Row + Y, 1).Value = .Cells(X, 1).Value Then Exit For Y = Y + 1 Loop Sheets(2).Cells(Target.Row + Y, 1).Value = .Cells(X, 1).Value Next X