XÓA DÒNG TRONG EXCEL BẰNG VBA BỊ LỖI

Liên hệ QC

thanhdo89

Thành viên chính thức
Tham gia
8/7/11
Bài viết
52
Được thích
6
Anh chị nào xem giúp em đoạn code dưới đây được ko ạ,
e có nhiều sheet, trừ 5 sheet đầu ra, tính từ sheet thứ 6, em muốn bắt đầu từ dòng 13 trở đi ở cọt 11, nếu ko có gì thì xóa cả dòng, , sau đó copy toàn bộ dữ liệu bảng đó cũng từ dòng 13 đến hết rùi dán vào sheet 2PL2.
Em chỉ muốn xóa các dòng phía dưới dòng 13, nhưng chương trình lại xóa cả các dòng trên dòng 13, dẫn đến code vba của các đoạn sau của em chạy sai
Option Explicit
Sub A92_PHULUC2()
Dim J As Integer
On Error Resume Next
Sheets("2PL2").Range("P4:AG3258").Select
Selection.ClearContents
For J = 5 To Sheets.Count

Sheets(J).Activate
With ActiveSheet.Range("A13").CurrentRegion
.AutoFilter 11, Empty
.AutoFilter 9, ">0"
.Offset(1).Resize(, 1).SpecialCells(xlCellTypeVisible).EntireRow.Delete
.AutoFilter

Range("A13").Select
Selection.CurrentRegion.Select
Selection.Offset(12, 0).Resize(Selection.Rows.Count - 1).Select '-1
Selection.Copy Destination:=Sheets("2PL2").Range("P4500").End(xlUp)(2)
End With
Next J
Sheets("2PL2").Activate
End Sub
220567
 
Anh chị nào xem giúp em đoạn code dưới đây được ko ạ,
e có nhiều sheet, trừ 5 sheet đầu ra, tính từ sheet thứ 6, em muốn bắt đầu từ dòng 13 trở đi ở cọt 11, nếu ko có gì thì xóa cả dòng, , sau đó copy toàn bộ dữ liệu bảng đó cũng từ dòng 13 đến hết rùi dán vào sheet 2PL2.
Em chỉ muốn xóa các dòng phía dưới dòng 13, nhưng chương trình lại xóa cả các dòng trên dòng 13, dẫn đến code vba của các đoạn sau của em chạy sai
Option Explicit
Sub A92_PHULUC2()
Dim J As Integer
On Error Resume Next
Sheets("2PL2").Range("P4:AG3258").Select
Selection.ClearContents
For J = 5 To Sheets.Count

Sheets(J).Activate
With ActiveSheet.Range("A13").CurrentRegion
.AutoFilter 11, Empty
.AutoFilter 9, ">0"
.Offset(1).Resize(, 1).SpecialCells(xlCellTypeVisible).EntireRow.Delete
.AutoFilter

Range("A13").Select
Selection.CurrentRegion.Select
Selection.Offset(12, 0).Resize(Selection.Rows.Count - 1).Select '-1
Selection.Copy Destination:=Sheets("2PL2").Range("P4500").End(xlUp)(2)
End With
Next J
Sheets("2PL2").Activate
End Sub
View attachment 220567
Cho cái FIle lên xem nào bạn hay sợ bị lộ bí mật công ty.:D
 
Upvote 0
File đính kèm đây ạ. A xem giúp e với. E cám ơn anh ạ. Hj
Bài đã được tự động gộp:
Chả biết đúng hay sai vì dữ liệu bạn đưa lên không đúng với code.Bạn thử nhé.Mà trong code bạn sử dụng mảng mà.Sao không dùng mảng để kiểm tra điều kiện cho nó gọn.
Mã:
Sub A92_PHULUC2()
Dim J As Integer, lr As Long
'On Error Resume Next
Sheets("2PL2").Range("P4:AG3258").Select
Selection.ClearContents
For J = 5 To Sheets.Count

Sheets(J).Activate
lr = Range("A" & Rows.Count).End(xlUp).Row
If lr > 12 Then
With ActiveSheet.Range("A12:R" & lr)
.AutoFilter 11, Empty
.AutoFilter 9, ">0"
.Offset(1).Resize(, 1).SpecialCells(xlCellTypeVisible).EntireRow.Delete
.AutoFilter

Range("A13").Select
Selection.CurrentRegion.Select
Selection.Offset(12, 0).Resize(Selection.Rows.Count - 1).Select '-1
Selection.Copy Destination:=Sheets("2PL2").Range("P4500").End(xlUp)(2)
End With
End If
Next J
Sheets("2PL2").Activate
End Sub
 
Upvote 0
Đây là file chuẩn của em, anh xem lại giúp em với, em đặt lệnh như anh vẫn ko được, và nó copy nó bỏ mất sheet đầu tiên của em, nó chỉ copy từ sheet thứ 2 của em trở đi, anh có thể giải thích giúp em đoạn code này (
Selection.Offset(12, 0).Resize(Selection.Rows.Count - 1).Select '-1
Selection.Copy Destination:=Sheets("2PL2").Range("P4500").End(xlUp)(2)
được ko ạ, em cám ơn ạ



Chả biết đúng hay sai vì dữ liệu bạn đưa lên không đúng với code.Bạn thử nhé.Mà trong code bạn sử dụng mảng mà.Sao không dùng mảng để kiểm tra điều kiện cho nó gọn.
Mã:
Sub A92_PHULUC2()
Dim J As Integer, lr As Long
'On Error Resume Next
Sheets("2PL2").Range("P4:AG3258").Select
Selection.ClearContents
For J = 5 To Sheets.Count

Sheets(J).Activate
lr = Range("A" & Rows.Count).End(xlUp).Row
If lr > 12 Then
With ActiveSheet.Range("A12:R" & lr)
.AutoFilter 11, Empty
.AutoFilter 9, ">0"
.Offset(1).Resize(, 1).SpecialCells(xlCellTypeVisible).EntireRow.Delete
.AutoFilter

Range("A13").Select
Selection.CurrentRegion.Select
Selection.Offset(12, 0).Resize(Selection.Rows.Count - 1).Select '-1
Selection.Copy Destination:=Sheets("2PL2").Range("P4500").End(xlUp)(2)
End With
End If
Next J
Sheets("2PL2").Activate
End Sub
 

File đính kèm

  • N1_DP_DSHOMAU_guiw.xls
    1.4 MB · Đọc: 0
Upvote 0
Đây là file chuẩn của em, anh xem lại giúp em với, em đặt lệnh như anh vẫn ko được, và nó copy nó bỏ mất sheet đầu tiên của em, nó chỉ copy từ sheet thứ 2 của em trở đi, anh có thể giải thích giúp em đoạn code này (
Selection.Offset(12, 0).Resize(Selection.Rows.Count - 1).Select '-1
Selection.Copy Destination:=Sheets("2PL2").Range("P4500").End(xlUp)(2)
được ko ạ, em cám ơn ạ
Bạn nói yêu cầu đi mình viết code khác nhé.
 
Upvote 0
Bạn nói yêu cầu đi mình viết code khác nhé.
Dạ, em muốn trong các sheet trừ 4 sheet đầu (1DSDB; 2PL2; 3PL4; 4TH), bắt đầu từ sheet thứ 5, bắt đầu tư dòng 13 nếu cột hộ mẫu (cột K= Empty) thì em xóa bỏ các dòng đó đi, và em muốn copy toàn bộ những hộ mẫu được chọn (cột K =1) thì copy dán dữ liệu những hộ đấy vào ô bắt đầu từ ô P4 của sheet "2PL2", anh xem giúp em với, em cám ơn ạ
 

File đính kèm

  • N1_GOC_DSMAU_GUI.xls
    1.8 MB · Đọc: 1
Upvote 0
Dạ, em muốn trong các sheet trừ 4 sheet đầu (1DSDB; 2PL2; 3PL4; 4TH), bắt đầu từ sheet thứ 5, bắt đầu tư dòng 13 nếu cột hộ mẫu (cột K= Empty) thì em xóa bỏ các dòng đó đi, và em muốn copy toàn bộ những hộ mẫu được chọn (cột K =1) thì copy dán dữ liệu những hộ đấy vào ô bắt đầu từ ô P4 của sheet "2PL2", anh xem giúp em với, em cám ơn ạ
Bạn xem có đúng không nhé.
Mã:
Sub gopdulieu()
    Dim arr, i As Long, j As Long, dk As String, kq, lr As Long, a As Long, max As Long, sh As Worksheet, ten As String
    ten = "#1DSDB#2PL2#3PL4#4TH#"
    For Each sh In ThisWorkbook.Worksheets
        If InStr(1, ten, "#" & sh.Name & "#") = 0 Then
           lr = sh.Range("B" & Rows.Count).End(xlUp).Row
           max = max + lr
        End If
   Next
   ReDim kq(1 To max, 1 To 17)
    For Each sh In ThisWorkbook.Worksheets
        If InStr(1, ten, "#" & sh.Name & "#") = 0 Then
           lr = sh.Range("B" & Rows.Count).End(xlUp).Row
           If lr > 12 Then
              arr = sh.Range("B13:R" & lr).Value
              For i = 1 To UBound(arr)
                 If arr(i, 10) = 1 Then
                    a = a + 1
                    For j = 1 To 17
                        kq(a, j) = arr(i, j)
                    Next j
                 End If
              Next i
          End If
       End If
    Next
    With Sheets("2PL2")
         lr = .Range("Q" & Rows.Count).End(xlUp).Row
         If lr > 3 Then .Range("Q4:AG" & lr).ClearContents
         If a Then .Range("Q4:AG4").Resize(a).Value = kq
    End With
End Sub
 
Upvote 0
Bạn xem có đúng không nhé.
Mã:
Sub gopdulieu()
    Dim arr, i As Long, j As Long, dk As String, kq, lr As Long, a As Long, max As Long, sh As Worksheet, ten As String
    ten = "#1DSDB#2PL2#3PL4#4TH#"
    For Each sh In ThisWorkbook.Worksheets
        If InStr(1, ten, "#" & sh.Name & "#") = 0 Then
           lr = sh.Range("B" & Rows.Count).End(xlUp).Row
           max = max + lr
        End If
   Next
   ReDim kq(1 To max, 1 To 17)
    For Each sh In ThisWorkbook.Worksheets
        If InStr(1, ten, "#" & sh.Name & "#") = 0 Then
           lr = sh.Range("B" & Rows.Count).End(xlUp).Row
           If lr > 12 Then
              arr = sh.Range("B13:R" & lr).Value
              For i = 1 To UBound(arr)
                 If arr(i, 10) = 1 Then
                    a = a + 1
                    For j = 1 To 17
                        kq(a, j) = arr(i, j)
                    Next j
                 End If
              Next i
          End If
       End If
    Next
    With Sheets("2PL2")
         lr = .Range("Q" & Rows.Count).End(xlUp).Row
         If lr > 3 Then .Range("Q4:AG" & lr).ClearContents
         If a Then .Range("Q4:AG4").Resize(a).Value = kq
    End With
End Sub
Vẫn ko được anh ơi, em muốn copy cả cột A nữa, anh chỉ để vậy cột b cho e, và em muốn dán liệu vào cột P chứ ko phải Q (trong sheet 2PL2, e đã thay đổi Q =P, B = A, thì nó vẫn bị mất mấy dòng đầu anh ạ, anh xem lại giúp em với,
 
Upvote 0
Vẫn ko được anh ơi, em muốn copy cả cột A nữa, anh chỉ để vậy cột b cho e, và em muốn dán liệu vào cột P chứ ko phải Q (trong sheet 2PL2, e đã thay đổi Q =P, B = A, thì nó vẫn bị mất mấy dòng đầu anh ạ, anh xem lại giúp em với,
Bạn xem lại nhé.Mình thấy đủ mà.
Mã:
Sub gopdulieu()
    Dim arr, i As Long, j As Long, dk As String, kq, lr As Long, a As Long, max As Long, sh As Worksheet, ten As String
    ten = "#1DSDB#2PL2#3PL4#4TH#"
    For Each sh In ThisWorkbook.Worksheets
        If InStr(1, ten, "#" & sh.Name & "#") = 0 Then
           lr = sh.Range("B" & Rows.Count).End(xlUp).Row
           max = max + lr
        End If
   Next
   ReDim kq(1 To max, 1 To 18)
    For Each sh In ThisWorkbook.Worksheets
        If InStr(1, ten, "#" & sh.Name & "#") = 0 Then
           lr = sh.Range("B" & Rows.Count).End(xlUp).Row
           If lr > 12 Then
              arr = sh.Range("A13:R" & lr).Value
              For i = 1 To UBound(arr)
                 If arr(i, 11) = 1 Then
                    a = a + 1
                    For j = 1 To 18
                        kq(a, j) = arr(i, j)
                    Next j
                 End If
              Next i
          End If
       End If
    Next
    With Sheets("2PL2")
         lr = .Range("Q" & Rows.Count).End(xlUp).Row
         If lr > 3 Then .Range("p4:AG" & lr).ClearContents
         If a Then .Range("p4:AG4").Resize(a).Value = kq
    End With
End Sub
 

File đính kèm

  • N1_GOC_DSMAU_GUI.xls
    1.8 MB · Đọc: 2
Upvote 0
Bạn xem lại nhé.Mình thấy đủ mà.
Mã:
Sub gopdulieu()
    Dim arr, i As Long, j As Long, dk As String, kq, lr As Long, a As Long, max As Long, sh As Worksheet, ten As String
    ten = "#1DSDB#2PL2#3PL4#4TH#"
    For Each sh In ThisWorkbook.Worksheets
        If InStr(1, ten, "#" & sh.Name & "#") = 0 Then
           lr = sh.Range("B" & Rows.Count).End(xlUp).Row
           max = max + lr
        End If
   Next
   ReDim kq(1 To max, 1 To 18)
    For Each sh In ThisWorkbook.Worksheets
        If InStr(1, ten, "#" & sh.Name & "#") = 0 Then
           lr = sh.Range("B" & Rows.Count).End(xlUp).Row
           If lr > 12 Then
              arr = sh.Range("A13:R" & lr).Value
              For i = 1 To UBound(arr)
                 If arr(i, 11) = 1 Then
                    a = a + 1
                    For j = 1 To 18
                        kq(a, j) = arr(i, j)
                    Next j
                 End If
              Next i
          End If
       End If
    Next
    With Sheets("2PL2")
         lr = .Range("Q" & Rows.Count).End(xlUp).Row
         If lr > 3 Then .Range("p4:AG" & lr).ClearContents
         If a Then .Range("p4:AG4").Resize(a).Value = kq
    End With
End Sub
Dạ e cám ơn a ạ. Để chiều e xem lại
 
Upvote 0
Web KT
Back
Top Bottom