Nhờ các bạn viết Code dùm mình nút xóa dòng

Liên hệ QC

othanhquango

Thành viên hoạt động
Tham gia
6/3/09
Bài viết
138
Được thích
7
Các bạn giúp mình xóa các dòng không có dữ liệu bằng nút Xóa

Chân thành cảm ơn các bạn.
 

File đính kèm

Các bạn giúp mình xóa các dòng không có dữ liệu bằng nút Xóa

Chân thành cảm ơn các bạn.
bạn thử xem cách này ổn không? chỉ thực hiện recode thui.
Private Sub CommandButton1_Click()
Range("A10:A113").AdvancedFilter Action:=xlFilterInPlace, Unique:=True
' phát này là tham khảo của bác Ndu.hihihi
iCount = iCount + 1
If iCount >= 1 Then CommandButton1.Enabled = False
End Sub
Private Sub CommandButton2_Click()
ActiveSheet.ShowAllData
iCount = iCount + 1
If iCount >= 1 Then CommandButton1.Enabled = True
End Sub
xem thêm file đính kèm.
 
Upvote 0
Cảm ơn bạn, nhưng có lỗi sau: Nếu mình chưa nhấn "xóa dòng" mà nhấn "không xóa" => lỗi. Do đó mình muốn chỉ hiện 1 trong 2 nút, sau khi nhấn "xóa dòng" => nút này biến mất và hiện ra nút "không xóa" (cùng vị trí") và ngược lại nếu nhấn "không xóa" thì sẽ hiện ra lại xóa dòng.

- Đoạn code của bạn sau khi xóa có chừa 1 dòng trống (dòng 25 trong trường hợp này). Mình muốn sau khi xóa không còn dòng trống nào ở dưới hết.

- Thêm nữa là sau khi nhấn xóa dòng, mình chèn thêm dòng dưới cùng (dưới dòng 24 trở đi) thì mặc dù chưa có dữ liệu vấn không thể xóa dòng đó đi bằng nút lệnh được nữa.

- Có cách nào để khi in mình không nhìn thấy mấy nút này không?

Chân thành cảm ơn bạn.
 
Lần chỉnh sửa cuối:
Upvote 0

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
Đoạn code của bạn chạy khá ổn nhưng hình như mình thấy vẫn chưa hài lòng cho lắm. Nút "không xóa" hình như không có tác dụng thì phải nó chỉ chuyển từ chữ này sang chữ kia thôi.

Và mình muốn nút này ở tất cả các sheet, khi nhấn ở sheet nào thì chỉ tự xóa ở sheet đó thì làm cách nào vậy bạn?

Chân thành cảm ơn sự giúp đỡ của bạn.
 
Upvote 0
Code của khoa:
- Chỉ ẩn dòng, không xoá dòng
- dùng Advanced filter Unique = True: nếu có 2 dòng dữ liệu giống nhau sẽ bị ẩn mất 1, và dòng trắng (25) cũng tính là 1 dòng Unique
- Nếu chỉ ẩn dòng, dùng AutoFilter, không dùng Advanced filter
- Không cần icount>0 cũng disable button được
- Sau khi ẩn dòng, disable button mất rồi, làm sao thực hiện lần 2? Phải xả filter rồi mới filter lại à?

Túm lại là không đúng yêu cầu và chưa lường hết các trường hợp.
 
Upvote 0
Những lời nhận xét của bạn quá chính xác luôn. Rất mong bạn có thể giúp mình viết code cho nút lệnh theo yêu cầu.

Chân thành cảm ơn bạn.
 
Upvote 0
Các bạn giúp mình xóa các dòng không có dữ liệu bằng nút Xóa

Chân thành cảm ơn các bạn.
Thử chép code này vào nút xem:
Mã:
Public Sub xoa()
 Application.ScreenUpdating = False
   Dim vung As Range, i As Integer
   Set vung = Range([c1], [c500].End(xlUp).Offset(-11, 0))
    For i = vung.Rows.Count To 10 Step -1
       If Cells(i, 3) = "" Then Rows(i).Delete
    Next
 Application.ScreenUpdating = True
End Sub
Đã xóa một lần rồi thì đâu còn dòng trắng để xóa nữa mà sợ bấm lần 2
Cái này để in? sao không giấu thôi mà là xóa
Mình thấy dữ liệu cột C đầy đủ nhất nên mình lấy cột này để dò, bạn đừng di chuyển cell cuối cùng ở cột C nhé (trong bài là Nguyễn Thị Xuân Uyên)
 

File đính kèm

Upvote 0
Góp với Cò 1 dòng lệnh:
PHP:
   If vung.Rows.Count <= Application.Max(vung.Offset(0, 2)) Then Exit Sub

Có cách nào không dùng vòng lặp không Cò? chạy chậm quá!
 
Upvote 0
Cái này để in? sao không giấu thôi mà là xóa
Vì dữ liệu của mình gồm 31 sheet dành cho 31 ngày, mỗi sheet tầm 1500 dòng. Không xóa thì file sẽ nặng và những ngày cuối tháng chạy sẽ ì ạch.

Mình thấy dữ liệu cột C đầy đủ nhất nên mình lấy cột này để dò, bạn đừng di chuyển cell cuối cùng ở cột C nhé (trong bài là Nguyễn Thị Xuân Uyên)

Đừng di chuyển qua trái và phải à bạn? Vì chắc chắn mình sẽ thêm hoặc xóa bớt dòng. Không di chuyển sao được?

Góp với Cò 1 dòng lệnh:
PHP:
 If vung.Rows.Count <= Application.Max(vung.Offset(0, 2)) Then Exit Sub
QUOTE]

Vậy đoạn code hoàn chỉnh sẽ ra sao bạn? Mình còn gà nên không biết thay thế vào chỗ nào, hic.

Có cách nào không dùng vòng lặp không Cò? chạy chậm quá!

Đúng là hơi chậm, dữ liệu của mình tầm 1500 dòng. Chờ ...

Rất chân thành cảm ơn các bạn.
 
Lần chỉnh sửa cuối:
Upvote 0
PHP:
Public Sub xoa()
 Application.ScreenUpdating = False
   Dim vung As Range, i As Integer, maxSTT As Long, EmptyR As Long
   Set vung = Range([c1], [c50000].End(xlUp).Offset(-10, 0))
   maxSTT = Application.Max(vung.Offset(0, -2))
   If vung.Rows.Count - 9 <= maxSTT Then Exit Sub
  EmptyR = vung.Offset(0, -2).Find(maxSTT).Row + 1
  Range(EmptyR & ":" & vung.Rows.Count).Delete
 Application.ScreenUpdating = True
End Sub

Điều kiện là số thứ tự đánh đúng và đánh vừa đủ. Xoá 10 dòng hay 10.000 dòng tốc độ gần như nhau

(Chọt Cò già mà Cò già out mất tiêu)
 

File đính kèm

Upvote 0
PHP:
Public Sub xoa()
Application.ScreenUpdating = False
Dim vung As Range, i As Integer, maxSTT As Long, EmptyR As Long
Set vung = Range([c1], [c50000].End(xlUp).Offset(-10, 0))
maxSTT = Application.Max(vung.Offset(0, -2))
If vung.Rows.Count - 9 <= maxSTT Then Exit Sub
EmptyR = vung.Offset(0, -2).Find(maxSTT).Row + 1
Range(EmptyR & ":" & vung.Rows.Count).Delete
Application.ScreenUpdating = True
End Sub

Điều kiện là số thứ tự đánh đúng và đánh vừa đủ. Xoá 10 dòng hay 10.000 dòng tốc độ gần như nhau

(Chọt Cò già mà Cò già out mất tiêu)

- Nếu giữa các dòng có 1 dòng trống => xóa sai => nhấn xóa tiếp => sai tiếp ... :(
- Nếu số thứ tự trùng => xóa sai
- Xóa đâu mất tiêu dòng tổng cộng.
- Dòng đầu tiên không có dữ liệu => xóa sai.

Hic. Cảm ơn bạn.
 
Upvote 0
Tôi chẳng đã nói đánh số thứ tự đúng và vừa đủ còn gì? Dữ liệu nhập liên tục hàng ngày mà để dòng trống xen kẽ làm gì?
Còn dòng tổng bị mất là do sơ sót thật, bạn sửa dòng này

Set vung = Range([c1], [c50000].End(xlUp).Offset(-10, 0))

thành
Set vung = Range([c1], [c50000].End(xlUp).Offset(-11, 0))
 
Upvote 0
- Nếu giữa các dòng có 1 dòng trống => xóa sai => nhấn xóa tiếp => sai tiếp ... :(
- Nếu số thứ tự trùng => xóa sai
- Xóa đâu mất tiêu dòng tổng cộng.
- Dòng đầu tiên không có dữ liệu => xóa sai.

Hic. Cảm ơn bạn.
Với những yêu cầu như trên, thông thường tôi làm như sau:
1/ Hide những dòng trống đền dòng 114-1, vấn đề đây là dòng trống là theo tiêu chí nào.
2/ Xóa những dòng trống và tạo dòng tổng cộng vào dòng cuối +1.
Tại sao không sort rồi xác định vùng sort lại theo số TT.
Còn vụ nhấp 1 lần nữa không tác dụng thì OK, nó đã xóa rồi thì xoá nữa cũng như vậy, còn không xác định thêm nếu không có dòng trống thì nóut đó mờ, nhưng cách đó kg hay.
Vấn đề quan trọng nhất là tiêu chí nào xác định dòng trống.
 
Upvote 0
thunghi đã viết:
Với những yêu cầu như trên, thông thường tôi làm như sau: . . .
Với tôi thì khác, trong file dữ liệu của tôi không bao giờ để xảy ra những trường hợp đó để phải giải quyết. Nhập liệu liên tục mà để dòng trống xen kẽ, số thứ tự đánh trùng, là những điều không thể chấp nhận được đối với 1 nhân viên nhập liệu.
 
Upvote 0
Tôi chẳng đã nói đánh số thứ tự đúng và vừa đủ còn gì? Dữ liệu nhập liên tục hàng ngày mà để dòng trống xen kẽ làm gì?
))
Chơi gì bắt bí người ta thế
Hồi sáng nhìn bài thấy dữ liệu không nhiều nên làm thế
Thôi "bi" giờ làm thử cái này xem:
Mã:
  Public Sub xoahoai()
Application.ScreenUpdating = False
On Error Resume Next
   Dim vung As Range
   Set vung = Range([c10], [c500].End(xlUp).Offset(-11, 0))
    If vung.SpecialCells(4).Rows.Count = 0 Then
      Exit Sub
    Else
      vung.SpecialCells(4).Select
      Selection.EntireRow.Delete
    End If
 Application.ScreenUpdating = True
End Sub
Vẫn lấy cột C làm "nòng cốt" nhé bạn, không quan tâm các chuyện khác, cứ trong khu vực "cách ly" mà cột C trống là nó "thịt" ngay
Hy vọng nó chạy nhanh hơn vòng lặp
 
Upvote 0
Tôi chẳng đã nói đánh số thứ tự đúng và vừa đủ còn gì? Dữ liệu nhập liên tục hàng ngày mà để dòng trống xen kẽ làm gì?
Còn dòng tổng bị mất là do sơ sót thật, bạn sửa dòng này

Set vung = Range([c1], [c50000].End(xlUp).Offset(-10, 0))

thành
Set vung = Range([c1], [c50000].End(xlUp).Offset(-11, 0))

Lỗi nè bạn ơi, do mình vừa gởi file gốc (.xls 31 sheet) và file mình ghi lại (ppt) làm "chứng cứ" nên quá 1m do đó không đính kèm được. Bạn chịu khó dowload về giúp mình xem nó sai chỗ nào hay là code bạn sai.
http://www.mediafire.com/?mjyyxmdcmid

Vẫn lấy cột C làm "nòng cốt" nhé bạn, không quan tâm các chuyện khác, cứ trong khu vực "cách ly" mà cột C trống là nó "thịt" ngay
Hy vọng nó chạy nhanh hơn vòng lặp

Cột C thì hơi căng, vì chỗ mình có khi cột C không có dữ liệu. Sao bạn không lấy cột A (stt) không cần quan tâm nó là gì, chỉ cần biết nó khác null? Như vậy lỡ STT có "sự cố" thì cũng không sao. Sửa giúp mình nha.
 
Lần chỉnh sửa cuối:
Upvote 0
Mã:
Vẫn lấy cột C làm "nòng cốt" nhé bạn, không quan tâm các chuyện khác, cứ trong khu vực "cách ly" mà cột C trống là nó "thịt" ngay
Hy vọng nó chạy nhanh hơn vòng lặp
Cột C thì hơi căng, vì chỗ mình có khi cột C không có dữ liệu. Sao bạn không lấy cột A (stt) không cần quan tâm nó là gì, chỉ cần biết nó khác null? Sửa giúp mình nha.
"Zdậy" mà không chịu nói sớm là cột nào nhập đủ
Sửa lại chỗ màu đỏ nhé, chúc bạn như ý

Public Sub xoahoai()
Application.ScreenUpdating = False
On Error Resume Next
Dim vung As Range
Set vung = Range([a10], [a500].End(xlUp).Offset(-3, 0))
If vung.SpecialCells(4).Rows.Count = 0 Then
Exit Sub
Else
vung.SpecialCells(4).Select
Selection.EntireRow.Delete
End If
Application.ScreenUpdating = True
End Sub

Híc híc
 
Upvote 0
Sửa lại code tại bài 4.
Dòng rỗng ở đây là ròng không có dữ liệu (kể cả ký tự trắng). Phạm vi xét rỗng 50 cột tính từ cột đầu tiên của bảng (cột có chữ STT).
Với code này thì bảng tính nằm ở bất kỳ vị trí nào cũng OK
PHP:
Sub Button()
Application.ScreenUpdating = False
On Error Resume Next
    RngD = Cells.Find("STT", , , 2).Address
    RngC = Cells.Find("t?ng", , , 2)(, 50).Address
    With Range(Range(RngD), Range(RngC))
        .SpecialCells(2).EntireRow.Hidden = True
        .SpecialCells(12).EntireRow.Delete
        .EntireRow.Hidden = False
    End With
 
Lần chỉnh sửa cuối:
Upvote 0
Lỗi nè bạn ơi, do mình vừa gởi file gốc (.xls 31 sheet) và file mình ghi lại (ppt) làm "chứng cứ" nên quá 1m do đó không đính kèm được. Bạn chịu khó dowload về giúp mình xem nó sai chỗ nào hay là code bạn sai.
Tôi chạy bằng code ngay trong file 31 sheet đó, không lỗi gì cả. Tôi không có thì giờ ghi lại bằng chứng, tuỳ bạn dùng được thì dùng, không thì thôi.
 
Upvote 0
Web KT

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

Back
Top Bottom