Sub GPE()
Dim Darr(), Arr(), Key As String, RowsIn As Long, ColsIn As Long, ColsOut As Long
Dim i As Long, j As Long, k As Long, ik As Long, n As Long
With Sheets("sheet1")
RowsIn = .Range("A60000").End(xlUp).Row - 2
ColsIn = .Range("A3").CurrentRegion.Columns.Count
Darr = .Range("A3").Resize(RowsIn, ColsIn).Value
End With
ColsOut = RowsIn + 3
ReDim Arr(1 To 10000, 1 To ColsOut)
With CreateObject("scripting.dictionary")
For i = 1 To RowsIn
For j = 2 To ColsIn
Key = Darr(i, j)
If Key = Empty Then GoTo Tiep 'Du lieu theo cot khong duoc co Cell trong xen giua
If Not .exists(Key) Then
k = k + 1
.Add Key, k
Arr(k, 1) = Key: Arr(k, 2) = 1: Arr(k, ColsOut) = Darr(i, 1)
Else
ik = .Item(Key)
n = Arr(ik, 2) + 1
Arr(ik, 2) = n
If n = 2 Then Arr(ik, 3) = Arr(ik, ColsOut)
Arr(ik, n + 2) = Darr(i, 1)
End If
Tiep:
Next j
Next i
End With
Sheets("sheet2").Range("A3").Resize(k, ColsOut - 1) = Arr
End Sub