Private Sub Worksheet_Change(ByVal Target As Range)
Dim sArr, dArr, C As Object, I As Long, K As Long, R As Object, N As Long, Col As Long, Rws As Long, Lenh As String, J As Long
If Target.Address = "$B$1" Then
Application.ScreenUpdating = False
sArr = Sheet2.Range("A2").CurrentRegion.Value
Lenh = Target.Value
Set C = CreateObject("Scripting.Dictionary")
Set R = CreateObject("Scripting.Dictionary")
ReDim dArr(1 To UBound(sArr), 1 To 1000)
K = 2: N = 7
dArr(1, 1) = "STT": dArr(1, 2) = "MATHANG": dArr(1, 3) = "TENHANG"
dArr(1, 4) = "DVT": dArr(1, 5) = "SOLUONGTHEOLENH": dArr(1, 6) = "SOLUONGXUAT": dArr(1, 7) = "TON"
For I = 2 To UBound(sArr)
If sArr(I, 2) = Lenh Then
If Not R.Exists(sArr(I, 3)) Then
K = K + 1
R.Add sArr(I, 3), K
dArr(K, 1) = K-2
For J = 2 To 5
dArr(K, J) = sArr(I, J + 1)
Next
Else
Rws = R.Item(sArr(I, 3))
dArr(Rws, 5) = dArr(Rws, 5) + sArr(I, 6)
End If
End If
Next
sArr = Sheet1.Range("A2").CurrentRegion.Value
For I = 2 To UBound(sArr)
If sArr(I, 2) = Lenh Then
If Not C.Exists(sArr(I, 1)) Then
N = N + 1
C.Add sArr(I, 1), N
dArr(1, N) = sArr(I, 3)
dArr(2, N) = sArr(I, 1)
End If
Rws = R.Item(sArr(I, 4))
Col = C.Item(sArr(I, 1))
dArr(Rws, 6) = dArr(Rws, 6) + sArr(I, 7)
dArr(Rws, 7) = "=RC[-2]-RC[-1]"
dArr(Rws, Col) = dArr(Rws, Col) + sArr(I, 7)
End If
Next
If K Then
Range("A5:A1000").Resize(, 1000).ClearContents
Range("A5").Resize(K, N).Value = dArr
End If
Application.ScreenUpdating = True
End If
End Sub