Bạn xem thử file với code "Cùi bắp".
Em cũng muốn học Code này của Bác Bate ạ. Nếu có thời gian nhờ bác chỉ rõ ý nghĩ của từng đoạn Code chính với ạ.
Public Sub sGpe()
Dim Arr1(), Arr2(), dArr(), tArr(), I As Long, J As Long, K As Long, R1 As Long, R2 As Long, Txt As String
Arr1 = Range("B2", Range("B10000").End(xlUp)).Resize(, 4).Value
R1 = UBound(Arr1)
Arr2 = Range("L2", Range("L10000").End(xlUp)).Resize(, 4).Value
R2 = UBound(Arr2)
ReDim tArr(1 To R1 + R2, 1 To 3)
With CreateObject("Scripting.Dictionary")
For I = 1 To R1
Txt = Arr1(I, 1)
If Not .Exists(Txt) Then
K = K + 1
.Item(Txt) = K
tArr(K, 1) = Txt
tArr(K, 2) = Arr1(I, 4)
Else
tArr(.Item(Txt), 2) = tArr(.Item(Txt), 2) + Arr1(I, 4)
End If
Next I
For I = 1 To R2
Txt = Arr2(I, 1)
If Not .Exists(Txt) Then
K = K + 1
.Item(Txt) = K
tArr(K, 1) = Txt
tArr(K, 3) = Arr2(I, 4)
Else
tArr(.Item(Txt), 3) = tArr(.Item(Txt), 3) + Arr2(I, 4)
End If
Next I
End With
R1 = K
ReDim dArr(1 To 3, 1 To 3)
For I = 1 To R1
If tArr(I, 2) > 0 And tArr(I, 3) > 0 Then
dArr(1, 1) = dArr(1, 1) + 1
dArr(1, 2) = dArr(1, 2) & tArr(I, 1) & ", "
dArr(1, 3) = dArr(1, 3) + tArr(I, 2) - tArr(I, 3)
ElseIf tArr(I, 2) > 0 And tArr(I, 3) = 0 Then
dArr(2, 1) = dArr(2, 1) + 1
dArr(2, 2) = dArr(2, 2) & tArr(I, 1) & "(" & tArr(I, 2) & "), "
dArr(2, 3) = dArr(2, 3) + tArr(I, 2)
ElseIf tArr(I, 2) = 0 And tArr(I, 3) > 0 Then
dArr(3, 1) = dArr(3, 1) + 1
dArr(3, 2) = dArr(3, 2) & tArr(I, 1) & "(" & tArr(I, 3) & "), "
dArr(3, 3) = dArr(3, 3) + tArr(I, 3)
End If
Next I
For I = 1 To 3
If Len(dArr(I, 2)) Then dArr(I, 2) = Left(dArr(I, 2), Len(dArr(I, 2)) - 2)
Next I
Range("H6").Resize(3, 3) = dArr
End Sub