Viết lại code ngắn để dễ sữa (1 người xem)

  • Thread starter Thread starter lhthai
  • Ngày gửi Ngày gửi

Người dùng đang xem chủ đề này

lhthai

Thành viên thường trực
Tham gia
1/9/07
Bài viết
309
Được thích
27
Chào các Anh
Hiện nay em có macro chạy và chia số lượng đóng gói.
Nay muốn các anh điều chỉnh code cho ngắn để tiện sau này chèn thêm cột dễ sữa chữa
Mã:
Sub Delivery()
Dim i As Integer, j As Integer, box As Integer, question As Integer
Dim total As Integer, s As Integer, os As Integer
Dim tensheet As String
On Error GoTo quit
question = MsgBox("BAN MUON THUC HIEN KHONG?", vbOKCancel, "tittle")
If question = 1 Then


i = 11
tensheet = InputBox("NHAP TEN SHEET:", "Request", "")
Do
    If Worksheets(tensheet).Cells(i, 15) <> "" Then
        box = Worksheets(tensheet).Cells(i, 13) / Worksheets(tensheet).Cells(i, 14)
        total = Worksheets(tensheet).Cells(i, 13)
        s = Worksheets(tensheet).Cells(i, 15)
                
        If s = total Then
          Worksheets(tensheet).Cells(i, 10) = Worksheets(tensheet).Cells(i, 10) & "S"
          Worksheets(tensheet).Cells(i, 15) = ""
        Else
            os = total - s
            If os Mod box = 0 Then
              Worksheets(tensheet).Cells(i, 13) = os
              Worksheets(tensheet).Cells(i, 14) = os / box
              Worksheets(tensheet).Cells(i, 15) = ""
               Rows(i + 1).Select
               Selection.Insert Shift:=xlDown
            
              Worksheets(tensheet).Cells(i + 1, 2) = Worksheets(tensheet).Cells(i, 2)
              Worksheets(tensheet).Cells(i + 1, 3) = Worksheets(tensheet).Cells(i, 3)
              Worksheets(tensheet).Cells(i + 1, 4) = Worksheets(tensheet).Cells(i, 4)
              Worksheets(tensheet).Cells(i + 1, 5) = Worksheets(tensheet).Cells(i, 5)
              Worksheets(tensheet).Cells(i + 1, 6) = Worksheets(tensheet).Cells(i, 6)
              Worksheets(tensheet).Cells(i + 1, 7) = Worksheets(tensheet).Cells(i, 7)
              Worksheets(tensheet).Cells(i + 1, 8) = Worksheets(tensheet).Cells(i, 8)
              Worksheets(tensheet).Cells(i + 1, 9) = Worksheets(tensheet).Cells(i, 9)
              Worksheets(tensheet).Cells(i + 1, 10) = Worksheets(tensheet).Cells(i, 10) & "S"
              Worksheets(tensheet).Cells(i + 1, 11) = Worksheets(tensheet).Cells(i, 11)
              Worksheets(tensheet).Cells(i + 1, 12) = Worksheets(tensheet).Cells(i, 12)
              Worksheets(tensheet).Cells(i + 1, 13) = s
              Worksheets(tensheet).Cells(i + 1, 14) = s / box
               i = i + 1
                       
            ElseIf os < box Then
              Worksheets(tensheet).Cells(i, 13) = os
              Worksheets(tensheet).Cells(i, 14) = "1"
              Worksheets(tensheet).Cells(i, 15) = ""
               If s < box Then
                Rows(i + 1).Select
                Selection.Insert Shift:=xlDown
               
               Worksheets(tensheet).Cells(i + 1, 2) = Worksheets(tensheet).Cells(i, 2)
               Worksheets(tensheet).Cells(i + 1, 3) = Worksheets(tensheet).Cells(i, 3)
               Worksheets(tensheet).Cells(i + 1, 4) = Worksheets(tensheet).Cells(i, 4)
               Worksheets(tensheet).Cells(i + 1, 5) = Worksheets(tensheet).Cells(i, 5)
               Worksheets(tensheet).Cells(i + 1, 6) = Worksheets(tensheet).Cells(i, 6)
               Worksheets(tensheet).Cells(i + 1, 7) = Worksheets(tensheet).Cells(i, 7)
               Worksheets(tensheet).Cells(i + 1, 8) = Worksheets(tensheet).Cells(i, 8)
               Worksheets(tensheet).Cells(i + 1, 9) = Worksheets(tensheet).Cells(i, 9)
               Worksheets(tensheet).Cells(i + 1, 10) = Worksheets(tensheet).Cells(i, 10) & "S"
               Worksheets(tensheet).Cells(i + 1, 11) = Worksheets(tensheet).Cells(i, 11)
               Worksheets(tensheet).Cells(i + 1, 12) = Worksheets(tensheet).Cells(i, 12)
               Worksheets(tensheet).Cells(i + 1, 13) = s
               Worksheets(tensheet).Cells(i + 1, 14) = ""
                i = i + 1
               ElseIf s > box Then
                    Rows(i + 1).Select
                    Selection.Insert Shift:=xlDown
               
                   Worksheets(tensheet).Cells(i + 1, 2) = Worksheets(tensheet).Cells(i, 2)
                   Worksheets(tensheet).Cells(i + 1, 3) = Worksheets(tensheet).Cells(i, 3)
                   Worksheets(tensheet).Cells(i + 1, 4) = Worksheets(tensheet).Cells(i, 4)
                   Worksheets(tensheet).Cells(i + 1, 5) = Worksheets(tensheet).Cells(i, 5)
                   Worksheets(tensheet).Cells(i + 1, 6) = Worksheets(tensheet).Cells(i, 6)
                   Worksheets(tensheet).Cells(i + 1, 7) = Worksheets(tensheet).Cells(i, 7)
                   Worksheets(tensheet).Cells(i + 1, 8) = Worksheets(tensheet).Cells(i, 8)
                   Worksheets(tensheet).Cells(i + 1, 9) = Worksheets(tensheet).Cells(i, 9)
                   Worksheets(tensheet).Cells(i + 1, 10) = Worksheets(tensheet).Cells(i, 10) & "S"
                   Worksheets(tensheet).Cells(i + 1, 11) = Worksheets(tensheet).Cells(i, 11)
                   Worksheets(tensheet).Cells(i + 1, 12) = Worksheets(tensheet).Cells(i, 12)
                   Worksheets(tensheet).Cells(i + 1, 13) = s Mod box
                   Worksheets(tensheet).Cells(i + 1, 14) = ""
                    i = i + 1
                    
                    Rows(i + 1).Select
                    Selection.Insert Shift:=xlDown
                   Worksheets(tensheet).Cells(i + 1, 2) = Worksheets(tensheet).Cells(i, 2)
                   Worksheets(tensheet).Cells(i + 1, 3) = Worksheets(tensheet).Cells(i, 3)
                   Worksheets(tensheet).Cells(i + 1, 4) = Worksheets(tensheet).Cells(i, 4)
                   Worksheets(tensheet).Cells(i + 1, 5) = Worksheets(tensheet).Cells(i, 5)
                   Worksheets(tensheet).Cells(i + 1, 6) = Worksheets(tensheet).Cells(i, 6)
                   Worksheets(tensheet).Cells(i + 1, 7) = Worksheets(tensheet).Cells(i, 7)
                   Worksheets(tensheet).Cells(i + 1, 8) = Worksheets(tensheet).Cells(i, 8)
                   Worksheets(tensheet).Cells(i + 1, 9) = Worksheets(tensheet).Cells(i, 9)
                   Worksheets(tensheet).Cells(i + 1, 10) = Worksheets(tensheet).Cells(i, 10)
                   Worksheets(tensheet).Cells(i + 1, 11) = Worksheets(tensheet).Cells(i, 11)
                   Worksheets(tensheet).Cells(i + 1, 12) = Worksheets(tensheet).Cells(i, 12)
                   Worksheets(tensheet).Cells(i + 1, 13) = box * Int(s / box)
                   Worksheets(tensheet).Cells(i + 1, 14) = Int(s / box)
                    i = i + 1
               End If
               
            ElseIf os > box Then
              Worksheets(tensheet).Cells(i, 13) = box * Int(os / box)
              Worksheets(tensheet).Cells(i, 14) = Int(os / box)
              Worksheets(tensheet).Cells(i, 15) = ""
               Rows(i + 1).Select
               Selection.Insert Shift:=xlDown
               
               
              Worksheets(tensheet).Cells(i + 1, 2) = Worksheets(tensheet).Cells(i, 2)
              Worksheets(tensheet).Cells(i + 1, 3) = Worksheets(tensheet).Cells(i, 3)
              Worksheets(tensheet).Cells(i + 1, 4) = Worksheets(tensheet).Cells(i, 4)
              Worksheets(tensheet).Cells(i + 1, 5) = Worksheets(tensheet).Cells(i, 5)
              Worksheets(tensheet).Cells(i + 1, 6) = Worksheets(tensheet).Cells(i, 6)
              Worksheets(tensheet).Cells(i + 1, 7) = Worksheets(tensheet).Cells(i, 7)
              Worksheets(tensheet).Cells(i + 1, 8) = Worksheets(tensheet).Cells(i, 8)
              Worksheets(tensheet).Cells(i + 1, 9) = Worksheets(tensheet).Cells(i, 9)
              Worksheets(tensheet).Cells(i + 1, 10) = Worksheets(tensheet).Cells(i, 10)
              Worksheets(tensheet).Cells(i + 1, 11) = Worksheets(tensheet).Cells(i, 11)
              Worksheets(tensheet).Cells(i + 1, 12) = Worksheets(tensheet).Cells(i, 12)
              Worksheets(tensheet).Cells(i + 1, 13) = os Mod box
              Worksheets(tensheet).Cells(i + 1, 14) = "1"
               i = i + 1
               
               If s < box Then
                    Rows(i + 1).Select
                    Selection.Insert Shift:=xlDown
               
                   Worksheets(tensheet).Cells(i + 1, 2) = Worksheets(tensheet).Cells(i, 2)
                   Worksheets(tensheet).Cells(i + 1, 3) = Worksheets(tensheet).Cells(i, 3)
                   Worksheets(tensheet).Cells(i + 1, 4) = Worksheets(tensheet).Cells(i, 4)
                   Worksheets(tensheet).Cells(i + 1, 5) = Worksheets(tensheet).Cells(i, 5)
                   Worksheets(tensheet).Cells(i + 1, 6) = Worksheets(tensheet).Cells(i, 6)
                   Worksheets(tensheet).Cells(i + 1, 7) = Worksheets(tensheet).Cells(i, 7)
                   Worksheets(tensheet).Cells(i + 1, 8) = Worksheets(tensheet).Cells(i, 8)
                   Worksheets(tensheet).Cells(i + 1, 9) = Worksheets(tensheet).Cells(i, 9)
                   Worksheets(tensheet).Cells(i + 1, 10) = Worksheets(tensheet).Cells(i, 10) & "S"
                   Worksheets(tensheet).Cells(i + 1, 11) = Worksheets(tensheet).Cells(i, 11)
                   Worksheets(tensheet).Cells(i + 1, 12) = Worksheets(tensheet).Cells(i, 12)
                   Worksheets(tensheet).Cells(i + 1, 13) = s
                   Worksheets(tensheet).Cells(i + 1, 14) = ""
                    i = i + 1
               ElseIf s > box Then
                    Rows(i + 1).Select
                    Selection.Insert Shift:=xlDown
               
                   Worksheets(tensheet).Cells(i + 1, 2) = Worksheets(tensheet).Cells(i, 2)
                   Worksheets(tensheet).Cells(i + 1, 3) = Worksheets(tensheet).Cells(i, 3)
                   Worksheets(tensheet).Cells(i + 1, 4) = Worksheets(tensheet).Cells(i, 4)
                   Worksheets(tensheet).Cells(i + 1, 5) = Worksheets(tensheet).Cells(i, 5)
                   Worksheets(tensheet).Cells(i + 1, 6) = Worksheets(tensheet).Cells(i, 6)
                   Worksheets(tensheet).Cells(i + 1, 7) = Worksheets(tensheet).Cells(i, 7)
                   Worksheets(tensheet).Cells(i + 1, 8) = Worksheets(tensheet).Cells(i, 8)
                   Worksheets(tensheet).Cells(i + 1, 9) = Worksheets(tensheet).Cells(i, 9)
                   Worksheets(tensheet).Cells(i + 1, 10) = Worksheets(tensheet).Cells(i, 10) & "S"
                   Worksheets(tensheet).Cells(i + 1, 11) = Worksheets(tensheet).Cells(i, 11)
                   Worksheets(tensheet).Cells(i + 1, 12) = Worksheets(tensheet).Cells(i, 12)
                   Worksheets(tensheet).Cells(i + 1, 13) = s Mod box
                   Worksheets(tensheet).Cells(i + 1, 14) = ""
                    i = i + 1
                    
                    Rows(i + 1).Select
                    Selection.Insert Shift:=xlDown
                   Worksheets(tensheet).Cells(i + 1, 2) = Worksheets(tensheet).Cells(i, 2)
                   Worksheets(tensheet).Cells(i + 1, 3) = Worksheets(tensheet).Cells(i, 3)
                   Worksheets(tensheet).Cells(i + 1, 4) = Worksheets(tensheet).Cells(i, 4)
                   Worksheets(tensheet).Cells(i + 1, 5) = Worksheets(tensheet).Cells(i, 5)
                   Worksheets(tensheet).Cells(i + 1, 6) = Worksheets(tensheet).Cells(i, 6)
                   Worksheets(tensheet).Cells(i + 1, 7) = Worksheets(tensheet).Cells(i, 7)
                   Worksheets(tensheet).Cells(i + 1, 8) = Worksheets(tensheet).Cells(i, 8)
                   Worksheets(tensheet).Cells(i + 1, 9) = Worksheets(tensheet).Cells(i, 9)
                   Worksheets(tensheet).Cells(i + 1, 10) = Worksheets(tensheet).Cells(i, 10)
                   Worksheets(tensheet).Cells(i + 1, 11) = Worksheets(tensheet).Cells(i, 11)
                   Worksheets(tensheet).Cells(i + 1, 12) = Worksheets(tensheet).Cells(i, 12)
                   Worksheets(tensheet).Cells(i + 1, 13) = box * Int(s / box)
                   Worksheets(tensheet).Cells(i + 1, 14) = Int(s / box)
                    i = i + 1
               End If
            
            End If
            
        End If
    End If
i = i + 1
Loop Until Worksheets(tensheet).Cells(i, 2) = ""


j = 0
Do
j = j + 1
Worksheets(tensheet).Cells(j + 10, 1) = j
Loop Until Worksheets(tensheet).Cells(j + 11, 2) = ""
 
MsgBox ("FINISH")
End If
quit:
End Sub
 
- Thêm vòng lặp duyệt từ 2 đến 12
- Thêm With vào cho gọn.
 
Upvote 0
Dùng Ctrl+h đổi tất cả Worksheets(tensheet) thành wsh. Kế đó:

Trước dòng Do, bạn ghi
Dim wsh as worksheet
Set wsh = WorkSheets(tensheet)

Trước dòng MsgBox("FINSHI"), ghi
Set wsh = Nothing

Mục đích lả giảm thiểu cái reference về cái worksheet

Để giảm code, bạn sửa tất cả các cụm này:
wsh.Cells(i + 1, 2) = wsh.Cells(i, 2)
wsh.Cells(i + 1, 3) = wsh.Cells(i, 3)
wsh.Cells(i + 1, 4) = wsh.Cells(i, 4)
wsh.Cells(i + 1, 5) = wsh.Cells(i, 5)
wsh.Cells(i + 1, 6) = wsh.Cells(i, 6)
wsh.Cells(i + 1, 7) = wsh.Cells(i, 7)
wsh.Cells(i + 1, 8) = wsh.Cells(i, 8)
wsh.Cells(i + 1, 9) = wsh.Cells(i, 9)
wsh.Cells(i + 1, 10) = wsh.Cells(i, 10)
wsh.Cells(i + 1, 11) = wsh.Cells(i, 11)
wsh.Cells(i + 1, 12) = wsh.Cells(i, 12)

Thành dòng này:
wsh.Cells(i+1,2).Resize(,11) = wsh.Cells(i,2).Resize(,11).Value

Và các cụm này:
wsh.Cells(i + 1, 2) = wsh.Cells(i, 2)
wsh.Cells(i + 1, 3) = wsh.Cells(i, 3)
wsh.Cells(i + 1, 4) = wsh.Cells(i, 4)
wsh.Cells(i + 1, 5) = wsh.Cells(i, 5)
wsh.Cells(i + 1, 6) = wsh.Cells(i, 6)
wsh.Cells(i + 1, 7) = wsh.Cells(i, 7)
wsh.Cells(i + 1, 8) = wsh.Cells(i, 8)
wsh.Cells(i + 1, 9) = wsh.Cells(i, 9)
wsh.Cells(i + 1, 10) = wsh.Cells(i, 10) & "S"
wsh.Cells(i + 1, 11) = wsh.Cells(i, 11)
wsh.Cells(i + 1, 12) = wsh.Cells(i, 12)

Thành 2 dòng này:
wsh.Cells(i+1,2).Resize(,11) = wsh.Cells(i,2).Resize(,11).Value
wsh.Cells(i + 1, 10) = wsh.Cells(i, 10) & "S"

Muốn giảm thiểu hơn nữa thì phải biết code của bạn làm cái quái gì mới thiết kế lại được.
 
Lần chỉnh sửa cuối:
Upvote 0
Cám ơn bạn đã hướng dẫn mình sẽ tìm hiểu thêm.
 
Upvote 0
Cách của bác Vet Mini cũng hay nhưng lại phiền tạo object và xoá Object , vẫn phải điền tham chiếu dù nó gọn hơn.
Theo mình nên dùng With ... End With
Sau dòng

tensheet=Inputbox("NHAP TEN SHEET:","Request","")

ta thêm dòng

With WorkSheets(tensheet)

Trước dòng

MsgBox "FINISH"

ta thêm dòng

End With

Vậy là trong cả đoạn giữa hai dòng trên ta có thể bỏ tham chiếu mà chỉ cần nhập dấu chấm đầu dòng
Ví dụ:
Worksheets(tensheet).Cells(i + 1, 2) = Worksheets(tensheet).Cells(i, 2)

thành

.Cells(i + 1, 2) = .Cells(i, 2)


Tóm lại, bạn nêu yêu cầu anh em viết lại code cho chứ chạy code này oải quá
 
Lần chỉnh sửa cuối:
Upvote 0
Cách của bác Vet Mini cũng hay nhưng lại phiền tạo object và xoá Object , vẫn phải điền tham chiếu dù nó gọn hơn.
Theo mình nên dùng With ... End With
Sau dòng

tensheet=Inputbox("NHAP TEN SHEET:","Request","")

ta thêm dòng

With WorkSheets(tensheet)

Trước dòng

MsgBox "FINISH"

ta thêm dòng

End With

Vậy là trong cả đoạn giữa hai dòng trên ta có thể bỏ tham chiếu mà chỉ cần nhập dấu chấm đầu dòng
Ví dụ:
Worksheets(tensheet).Cells(i + 1, 2) = Worksheets(tensheet).Cells(i, 2)

thành

.Cells(i + 1, 2) = .Cells(i, 2)

Cám ơn anh sealand nhiều
 
Upvote 0
Bạn cần cẩn thận các dòng Row(i+1).Select, lệnh này làm việc trên sheet hiện thời chứ không phải sheets(tensheet) (có thể đây là chủ định của bạn vì mình không xem file). Theo mình để rút gọn, bạn thêm lệnh
Mã:
Dim sh as worksheet
Set sh=activesheet
sheets(tensheet).activate
Các lệnh ở trong bỏ hết worksheets(tensheet) đi và sửa từng khối lệnh tương tự bác Vetmini
Lệnh Rows(i+1).select và selection.insert sửa thành sh.Rows(i+1).insert shift:=xlDown.
Đến cuối cùng thêm lệnh sh.activate
 
Upvote 0
Với code của bạn mình Modify 1 chút giờ còn thế này, nhưng code này còn nặng nề chậm chạp quá. Nghiên cứu mãi chưa hiểu ý định bạn làm (Lạc vào rừng if của bạn thì khó mà ra được), code nên viết lại cho tốt hơn.
Mã:
Sub Delivery()
Dim i As Integer, j As Integer, box As Integer, question As Integer
Dim total As Integer, s As Integer, os As Integer
On Error GoTo quit
If MsgBox("BAN MUON THUC HIEN KHONG?", vbOKCancel, "tittle") = 1 Then
i = 11
With Worksheets(InputBox("NHAP TEN SHEET:", "Request", ""))
Do
    If .Cells(i, 15) <> "" Then
         total = .Cells(i, 13)
        box = total / .Cells(i, 14)
        s = .Cells(i, 15)
                
        If s = total Then
          .Cells(i, 10) = .Cells(i, 10) & "S"
          .Cells(i, 15) = ""
        Else
            os = total - s
            
            If os Mod box = 0 Then
                            .Cells(i, 13) = os
                            .Cells(i, 14) = os / box
                            .Cells(i, 15) = ""
                            .Cells(i, 1).Resize(, 15).Copy
                            .Cells(i + 1, 1).Resize(, 15).Insert
                            .Cells(i + 1, 10) = .Cells(i + 1, 10) & "S"
                            .Cells(i + 1, 13) = s
                            .Cells(i + 1, 14) = s / box
                             i = i + 1
                      
            ElseIf os < box Then
                            .Cells(i, 13) = os
                            .Cells(i, 14) = "1"
                            .Cells(i, 15) = ""
               If s < box Then
               .Cells(i, 1).Resize(, 15).Copy
               .Cells(i + 1, 1).Resize(, 15).Insert
               .Cells(i + 1, 10) = .Cells(i, 10) & "S"
               .Cells(i + 1, 13) = s
               .Cells(i + 1, 14) = ""
                i = i + 1
               ElseIf s > box Then
                    .Cells(i + 1, 1).Resize(, 15).Copy
                    .Cells(i + 1, 1).Resize(, 15).Insert
                    .Cells(i + 1, 10) = .Cells(i, 10) & "S"
                    .Cells(i + 1, 13) = s Mod box
                    .Cells(i + 1, 14) = ""
                     i = i + 1
                    .Cells(i, 1).Resize(, 15).Copy
                    .Cells(i + 1, 1).Resize(, 15).Insert
                    .Cells(i + 1, 13) = box * Int(s / box)
                    .Cells(i + 1, 14) = Int(s / box)
                    i = i + 1
               End If
               
            ElseIf os > box Then
              .Cells(i, 13) = box * Int(os / box)
              .Cells(i, 14) = Int(os / box)
              .Cells(i, 15) = ""
              .Cells(i, 1).Resize(, 15).Copy
              .Cells(i + 1, 1).Resize(, 15).Insert
              .Cells(i + 1, 13) = os Mod box
              .Cells(i + 1, 14) = "1"
               i = i + 1
               
               If s < box Then
               .Cells(i, 1).Resize(, 15).Copy
              .Cells(i + 1, 1).Resize(, 15).Insert
                   .Cells(i + 1, 10) = .Cells(i, 10) & "S"
                   .Cells(i + 1, 13) = s
                   .Cells(i + 1, 14) = ""
                    i = i + 1
               ElseIf s > box Then
              .Cells(i, 1).Resize(, 15).Copy
              .Cells(i + 1, 1).Resize(, 15).Insert
                   .Cells(i + 1, 10) = .Cells(i, 10) & "S"
                   .Cells(i + 1, 13) = s Mod box
                   .Cells(i + 1, 14) = ""
                    i = i + 1
               .Cells(i, 1).Resize(, 15).Copy
               .Cells(i + 1, 1).Resize(, 15).Insert
               .Cells(i + 1, 13) = box * Int(s / box)
                   .Cells(i + 1, 14) = Int(s / box)
                    i = i + 1
               End If
            
            End If
            
        End If
    End If
i = i + 1
Loop Until .Cells(i, 2) = ""

j = 0
Do
j = j + 1
.Cells(j + 10, 1) = j
Loop Until .Cells(j + 11, 2) = ""
 End With
Application.CutCopyMode = False
MsgBox ("FINISH")
End If
quit:
End Sub
 
Upvote 0
...
phiền tạo object và xoá Object... {1}

Theo mình nên dùng With ... End With {2}
...

{1} Không có object mới nào được tạo ra cả. Chỉ là cách dùng biến để tham chiếu đến object có sẵn trong workbook thôi. Dùng xong rồi thì tháo nó ra. Chỉ khi nào dùng hàm CreateObject hay New thì mới có object được tạo ra.

{2} Trên lý thuyết, dùng With/End With hiệu quả hơn dùng tham chiếu.
Tuy nhiên cách này dễ bị lẫn lộn nếu có nhiều objects trong cùng block. Điển hình là bài này có đề cập đén một vài cái range mà tôi cũng không rõ có nằm trong sheet này hay không.

Thêm nữa, trong yêu cầu của chủ thớt có chỗ "dễ sửa", dùng biến làm tham chiếu là cách dễ sửa nhất.
 
Upvote 0
Với code của bạn mình Modify 1 chút giờ còn thế này, nhưng code này còn nặng nề chậm chạp quá. Nghiên cứu mãi chưa hiểu ý định bạn làm (Lạc vào rừng if của bạn thì khó mà ra được), code nên viết lại cho tốt hơn.
Mã:
Sub Delivery()
Dim i As Integer, j As Integer, box As Integer, question As Integer
Dim total As Integer, s As Integer, os As Integer
On Error GoTo quit
If MsgBox("BAN MUON THUC HIEN KHONG?", vbOKCancel, "tittle") = 1 Then
i = 11
With Worksheets(InputBox("NHAP TEN SHEET:", "Request", ""))
Do
    If .Cells(i, 15) <> "" Then
         total = .Cells(i, 13)
        box = total / .Cells(i, 14)
        s = .Cells(i, 15)
                
        If s = total Then
          .Cells(i, 10) = .Cells(i, 10) & "S"
          .Cells(i, 15) = ""
        Else
            os = total - s
            
            If os Mod box = 0 Then
                            .Cells(i, 13) = os
                            .Cells(i, 14) = os / box
                            .Cells(i, 15) = ""
                            .Cells(i, 1).Resize(, 15).Copy
                            .Cells(i + 1, 1).Resize(, 15).Insert
                            .Cells(i + 1, 10) = .Cells(i + 1, 10) & "S"
                            .Cells(i + 1, 13) = s
                            .Cells(i + 1, 14) = s / box
                             i = i + 1
                      
            ElseIf os < box Then
                            .Cells(i, 13) = os
                            .Cells(i, 14) = "1"
                            .Cells(i, 15) = ""
               If s < box Then
               .Cells(i, 1).Resize(, 15).Copy
               .Cells(i + 1, 1).Resize(, 15).Insert
               .Cells(i + 1, 10) = .Cells(i, 10) & "S"
               .Cells(i + 1, 13) = s
               .Cells(i + 1, 14) = ""
                i = i + 1
               ElseIf s > box Then
                    .Cells(i + 1, 1).Resize(, 15).Copy
                    .Cells(i + 1, 1).Resize(, 15).Insert
                    .Cells(i + 1, 10) = .Cells(i, 10) & "S"
                    .Cells(i + 1, 13) = s Mod box
                    .Cells(i + 1, 14) = ""
                     i = i + 1
                    .Cells(i, 1).Resize(, 15).Copy
                    .Cells(i + 1, 1).Resize(, 15).Insert
                    .Cells(i + 1, 13) = box * Int(s / box)
                    .Cells(i + 1, 14) = Int(s / box)
                    i = i + 1
               End If
               
            ElseIf os > box Then
              .Cells(i, 13) = box * Int(os / box)
              .Cells(i, 14) = Int(os / box)
              .Cells(i, 15) = ""
              .Cells(i, 1).Resize(, 15).Copy
              .Cells(i + 1, 1).Resize(, 15).Insert
              .Cells(i + 1, 13) = os Mod box
              .Cells(i + 1, 14) = "1"
               i = i + 1
               
               If s < box Then
               .Cells(i, 1).Resize(, 15).Copy
              .Cells(i + 1, 1).Resize(, 15).Insert
                   .Cells(i + 1, 10) = .Cells(i, 10) & "S"
                   .Cells(i + 1, 13) = s
                   .Cells(i + 1, 14) = ""
                    i = i + 1
               ElseIf s > box Then
              .Cells(i, 1).Resize(, 15).Copy
              .Cells(i + 1, 1).Resize(, 15).Insert
                   .Cells(i + 1, 10) = .Cells(i, 10) & "S"
                   .Cells(i + 1, 13) = s Mod box
                   .Cells(i + 1, 14) = ""
                    i = i + 1
               .Cells(i, 1).Resize(, 15).Copy
               .Cells(i + 1, 1).Resize(, 15).Insert
               .Cells(i + 1, 13) = box * Int(s / box)
                   .Cells(i + 1, 14) = Int(s / box)
                    i = i + 1
               End If
            
            End If
            
        End If
    End If
i = i + 1
Loop Until .Cells(i, 2) = ""

j = 0
Do
j = j + 1
.Cells(j + 10, 1) = j
Loop Until .Cells(j + 11, 2) = ""
 End With
Application.CutCopyMode = False
MsgBox ("FINISH")
End If
quit:
End Sub
Cám ơn Anh bỏ thời gian chỉnh sữa .
 
Upvote 0

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

Back
Top Bottom