Muốn đóng gói 1 thùng 24 cái, thì lấy từ trên xuống dưới:Hic, không hiểu quy luật để ra được cột Detail là gì????
Option Explicit
Sub PackingList()
Dim jJ As Long, eRw As Long: Dim sCTiet As String
Dim Rng As Range, Clls As Range
Dim SoLg As Integer, SoCuoi As Integer, Ton As Integer, Thieu As Byte
Range("H2:I" & [g65500].End(xlUp).Row).Clear
For Each Clls In Range([e2], [e2].End(xlDown))
If SoLg < 24 Then
SoLg = SoLg + Clls.Value
If SoLg < 24 Then
sCTiet = sCTiet & "; No." & Clls.Offset(, -4) & _
"-(" & Clls.Offset(, -1).Value & "):" & Clls.Value
SoCuoi = SoLg
If Clls.Row = [e2].End(xlDown).Row Then
[h65500].End(xlUp).Offset(1).Value = sCTiet & "; Missing:" & (24 - SoLg)
End If
ElseIf SoLg >= 24 Then
Thieu = 24 - SoCuoi
[h65500].End(xlUp).Offset(1).Value = sCTiet & _
"; No." & Clls.Offset(, -4) & "-(" & Clls.Offset(, -1).Value & "):" & Thieu
[I65500].End(xlUp).Offset(1) = 24: Ton = Clls.Value - Thieu
sCTiet = IIf(SoLg = 24, "", "; No." & Clls.Offset(, -4) & _
"-(" & Clls.Offset(, -1).Value & "):" & Ton)
SoCuoi = Ton: SoLg = Ton
If Ton > 24 Then
Do
[h65500].End(xlUp).Offset(1).Value = _
"; No." & Clls.Offset(, -4) & "-(" & Clls.Offset(, -1).Value & "):" & 24
[I65500].End(xlUp).Offset(1).Value = 24
Ton = Ton - 24
If Ton < 24 Then
sCTiet = "; No." & Clls.Offset(, -4) _
& "-(" & Clls.Offset(, -1).Value & "):" & Ton
SoCuoi = Ton: SoLg = Ton
Exit Do
End If
Loop
End If: End If: End If
Next Clls
End Sub
Sub Packing()
Dim Tong As Integer, STT As Integer, Detail As String
Range("F2:F65536,H2:J65536").ClearContents
Range([E2], [E65536].End(xlUp)).Copy [F2]
MsgBox Detail
STT = 1
Set Rng = [E2]
GPE1:
Tong = Tong + Rng.Value
Detail = Detail & "No." & Rng.Offset(, -4).Text & "-(" & Rng.Offset(, -1) & "): " & Application.WorksheetFunction.Min(24 - Tong + Rng.Value, Rng.Value) & "; "
If Tong < 24 And Rng.Row < [E65536].End(xlUp).Row Then
Set Rng = Rng.Offset(1)
GoTo GPE1
ElseIf Tong >= 24 Then
Cells(STT + 1, 9).Value = Left(Detail, Len(Detail) - 2)
Cells(STT + 1, 8).Value = STT
Cells(STT + 1, 10).Value = 24
STT = STT + 1
Rng.Value = Tong - 24
Tong = 0
Detail = ""
GoTo GPE1
ElseIf Tong = 0 And Rng.Row = [E65536].End(xlUp).Row Then
GoTo GPE2
ElseIf Tong <= 24 And (Rng.Row = [E65536].End(xlUp).Row) Then
Cells(STT + 1, 9).Value = Detail & "Missing: " & (24 - Tong)
Cells(STT + 1, 8).Value = STT
Cells(STT + 1, 10).Value = Tong
End If
GPE2:
Range([F2], [F65536].End(xlUp)).Copy [E2]
[F:F].ClearContents
End Sub
Code của Bác Sa và HuuThang đều cho kết quả tốt. Nhưng Code của Bác Sa khi chạy nó không xóa dự liệu mà chép nối xuống phía dưới và xóa mất dòng tiêu đề.
Đã text trường hợp này nhưng không thấy sai?! Bác kiểm tra lại xem.E rằng chúng ta còn phải tiếp tục với đứa con tinh thần của mình:
Khi các ô từ E2:E5 nhận các trị {12,12,48,0} thì còn sai kết quả đó! Nhưng của mỗi người sai 1 vẻ khác nhau!