Option Explicit
[B]Sub PackingList()[/B]
Dim Clls As Range, SoThg As Byte
[d2].Resize([d3].CurrentRegion.Rows.Count, 6).Offset(1).ClearContents
For Each Clls In Range("A3:A" & [A65500].End(xlUp).Row)
With [d65500].End(xlUp).Offset(1)
SoThg = Clls.Offset(, 1).Value \ Clls.Offset(, 2).Value
.Offset(, 2).Value = Clls.Value
.Offset(, 5).Value = IIf(SoThg < 1, 1, SoThg) '*'
.Offset(, 4).Value = Clls.Offset(, 2).Value
If Clls.Row = 3 Then
.Value = 1
.Offset(, 1).Value = IIf(SoThg < 1, 1, SoThg) '*'
If SoThg > 0 Then '* <=|'
.Offset(, 3).Value = Clls.Offset(, 2).Value * .Offset(, 1).Value
Else
.Offset(, 3).Value = Clls.Offset(, 1).Value
End If '* <=|'
If Clls.Offset(, 1).Value Mod Clls.Offset(, 2).Value <> 0 And SoThg > 0 Then '*'
GoTo GPE
End If
ElseIf Clls.Row > 3 Then
.Value = .Offset(-1, 1).Value + 1
.Offset(, 1).Value = .Value + SoThg - IIf(SoThg > 0, 1, 0) '*'
If SoThg > 0 Then '* <<=|'
.Offset(, 3).Value = Clls.Offset(, 2).Value * (.Offset(, 1).Value - .Value + 1)
Else
.Offset(, 3).Value = Clls.Offset(, 1).Value
End If '* <<=|'
If Clls.Offset(, 1).Value Mod Clls.Offset(, 2).Value <> 0 And SoThg > 0 Then '*'
GPE: .Offset(1).Resize(, 2).Value = .Offset(, 1).Value + 1
.Offset(1, 2).Value = Clls.Value
.Offset(1, 3).Resize(, 2).Value = Clls.Offset(, 1).Value - .Offset(, 3).Value
.Offset(1, 5).Value = 1
End If
End If
End With
Next Clls
End Sub