Đánh số TT thùng cho Packing list

Liên hệ QC
Tham gia
25/9/09
Bài viết
1,573
Được thích
1,278
Giới tính
Nam
Nghề nghiệp
Thợ hồ.
Cho em hỏi là làm sao để tạo Packing list như file đính kèm.
Vd: Mã hàng 1 có số lượng là 392 cái, qui định đóng 1 thùng cho mã hàng này là 36 cái / thùng
392 cái/36 cái = 10 thùng nguyên + 1 thùng lẻ 32 cái (Thùng riêng này phải đóng riêng)
Em xin cám ơn
 

File đính kèm

Upvote 0
Macro bạn cần đây!

Mã:
Option Explicit
Sub PackingList()
 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 = SoThg
      .Offset(, 4).Value = Clls.Offset(, 2).Value
      
      If Clls.Row = 3 Then
         .Value = 1
         .Offset(, 1).Value = SoThg
         .Offset(, 3).Value = Clls.Offset(, 2).Value * .Offset(, 1).Value
         If Clls.Offset(, 1).Value Mod Clls.Offset(, 2).Value <> 0 Then
         GoTo GPE
         End If
      ElseIf Clls.Row > 3 Then
         .Value = .Offset(-1, 1).Value + 1
         .Offset(, 1).Value = .Value + SoThg - 1
         .Offset(, 3).Value = Clls.Offset(, 2).Value * (.Offset(, 1).Value - .Value + 1)
         If Clls.Offset(, 1).Value Mod Clls.Offset(, 2).Value <> 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
 
Lần chỉnh sửa cuối:
Upvote 0
Chào anh SA_DQ
Em copy về sao lại có lỗi như thế này hả anh?
loi.JPG
 
Upvote 0
Cám ơn anh!
Đoạn code cũ và mới của anh khác nhau mỗi dấu "\"
Cũ:
PHP:
SoThg = Clls.Offset(, 1).Value  Clls.Offset(, 2).Value
mới:
PHP:
SoThg = Clls.Offset(, 1).Value \ Clls.Offset(, 2).Value
ồ hay nhỉ khi em copy code mới của anh đưa vào thì đâu mất dấu "\"
SoThg = Clls.Offset(, 1).Value \ Clls.Offset(, 2).Value
HTML:
SoThg = Clls.Offset(, 1).Value \ Clls.Offset(, 2).Value
Tìm ra rồi!
PHP Nó không nhận dấu"\" còn
HTML:
 thì nhận!
Mọi người nên lưu ý vấn đề này!
 
Lần chỉnh sửa cuối:
Upvote 0
Bạn thử dùng công thức trong file xem có được không nhé!
 

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
Xin MDs/SMODs gộp bài giúp; Rất cảm ơn!

Cám ơn anh nhiều về đoạn code trên,

Qua sử dụng em thấy nó còn 1 vấn đề như sau:
Khi Cột số lượng có số lượng nhỏ hơn số lượng cái/thùng thì nó cho ra kết quả là 0 Carton, và số TT là 0
Anh xem lại giúp em nha.
Cám ơn anh.
 
Upvote 0
Cám ơn anh nhiều về đoạn code trên,

Qua sử dụng em thấy nó còn 1 vấn đề như sau:
Khi Cột số lượng có số lượng nhỏ hơn số lượng cái/thùng thì nó cho ra kết quả là 0 Carton, và số TT là 0
Anh xem lại giúp em nha.
Cám ơn anh.
Test code này thử xem:
PHP:
Sub GPE()
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
Dim Tong As Long
[E3:J65536].ClearContents
For Each cll In Range([B3], [B65536].End(xlUp))
If cll.Value / cll.Offset(, 1).Value >= 1 Then
    With [E65536].End(xlUp).Offset(1)
        .Value = Tong + 1
        .Offset(, 1).Value = Tong + Int(cll.Value / cll.Offset(, 1).Value)
        .Offset(, 2).Value = cll.Offset(, -1).Value
        .Offset(, 3).Value = cll.Offset(, 1) * (.Offset(, 1).Value - .Value + 1)
        .Offset(, 4).Value = cll.Offset(, 1).Value
        .Offset(, 5).Value = (.Offset(, 1).Value - .Value + 1)
    End With
End If
Tong = Tong + Application.WorksheetFunction.RoundUp(cll.Value / cll.Offset(, 1).Value, 0)
If cll.Value Mod cll.Offset(, 1).Value <> 0 Then
    With [E65536].End(xlUp).Offset(1)
        .Resize(, 2).Value = Tong
        .Offset(, 2).Value = cll.Offset(, -1).Value
        .Offset(, 3).Resize(, 2).Value = cll.Value Mod cll.Offset(, 1).Value
        .Offset(, 5).Value = 1
    End With
End If
Next
Application.ScreenUpdating = True
Application.Calculation = xlCalculationAutomatic
End Sub
 

File đính kèm

Upvote 0
Những chổ có tô màu trong thẻ [ PHP]..[/php] là thay cũ hay bổ sung.

Qua sử dụng em thấy nó còn 1 vấn đề như sau:
Khi Cột số lượng có số lượng nhỏ hơn số lượng cái/thùng thì nó cho ra kết quả là 0 Carton, và số TT là 0
Anh xem lại giúp em nha.
Cám ơn anh.
Cũng tại bạn ban đầu không đưa trường hợp này lên trong file ví dụ; Cũng có nghĩa là ví dự của bạn chưa đại diện cho tất thẩy các trường hợp; Mà các trường hợp đó chỉ có bạn mới rõ hơn chúng tôi thôi!

Bạn lấy cái này & chép đè lên xem sao:
Mã:
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
 
Chỉnh sửa lần cuối bởi điều hành viên:
Upvote 0
Anh ơi sau khi chép vèo dòng sau hiện màu đỏ:

SoThg = Clls.Offset(, 1).Value Clls.Offset(, 2).Value

Thôi chết mình rồi; Tại mình xài cú fáp [PHP ] . . . .[/PHP] nên nó nuốt mất toán tử "\" của mình

Xin lỗi bạn nha & xem lại cú fáp mình đã sửa xem sao!
 
Upvote 0
Thôi chết mình rồi; Tại mình xài cú fáp [PHP ] . . . .[/PHP] nên nó nuốt mất toán tử "\" của mình

Xin lỗi bạn nha & xem lại cú fáp mình đã sửa xem sao!
Anh ơi còn 1 cái nữa nhờ anh giúp luôn là khi mình chạy code lần 2 trở đi thì dòng đầu của KQ nó vẫn còn
 
Upvote 0
khi mình chạy code lần 2 trở đi thì dòng đầu của KQ nó vẫn còn
[d2].Resize([d3].CurrentRegion.Rows.Count, 6).Offset(1).ClearContents

Câu lệnh này đảm bảo xóa dữ liệu trong 6 cột kể từ D3 trở xuống mà;
Cũng còn 1 ngoại lệ là trước khi chạy macro ta lại dùng tay xóa vùng từ D3:I1 (Mà dòng 12 của vùng này trở đi vẫn còn dữ liệu). Lúc ầy macro sẽ chép tiếp xuống dưới dòng có dữ liệu bắt đầu từ cột D trở đi.
(Chúng ta đang đề cập đến trướng hợp từ A3:C10 có dữ liệu như file ví dụ đó nha.)
 
Upvote 0
Web KT

Bài viết mới nhất

Back
Top Bottom