جرب هذا الكود
CODE
Option Explicit
Sub give_data()
Dim D As Object
Dim S As Worksheet
Dim S_rg As Range, Trg As Range
Dim Ro%, y, m%, itm
Set D = CreateObject("Scripting.Dictionary")
Set S = Sheets("Sheet2")
Set S_rg = S.Range("A1").CurrentRegion.Columns(2)
Set S_rg = S_rg.Offset(1).Resize(S_rg.Rows.Count - 1)
Set Trg = S.Range("F1").CurrentRegion
If Trg.Rows.Count > 1 Then Trg.Offset(1) _
.Resize(Trg.Rows.Count - 1).ClearContents
Ro = 1
Do Until Ro > S_rg.Rows.Count
If S_rg.Cells(Ro) <> vbNullString Then
If Not D.Exists(S_rg.Cells(Ro).Value) Then
D(S_rg.Cells(Ro).Value) = _
S_rg.Cells(Ro).Offset(, 1).Value
Else
D(S_rg.Cells(Ro).Value) = _
D(S_rg.Cells(Ro).Value) & "*" _
& S_rg.Cells(Ro).Offset(, 1).Value
End If
End If
Ro = Ro + 1
Loop
m = 2
For Each y In D.keys
Cells(m, "F") = y
itm = Split(D(y), "*")
Cells(m, "G").Resize(, UBound(itm) + 1) = itm
m = m + 1
Next
With Cells(2, "E").Resize(m - 2)
.Formula = "=INDEX(A1:A" & Ro & _
",MATCH(F2,B1:B" & Ro & ",0))"
.Value = .Value
End With
Set D = Nothing: Set S = Nothing
Set S_rg = Nothing: Set Trg = Nothing
End Sub
الملف مرفق