hngiatuong
CMC
- 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.
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
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
PHP:Sub cactheloai() ....................... Application.ScreenUpdating = True End Sub
Em đã chạy thử. Code chạy nhanh, đúng yêu cầu anh ạ. Xin cảm ơn anhThêm cho bạn 1 cách để tham khảo nè:
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ỏ
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á ạ:(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ũ?
![]()
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.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.
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.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.