Sub ThuNo()
Dim ArrData, ArrKQ(), DicNo, DicThu, i As Long, j As Long, k As Long, TTNo As Long, TTThu As Long, iT As Long, Tmp As Double
BaoCao.UsedRange.Offset(1).ClearContents
Set DicNo = CreateObject("Scripting.Dictionary")
Set DicThu = CreateObject("Scripting.Dictionary")
ArrData = Data.Range(Data.[E3], Data.[A65536].End(xlUp)).Value
For i = 1 To UBound(ArrData, 1)
If ArrData(i, 4) > 0 Then
TTNo = TTNo + 1
DicNo.Add TTNo, i
ElseIf ArrData(i, 5) > 0 Then
TTThu = TTThu + 1
DicThu.Add TTThu, i
End If
Next
iT = 1
For i = 1 To TTNo
k = k + 1
ReDim Preserve ArrKQ(1 To 7, 1 To k)
ArrKQ(4, k) = ArrData(DicNo.Item(i), 4)
If iT > TTThu Then
ArrKQ(1, k) = ArrData(DicNo.Item(i), 1)
ArrKQ(2, k) = ArrData(DicNo.Item(i), 2)
ArrKQ(3, k) = ArrData(DicNo.Item(i), 3)
Else
For j = iT To TTThu
If ArrData(DicNo.Item(i), 4) = ArrData(DicThu.Item(iT), 5) Then
ArrKQ(1, k) = ArrData(DicNo.Item(i), 1)
ArrKQ(2, k) = ArrData(DicNo.Item(i), 2)
ArrKQ(3, k) = ArrData(DicNo.Item(i), 3)
ArrKQ(5, k) = ArrData(DicThu.Item(j), 5)
ArrKQ(6, k) = ArrData(DicThu.Item(j), 1)
ArrKQ(7, k) = ArrData(DicThu.Item(j), 2)
iT = iT + 1
GoTo NextHD
ElseIf ArrData(DicNo.Item(i), 4) < ArrData(DicThu.Item(j), 5) Then
ArrKQ(1, k) = ArrData(DicNo.Item(i), 1)
ArrKQ(2, k) = ArrData(DicNo.Item(i), 2)
ArrKQ(3, k) = ArrData(DicNo.Item(i), 3)
ArrKQ(5, k) = ArrData(DicNo.Item(i), 4)
ArrKQ(6, k) = ArrData(DicThu.Item(j), 1)
ArrKQ(7, k) = ArrData(DicThu.Item(j), 2)
ArrData(DicThu.Item(j), 5) = ArrData(DicThu.Item(j), 5) - ArrData(DicNo.Item(i), 4)
GoTo NextHD
Else
ArrKQ(1, k) = ArrData(DicNo.Item(i), 1)
ArrKQ(2, k) = ArrData(DicNo.Item(i), 2)
ArrKQ(3, k) = ArrData(DicNo.Item(i), 3)
ArrKQ(5, k) = ArrData(DicThu.Item(j), 5)
ArrKQ(6, k) = ArrData(DicThu.Item(j), 1)
ArrKQ(7, k) = ArrData(DicThu.Item(j), 2)
ArrData(DicNo.Item(i), 4) = ArrData(DicNo.Item(i), 4) - ArrData(DicThu.Item(j), 5)
iT = iT + 1
If iT > TTThu Then GoTo NextHD
k = k + 1
ReDim Preserve ArrKQ(1 To 7, 1 To k)
End If
Next
End If
NextHD:
Next
If iT <= TTThu Then
For j = iT To TTThu
k = k + 1
ReDim Preserve ArrKQ(1 To 7, 1 To k)
ArrKQ(5, k) = ArrData(DicThu.Item(j), 5)
ArrKQ(6, k) = ArrData(DicThu.Item(j), 1)
ArrKQ(7, k) = ArrData(DicThu.Item(j), 2)
Next
End If
ArrKQ = Application.WorksheetFunction.Transpose(ArrKQ)
BaoCao.[A3].Resize(UBound(ArrKQ, 1), 7).Value = ArrKQ
BaoCao.[D2:E2].FormulaR1C1 = "=SUM(R[1]C:R[" & UBound(ArrKQ, 1) & "]C)"
End Sub