Xin code tự động tách copy thêm dòng

Liên hệ QC

lqk

Thành viên mới
Tham gia
20/5/21
Bài viết
11
Được thích
0
Các anh chị ơi
Em có ca này căng quá nhờ các cao nhân chỉ giáo. Em có 1 file excel đính kèm
Em muốn copy và chèn thêm số dòng tương ứng với số lượng xe yêu cầu và sau khi tách thì số lượng xe yêu cầu sẽ trả về 1.Volume thì chia đều cho mỗi xe
Có nghĩa là cứ 1 xe yêu cầu thì có 1 dòng, 10 xe thì 10 dòng mỗi dòng 1 xe.Volume chia đều cho các xe đó. Nhờ các anh chị cao nhân chỉ giúp em với.
Chứ làm manual ngồi copy , insert , paste thì thực sự mất thời gian quá các anh chị ạ. Nhờ các anh chị hỗ trợ giúp
 

File đính kèm

  • Kế hoạch chia xe.xlsx
    19.1 KB · Đọc: 2
Lần chỉnh sửa cuối:
Hi các anh chị.
Em có case này căng quá nhờ các cao nhân chỉ giáo. Em có 1 file như trên hình.
Em muốn copy và chèn thêm số dòng tương ứng với số lượng xe yêu cầu và sau khi tách thì số lượng xe yêu cầu sẽ trả về 1.Volume thì chia đều cho mỗi xe
Có nghĩa là cứ 1 xe yêu cầu thì có 1 dòng, 10 xe thì 10 dòng mỗi dòng 1 xe.Volume chia đều cho các xe đó. Nhờ các anh chị cao nhân chỉ giúp em với.
Chứ làm manual ngồi copy , insert , paste thì thực sự mất time quá các anh chị ạ
View attachment 259105
Ca nầy căng quá trời căng, không ai giúp được do:
1/ Vi phạm nội quy diễn đàn, đọc lại nội quy và chỉnh lại bài viết
2/ Code VBA không chạy được trên file ảnh, gởi file excel
 
Upvote 0
Kết quả của macro này có ở bên dưới:

PHP:
Sub ThemDongTheo2DieuKien()
 Dim Rws As Long, J As Long, W As Long, SoLgXe As Integer, TKLg As Double, Xe As Byte, Col As Integer
 Dim WF As Object
 
 Rws = [I2].CurrentRegion.Rows.Count
 Set WF = Application.WorksheetFunction
 SoLgXe = WF.Sum([J3].Resize(Rws))
 ReDim Arr(1 To 9 + SoLgXe, 1 To 10)
 [L3].Resize(SoLgXe + 13, 11).ClearContents
 
 For J = 3 To Rws
    TKLg = Cells(J, "H").Value
    SoLgXe = Cells(J, "J").Value
    For Xe = 1 To SoLgXe
        W = W + 1:                   Arr(W, 1) = W
        For Col = 1 To 7
            Arr(W, Col + 1) = Cells(J, Col).Value
        Next Col
        Arr(W, 10) = Cells(J, "I").Value
        Arr(W, 9) = TKLg / SoLgXe
    Next Xe
 Next J
 [L3].Resize(W, 10).Value = Arr()
 
End Sub



NgàyMã KHC03Địa chỉDVTKênhCtiKhối lượngC09Xe YC$L$1
12345678910
2/13/2021​
TLP00TUKgHiện đạiGPE.COM
13,794​
B13
1​
1​
2/13/2021​
TLP00TUKgHiện đạiGPE.COM
13794​
B13
2/25/2021​
NVM00BHKgHiện đạiGPE.COM
12,247​
2​
2​
2/25/2021​
NVM00BHKgHiện đạiGPE.COM
6123.5​
3/9/2021​
HCQ00APKgHiện đạiGPE.COM
9,226​
USA
5​
3​
2/25/2021​
NVM00BHKgHiện đạiGPE.COM
6123.5​
3/21/2021​
TMH00TDMKgTruyền thốngGPE.COM
24,877​
3​
4​
3/9/2021​
HCQ00APKgHiện đạiGPE.COM
1845.2​
USA
4/2/2021​
BXT00KgTruyền thốngGPE.COM
20,243​
Tàu
10​
5​
3/9/2021​
HCQ00APKgHiện đạiGPE.COM
1845.2​
USA
4/14/2021​
LTT00GVKgTruyền thốngGPE.COM
14,041​
1​
6​
3/9/2021​
HCQ00APKgHiện đạiGPE.COM
1845.2​
USA
4/26/2021​
NVH00HMKgHiện đạiGPE.COM
5,739​
Ô nhiễm
3​
7​
3/9/2021​
HCQ00APKgHiện đạiGPE.COM
1845.2​
USA
 
Upvote 0
Nếu đơn vị tính của hàng hóa không phải khối lượng mà là lô, thùng, hộp,. . . (Không xé lẽ cho đều các xe được) thì xài macro này:
PHP:
Sub ThemDongTheo2DieuKien()
 Dim Rws As Long, J As Long, W As Long, SoLgXe As Integer, TKLg As Double
 Dim WF As Object, Xe As Byte, Col As Integer, ConLai As Double
 
 Rws = [I2].CurrentRegion.Rows.Count
 Set WF = Application.WorksheetFunction
 SoLgXe = WF.Sum([J3].Resize(Rws))
 ReDim Arr(1 To 9 + SoLgXe, 1 To 10)
 [L3].Resize(SoLgXe + 9, 11).ClearContents
 
 For J = 3 To Rws
    TKLg = Cells(J, "H").Value
    SoLgXe = Cells(J, "J").Value
    For Xe = 1 To SoLgXe
        W = W + 1:                          Arr(W, 1) = W
        For Col = 1 To 7
            Arr(W, Col + 1) = Cells(J, Col).Value
        Next Col
        Arr(W, 10) = Cells(J, "I").Value
        If Xe < SoLgXe Then
            Arr(W, 9) = TKLg \ SoLgXe
            ConLai = ConLai + Arr(W, 9)
        Else
            Arr(W, 9) = TKLg - ConLai:       ConLai = 0
        End If
    Next Xe
 Next J
 [L3].Resize(W, 10).Value = Arr()
End Sub
 
Lần chỉnh sửa cuối:
Upvote 0
Kết quả của macro này có ở bên dưới:

PHP:
Sub ThemDongTheo2DieuKien()
 Dim Rws As Long, J As Long, W As Long, SoLgXe As Integer, TKLg As Double, Xe As Byte, Col As Integer
 Dim WF As Object
 
 Rws = [I2].CurrentRegion.Rows.Count
 Set WF = Application.WorksheetFunction
 SoLgXe = WF.Sum([J3].Resize(Rws))
 ReDim Arr(1 To 9 + SoLgXe, 1 To 10)
 [L3].Resize(SoLgXe + 13, 11).ClearContents
 
 For J = 3 To Rws
    TKLg = Cells(J, "H").Value
    SoLgXe = Cells(J, "J").Value
    For Xe = 1 To SoLgXe
        W = W + 1:                   Arr(W, 1) = W
        For Col = 1 To 7
            Arr(W, Col + 1) = Cells(J, Col).Value
        Next Col
        Arr(W, 10) = Cells(J, "I").Value
        Arr(W, 9) = TKLg / SoLgXe
    Next Xe
 Next J
 [L3].Resize(W, 10).Value = Arr()
 
End Sub



NgàyMã KHC03Địa chỉDVTKênhCtiKhối lượngC09Xe YC$L$1
12345678910
2/13/2021​
TLP00TUKgHiện đạiGPE.COM
13,794​
B13
1​
1​
2/13/2021​
TLP00TUKgHiện đạiGPE.COM
13794​
B13
2/25/2021​
NVM00BHKgHiện đạiGPE.COM
12,247​
2​
2​
2/25/2021​
NVM00BHKgHiện đạiGPE.COM
6123.5​
3/9/2021​
HCQ00APKgHiện đạiGPE.COM
9,226​
USA
5​
3​
2/25/2021​
NVM00BHKgHiện đạiGPE.COM
6123.5​
3/21/2021​
TMH00TDMKgTruyền thốngGPE.COM
24,877​
3​
4​
3/9/2021​
HCQ00APKgHiện đạiGPE.COM
1845.2​
USA
4/2/2021​
BXT00KgTruyền thốngGPE.COM
20,243​
Tàu
10​
5​
3/9/2021​
HCQ00APKgHiện đạiGPE.COM
1845.2​
USA
4/14/2021​
LTT00GVKgTruyền thốngGPE.COM
14,041​
1​
6​
3/9/2021​
HCQ00APKgHiện đạiGPE.COM
1845.2​
USA
4/26/2021​
NVH00HMKgHiện đạiGPE.COM
5,739​
Ô nhiễm
3​
7​
3/9/2021​
HCQ00APKgHiện đạiGPE.COM
1845.2​
USA
Dạ , cảm ơn anh, nhưng sao em chạy không được anh ơi, em có gửi kèm file, nhờ a xem giúp ạ
Bài đã được tự động gộp:

Dạ , cảm ơn anh, nhưng sao em chạy không được anh ơi, em có gửi kèm file, nhờ a xem giúp ạ
 

File đính kèm

  • Kế hoạch chia xe.xlsx
    19.1 KB · Đọc: 5
Upvote 0
Lý ra bạn phải gởi file lên từ đầu; Giờ thì tạm biệt bạn!@
 
Upvote 0
Em rằng bạn chưa chỉnh lại bài viết cho phù hợp Nội quy thì chưa ai giúp tiếp đâu.
mình mới tham gia nên chưa biết nội dung bài viết của mình bị vi phạm nội quy đọc mà vẫng không hiểu. Mong bạn chỉ giúp mình được không ạ.
Bài đã được tự động gộp:

Lý ra bạn phải gởi file lên từ đầu; Giờ thì tạm biệt bạn!@
Cảm ơn anh đã hỗ trợ ạ. Anh có thể giúp em cho em biết em vi phạm nội quy gì không ạ. Để em rút kinh nghiệm.
 
Upvote 0
Thử:
Mã:
Sub Macro1()
Dim lastRow As Long
Dim i As Long
Dim soXe As Long
Dim tmp As Double
Application.ScreenUpdating = False
With Sheets("Sheet1")
    lastRow = .Range("A" & Rows.Count).End(xlUp).Row
    For i = lastRow To 2 Step -1
        If .Range("J" & i).Value > 0 Then
            soXe = Application.RoundUp(.Range("I" & i).Value / .Range("j" & i).Value, 0)
        End If
        
        If soXe > 1 Then
            tmp = .Range("I" & i).Value / soXe
            .Range("A" & i).Offset(1).Resize(soXe - 1, 11).Insert
            .Range("A" & i).Offset(1).Resize(soXe - 1, 11).Value = .Range("A" & i).Resize(1, 11).Value
            .Range("I" & i).Resize(soXe).Value = tmp
            .Range("K" & i).Resize(soXe).Value = 1
        Else
            .Range("K" & i) = soXe
        End If
    Next i
End With
Application.ScreenUpdating = False
End Sub
 
Upvote 0
Thử:
Mã:
Sub Macro1()
Dim lastRow As Long
Dim i As Long
Dim soXe As Long
Dim tmp As Double
Application.ScreenUpdating = False
With Sheets("Sheet1")
    lastRow = .Range("A" & Rows.Count).End(xlUp).Row
    For i = lastRow To 2 Step -1
        If .Range("J" & i).Value > 0 Then
            soXe = Application.RoundUp(.Range("I" & i).Value / .Range("j" & i).Value, 0)
        End If
      
        If soXe > 1 Then
            tmp = .Range("I" & i).Value / soXe
            .Range("A" & i).Offset(1).Resize(soXe - 1, 11).Insert
            .Range("A" & i).Offset(1).Resize(soXe - 1, 11).Value = .Range("A" & i).Resize(1, 11).Value
            .Range("I" & i).Resize(soXe).Value = tmp
            .Range("K" & i).Resize(soXe).Value = 1
        Else
            .Range("K" & i) = soXe
        End If
    Next i
End With
Application.ScreenUpdating = False
End Sub
Dạ cảm ơn anh, thành công rồi ạ
 
Upvote 0
Thử:
Mã:
Sub Macro1()
Dim lastRow As Long
Dim i As Long
Dim soXe As Long
Dim tmp As Double
Application.ScreenUpdating = False
With Sheets("Sheet1")
    lastRow = .Range("A" & Rows.Count).End(xlUp).Row
    For i = lastRow To 2 Step -1
        If .Range("J" & i).Value > 0 Then
            soXe = Application.RoundUp(.Range("I" & i).Value / .Range("j" & i).Value, 0)
        End If
       
        If soXe > 1 Then
            tmp = .Range("I" & i).Value / soXe
            .Range("A" & i).Offset(1).Resize(soXe - 1, 11).Insert
            .Range("A" & i).Offset(1).Resize(soXe - 1, 11).Value = .Range("A" & i).Resize(1, 11).Value
            .Range("I" & i).Resize(soXe).Value = tmp
            .Range("K" & i).Resize(soXe).Value = 1
        Else
            .Range("K" & i) = soXe
        End If
    Next i
End With
Application.ScreenUpdating = False
End Sub
Anh oi, file như em gửi thì đúng, nhưng khi bỏ thêm dữ liệu vào thì khi cộng lại tổng số xe không còn đúng nữa ạ. Ví dụ như ban đầu file em gửi là 83 xe, sau khi tách sẽ ra 83 dòng. Nhưng khi em bỏ dữ liệu mới vào với 85 dòng, 109 xe thì code lại tách thành 119 dòng ( 119 xe ). Em đọc mà ko biết lỗi nằm ở đâu. Anh kiểm tra fix giúp được không ạ
Bài đã được tự động gộp:

Dạ cảm ơn anh, thành công rồi ạ
Anh oi, file như em gửi thì đúng, nhưng khi bỏ thêm dữ liệu vào thì khi cộng lại tổng số xe không còn đúng nữa ạ. Ví dụ như ban đầu file em gửi là 83 xe, sau khi tách sẽ ra 83 dòng. Nhưng khi em bỏ dữ liệu mới vào với 85 dòng, 109 xe thì code lại tách thành 119 dòng ( 119 xe ). Em đọc mà ko biết lỗi nằm ở đâu. Anh kiểm tra fix giúp được không ạ
 

File đính kèm

  • Kế hoạch chia xe.xlsm
    30.4 KB · Đọc: 8
Lần chỉnh sửa cuối:
Upvote 0
Anh oi, file như em gửi thì đúng, nhưng khi bỏ thêm dữ liệu vào thì khi cộng lại tổng số xe không còn đúng nữa ạ. Ví dụ như ban đầu file em gửi là 83 xe, sau khi tách sẽ ra 83 dòng. Nhưng khi em bỏ dữ liệu mới vào với 85 dòng, 109 xe thì code lại tách thành 119 dòng ( 119 xe ). Em đọc mà ko biết lỗi nằm ở đâu. Anh kiểm tra fix giúp được không ạ
File cũ, công thức tính xe:

=IF(A2="","",IF(I2/J2<1,1,ROUNDUP(I2/J2,0)))

File mới, công thức tính xe::

=IF(I2="","",IF(I2<J2,1,ROUND(I2/J2,0))

Só xe của 2 cách tính khác nhau.
 
Upvote 0
Nói chung là chủ bài đăng đang thử tài các bạn đó, mại zô!
 
Upvote 0
Web KT

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

Back
Top Bottom