Code chèn, xóa, copy dòng có điều kiện (1 người xem)

Liên hệ QC

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

Tham gia
14/9/12
Bài viết
312
Được thích
68
Nghề nghiệp
VT
Em tìm kiếm trong diễn đàn thấy có rất nhiều bài nhưng chưa thấy bài nào đúng ý. Loay hoay thêm bớt chả xong. Xin gửi các A/C giúp đỡ. Cảm ơn các A/C nhiều.
 

File đính kèm

Lần chỉnh sửa cuối:
Em tìm kiếm trong diễn đàn thấy có rất nhiều bài nhưng chưa thấy bài nào đúng ý. Loay hoay thêm bớt chả xong. Xin gửi các A/C giúp đỡ. Cảm ơn các A/C nhiều.
PHP:
Sub cactheloai()
Application.ScreenUpdating = False
Dim lr As Long, r As Long, N As Byte
lr = Sheet1.Range("A65000").End(xlUp).Row
With Sheet1
For r = lr To 8 Step -1
    N = .Range("N" & r).Value
    If N = 3 Then .Rows(r).Delete
    If N = 1 Then
        .Rows(r + 1).Insert Shift:=xlDown
        .Range("D" & r & ":K" & r + 1).FillDown
    End If
    If N = 0 Then
        .Rows(r + 1).Insert Shift:=xlDown
        .Rows(r + 1).Insert Shift:=xlDown
        .Range("D" & r & ":K" & r + 2).FillDown
    End If
Next
End With
Application.ScreenUpdating = True
End Sub
 
Upvote 0
Thêm cho bạn 1 cách để tham khảo nè:
PHP:
Option Explicit
Sub ThemXoaDong()
 Dim Rws As Long, J As Long, Dg As Integer, Col As Byte, W As Long, Cot As Byte
 Dim Arr()
 
 Rws = [b8].CurrentRegion.Rows.Count
 J = Application.WorksheetFunction.Sum([N8].Resize(Rws))
 ReDim dArr(1 To Rws + J, 1 To 14)
 Arr() = [A8].Resize(Rws, 14).Value
 For J = 1 To UBound(Arr())
    If Arr(J, 1) = "" Then Exit For
    If Arr(J, 14) <> 3 Then
        W = W + 1
        For Col = 1 To 14
            dArr(W, Col) = Arr(J, Col)
        Next Col
    End If
    If Arr(J, 14) = 0 Then
        For Cot = 1 To 2
            W = W + 1
            For Col = 4 To 14
                dArr(W, Col) = Arr(J, Col)
            Next Col
        Next Cot
    ElseIf Arr(J, 14) = 1 Then
        W = W + 1
        For Col = 4 To 14
            dArr(W, Col) = Arr(J, Col)
        Next Col
    End If
 Next J
9 [A18].Resize(W, 14).Value = dArr()
End Sub

Chỉ dẫn thêm:
Hiện macro chép dữ liệu xuống dưới từ dòng 18 (theo file của bạn)
Sau khi kiểm tra & macro đã hoạt động đúng, bạn sửa lại dòng lệnh mang số 9 cho thích hợp.

Chúc thành công!
 
Upvote 0
PHP:
Sub cactheloai()
.......................
Application.ScreenUpdating = True
End Sub

Dạ cảm ơn A/C. Code chạy tốt và đúng yêu cầu mong muốn của em rồi ạ.
Bài đã thỏa mãn yêu cầu. Nhưng
1/ Nếu cột A có dữ liệu VD như dòng Tổng cộng chẳng hạn mà cột N=0 nó cũng nhân bản (chỉ xảy ra khi có từ 2 dòng trở nên) .
2/ Giả sử ta sử dụng bảng lại cho lần 2 thì Khi dữ liệu lần 2 mà ngắn hơn lần 1 thì phần thừa của lần 1 chưa được xóa bỏ
 
Lần chỉnh sửa cuối:
Upvote 0
Nhưng
1/ Nếu cột A có dữ liệu VD như dòng Tổng cộng chẳng hạn mà cột N=0 nó cũng nhân bản (chỉ xảy ra khi có từ 2 dòng trở nên) .
2/ Giả sử ta sử dụng bảng lại cho lần 2 thì Khi dữ liệu lần 2 mà ngắn hơn lần 1 thì phần thừa của lần 1 chưa được xóa bỏ

(1) Thì macro nó làm như máy thôi: Thấy con số 0 ở cột [N] là nó thêm thôi; đầu bài là vậy mà!
Còn giờ có 2 cách khắc fục chuyện này

a./ Đừng nhập con số vô dụng này vô hàng/dòng có tính tổng
b./ Bổ sung vô macro điều kiện nữa

(2) Chuyện này là do ai vậy? Hay cần thêm vài dòng lệnh để xóa dữ liệu cũ?
)*&^)
 
Lần chỉnh sửa cuối:
Upvote 0
(2) Chuyện này là do ai vậy? Hay cần thêm vài dòng lệnh để xóa dữ liệu cũ?
)*&^)
Dạ. Do em không lường hết ạ. Yêu cầu đầu tiên đã đạt em không dám yêu cầu thêm, nhưng nếu anh giúp sửa đổi cho em chỗ "Xóa phần dữ liệu thừa" thì tốt quá ạ:
Xin cảm ơn anh ạ.
 
Lần chỉnh sửa cuối:
Upvote 0
Bài toán này kỳ quá đi, nên thay đổi một chút để tăng tính ứng dụng. Vi dụ như nếu cột N có giá trị là 0.1 thì xóa hàng đó, nếu là 1 thì chèn một hàng ở trên hàng đó, nếu là -2 thì chèn thêm 2 hàng ở dưới., là +0.1 thì không làm gì. Như vậy viết code sẽ dễ mà sau này tha hồ mà sử dụng.
 
Upvote 0
Bài toán này kỳ quá đi, nên thay đổi một chút để tăng tính ứng dụng. Vi dụ như nếu cột N có giá trị là 0.1 thì xóa hàng đó, nếu là 1 thì chèn một hàng ở trên hàng đó, nếu là -2 thì chèn thêm 2 hàng ở dưới., là +0.1 thì không làm gì. Như vậy viết code sẽ dễ mà sau này tha hồ mà sử dụng.
Cảm ơn bạn. Cái này là phù hợp với công việc của Mình. Còn ý bạn mình chưa hiểu lắm.
 
Upvote 0
Cảm ơn bạn. Cái này là phù hợp với công việc của Mình. Còn ý bạn mình chưa hiểu lắm.
Nếu code như vậy thì giả sử có thêm các điều kiện mới, như là số 5 chèn 10 dòng, số 19 chèn 50 dòng chẳng hạn thì code vẫn có thể dùng được, cậu chỉ cần tạo một bảng phụ nhỏ vlookup số 5 thành 10, số 19 thành 50, sau đó gọi code kia ra là ok. vô vùng mềm dẻo. chứ code của mấy bạn kia chỉ cần thay đổi một yêu cầu nhỏ là phải viết code lại ngay.
 
Upvote 0
Web KT

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

Back
Top Bottom