Bạn thử đoạn code này xem sao:Mong các anh chị giúp đỡ! chân thành cảm ơn....!@2@
Sub MyDelRow()
Dim Zr, Zi As Integer
Zr = Sheets("Sheet1").[C65000].End(xlUp).Row
''//------------------------------------------------
For Zi = 2 To Zr
If Sheets("Sheet1").Cells(Zi, 3).Value = 0 Then
Sheets("Sheet1").Cells(Zi, 3).EntireRow.Delete
End If
Next Zi
End Sub
Chú ý cách khai báo biến nhé.
1. Zr có kiểu gì vậy?
Zr = Sheets("Sheet1").[C65000].End(xlUp).Row
Nếu như bạn suy nghĩ thì Zr có kiểu Integer (may mà khai báo kiểu trên nên nó ko phải là Integer) mà số Row lớn hơn 32,### thì tính sao đây?
2. Giả sử Zr có trên 32,### dòng thì tính Zi (integer) tính sao đây?
Hình như điều này nói rất nhiều rồi thì phải.
Sub MyDelRow()
Dim Zr, Zi As Integer
Zr = Sheets("Sheet1").[C65000].End(xlUp).Row
''//------------------------------------------------
For Zi = [B] Zr to 2 Step -1[/B]
...............
Set Rng = [A1].CurrentRegion
Rng.Value = Rng.Value
........
Rng.AutoFilter Field:=3, Criteria1:="0"
...................
Rng.SpecialCells(12).EntireRow.Delete
Mã:Set Rng = [A1].[COLOR=Blue][B]CurrentRegion[/B][/COLOR]
Mã:Rng.[COLOR=DarkGreen][B]SpecialCells[/B][/COLOR](12).EntireRow.Delete
Cảm ơn anh ndu96081631, cái vụ CurrentRegion và SpecialCells, em học hoài mà vẫn chưa thông!
Nếu xóa vùng thì có thể gây tiêu trang tính luôn;Nói chung, cái gì liên quan đến XÓA DÒNG thì ta nên nghĩ ngay đến quét ngược (chứ không quét xuôi)... Nếu không hậu quả thật đáng tiếc
Thì bạn ráp các code tôi nêu ở trên, tuần tự từ trên xuống dưới, như vầy đây:cảm ơn vì có được ý kiến của các anh cao thủ ! tôi học thên được thật nhiều ! theo như anh ndu631 thì code hoàn chỉnh phải như thế nào ? mình kém VBA lắm xin giúp tận tình !!! so thanks
Sub Xoadong()
Dim Rng As Range
Set Rng = [A1].CurrentRegion
Rng.Value = Rng.Value
Rng.AutoFilter Field:=3, Criteria1:="0"
Rng.SpecialCells(12).EntireRow.Delete
End Sub
Rng.SpecialCells([B]12[/B]).EntireRow.Delete
Vì tôi cố tính làm thế! Cái tiêu đề do tôi thêm vào nên cuối cùng phải xóa luôn cho giống với dử liệu gốcTheo code này thì khi chạy sub xoadong thì nó xóa luôn cả dòng tiêu đề. Vậy để code ko xóa dòng tiêu đề thì phải sửa code như thế nào?
thành:Rng.SpecialCells(12).EntireRow.Delete
thêm nữa: do tiêu đề vẩn còn nên chế độ AutoFilter vẩn tồn tại, ta thêm dòng:Rng.Offset(1).SpecialCells(12).EntireRow.Delete
Sẽ "đẹp" hơn!ActiveSheet.AutoFilterMode = False
Sub Xoadong()
Dim Rng As Range
Set Rng = [A1].CurrentRegion
Rng.Value = Rng.Value
Rng.AutoFilter Field:=3, Criteria1:="0"
Rng.[B]Offset(1)[/B].SpecialCells(12).EntireRow.Delete
[B] ActiveSheet.AutoFilterMode = False[/B]
End Sub
SpecialCells(12) tương đương với việc ta bấm Ctrl + G\Special\Visible cells onlyCho em hỏi Số 12 trong dòng code đó nghĩa là gì?Mã:Rng.SpecialCells([B]12[/B]).EntireRow.Delete
Mấy cái số trong Special Cells là do tôi tự nghĩ ra và thí nghiệm! Thật ra nếu bạn record macro quá trình chọn vùng bằng Goto thì nó không ghi như vậy!Cảm ơn anh nhiều, specialcell(12) nghĩa là xóa những dòng nhìn thấy còn những dòng bị ẩn đi do autofill thì ko đụng đến?
ActiveSheet.AutoFilterMode = False
Em làm thiếu cái này nên có dịch nó cũng xóa luôn dòng tiêu đề nên mới hỏi anh.
Tôi tưởng tượng và đoán mò các tùy chọn trong hộp Goto có thể thay bằng số. Nếu đếm từ trên xuống từ trái qua phải thì:Selection.SpecialCells(xlCellTypeVisible).Select
Có lẽ mục "Object" không được tính = 7 (Row Dif... mới là 7) ---> Nếu bỏ cái này thì Visible cells only =12 là đúng rồiBác tư duy cao quá
- Em ngôi đếm không hiểu sao cái Visible cells only là = 13 bác NDU ạh