This code matches the items by combining strings of order number and product code, does the calculations and removes the rows containing discounts. Hope it works for you
Option Explicit
Sub Combine__And__Delete()
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
Dim ws As Worksheet
Set ws = Sheets(1)
Dim i&, j&, lr&, rng As Range, nrng As Range, str$, com$, x#, y#
lr = ws.Range("A" & Rows.Count).End(xlUp).Row
For i = 2 To lr
Set rng = ws.Range("A" & i): str = rng.Text & rng.Offset(0, 2).Text
For j = 2 To lr
If i <> j Then
Set nrng = ws.Range("A" & j): com = nrng.Text & nrng.Offset(0, 2).Text
If StrComp(str, com, 1) = 0 Then
x = CDbl(rng.Offset(0, 3)): y = CDbl(nrng.Offset(0, 3))
If y < 0 Then
rng.Offset(0, 4) = CDbl(rng.Offset(0, 3)) - Abs(CDbl(nrng.Offset(0, 3)))
End If
End If
Set nrng = Nothing
End If
Next j
Set rng = Nothing
Next i
For i = lr To 2 Step -1
Set rng = ws.Range("E" & i)
If rng.Value < 0 Then Rows(rng.Row & ":" & rng.Row).Delete
Set rng = Nothing
Next i
Application.Calculation = xlCalculationAutomatic
Application.ScreenUpdating = True
End Sub
EDIT:
I have changed the code a bit to better match your criteria. Try it and leave feedback:)
Option Explicit
Sub Combine__And__Delete()
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
Dim ws As Worksheet
Set ws = Sheets(1)
Dim i&, j&, lr&, rng As Range, str$, com$, tmp, x#
lr = ws.Range("A" & Rows.Count).End(xlUp).Row
ReDim arr(lr - 2) As String
For i = 2 To lr
Set rng = ws.Range("A" & i)
arr(i - 2) = rng.Text & "###" & rng.Offset(0, 2).Text
Set rng = Nothing
Next i
Call RemoveDuplicate(arr)
For i = LBound(arr) To UBound(arr)
For j = lr To 2 Step -1
Set rng = ws.Range("A" & j)
str = rng.Text & "###" & rng.Offset(0, 2).Text
If StrComp(str, arr(i), 1) = 0 Then
x = x + CDbl(rng.Offset(0, 3).Value)
com = rng.Offset(0, 1)
End If
Set rng = Nothing
Next j
arr(i) = arr(i) & "###" & CStr(x) & "###" & com
x = 0
Next i
Rows("2:" & lr).Delete
For i = LBound(arr) To UBound(arr)
Set rng = ws.Range("A" & i + 2)
tmp = Split(arr(i), "###")
rng = tmp(0)
rng.Offset(0, 1) = tmp(3)
rng.Offset(0, 2) = tmp(1)
rng.Offset(0, 3) = tmp(2)
Set rng = Nothing
Next i
Application.Calculation = xlCalculationAutomatic
Application.ScreenUpdating = True
End Sub
Sub RemoveDuplicate(ByRef StringArray() As String)
Dim lb&, ub&, TempArray() As String, cur&, A&, B&
If (Not StringArray) = True Then Exit Sub
lb = LBound(StringArray): ub = UBound(StringArray)
ReDim TempArray(lb To ub): cur = lb: TempArray(cur) = StringArray(lb)
For A = lb + 1 To ub
For B = lb To cur
If LenB(TempArray(B)) = LenB(StringArray(A)) Then
If InStrB(1, StringArray(A), TempArray(B), vbBinaryCompare) = 1 Then Exit For
End If
Next B
If B > cur Then cur = B: TempArray(cur) = StringArray(A)
Next A
ReDim Preserve TempArray(lb To cur): StringArray = TempArray
End Sub