Giúp em xóa luôn các Cell ẩn

Liên hệ QC

RAT_LIEU

Thành viên mới
Tham gia
9/9/09
Bài viết
29
Được thích
4
Trong file gửi kèm em có 1 cái macro xóa cột B, nhưng gặp một lỗi là khi em sử dụng chức năng Auto Filter rồi em xóa thì những Cell bị ẩn do Filter sẽ không bị xóa
a/c giải quyết giúp em với
thank
 

File đính kèm

Trong file gửi kèm em có 1 cái macro xóa cột B, nhưng gặp một lỗi là khi em sử dụng chức năng Auto Filter rồi em xóa thì những Cell bị ẩn do Filter sẽ không bị xóa
a/c giải quyết giúp em với
thank
Bạn bỏ cái Merge ở dòng tiêu đề đi là được. Tôi cũng không biết nguyên nhân.
Bác nào biết lý do giải thích giùm cho anh em hiểu luôn.
 
Tôi đã xem mà không giải thích được.

Tất nhiên để xóa được thì ta hiện cả lên.

Có lẽ Excel chỉ cho xử lý nội dung hiện. Ví dụ bạn lọc còn 1 số nội dung, khi sao chép sang vùng khác thì chỉ nội dung hiện là được sao, và nội dung đó liền nhau.

Chú ý là đặt ẩn khác với lọc. Đặt ẩn vẫn sao chép nội dung ẩn.
 
Trong file gửi kèm em có 1 cái macro xóa cột B, nhưng gặp một lỗi là khi em sử dụng chức năng Auto Filter rồi em xóa thì những Cell bị ẩn do Filter sẽ không bị xóa
a/c giải quyết giúp em với
thank

Thế bạn đã thấy ở đâu xoá được các dòng ẩn bởi Auto Filter chưa ?

Đối với trường hợp này Tôi thường làm ngược lại tức là dòng nào muốn xoá thì cho nó hiện lên, dòng nào không muốn xoá thì cho nó ẩn đi. Sau khi xóa xong thì Auto Filter lại

Code cho ví dụ của bạn như sau:
Mã:
Sub Xoa()
  With [B3:B10000]
    .AutoFilter 1, "<>1"
    .ClearContents
    .AutoFilter 1, "=1"
  End With
End Sub
 
để em thử rồi cm lại
 
Thế bạn đã thấy ở đâu xoá được các dòng ẩn bởi Auto Filter chưa ?

Đối với trường hợp này Tôi thường làm ngược lại tức là dòng nào muốn xoá thì cho nó hiện lên, dòng nào không muốn xoá thì cho nó ẩn đi. Sau khi xóa xong thì Auto Filter lại

Code cho ví dụ của bạn như sau:
Mã:
Sub Xoa()
  With [B3:B10000]
    .AutoFilter 1, "<>1"
    .ClearContents
    .AutoFilter 1, "=1"
  End With
End Sub
Người ta đang muốn xóa sau khi Filter. Đâu phải lúc nào cũng Filter với điều kiện "=1". Không lẽ điều kiện khác thì phải sửa code lại à.
Bình thường, nếu bạn xóa một vùng nào đó (Range().Clearcontents) thì cả vùng đó sẽ bị xóa, kể cả các dòng ẩn do Filter đi nữa. Chỉ trường hợp chọn rồi xóa mới xóa các dòng hiện. Ví dụ code sau sẽ chỉ xóa những dòng được Filter:
PHP:
Range().Select
Selection.Clearcontents
Trường hợp này, nguyên nhân như tôi nói ở bài #2.
 
Người ta đang muốn xóa sau khi Filter. Đâu phải lúc nào cũng Filter với điều kiện "=1". Không lẽ điều kiện khác thì phải sửa code lại à.
Bình thường, nếu bạn xóa một vùng nào đó (Range().Clearcontents) thì cả vùng đó sẽ bị xóa, kể cả các dòng ẩn do Filter đi nữa. Chỉ trường hợp chọn rồi xóa mới xóa các dòng hiện. Ví dụ code sau sẽ chỉ xóa những dòng được Filter:
PHP:
Range().Select
Selection.Clearcontents
Trường hợp này, nguyên nhân như tôi nói ở bài #2.

@ huuthang_bd:
1. Việc sửa code thì không khó vì ta có thể ghi điều kiện ra 1 ô nào đó ngoài bảng tính rồi tham chiếu đến ô này nhưng nếu bảng tính thật thì code này không ổn vì nó không chỉ lọc được duy nhất 1 điều kiện mà nó còn xoá mất dữ liệu.
2. Tôi test câu lệnh Range().Clearcontents nó chỉ xóa các dòng hiện thôi còn các dòng ẩn do Filter thì có xóa được đâu nhỉ - tức là không xoá được toàn bộ vùng chọn (có thể do tôi chưa biết cách).
Bạn cho xin 1 file ví dụ nhé. Thanks!
 
Lần chỉnh sửa cuối:

Theo tôi biết (tại thời điểm pot bài này) thì không thể xoá được các dòng ẩn do Auto Filter đâu bạn ạ (có lẽ do bác Bill quy định thế ? ). Nếu mà xoá được thì hậu quả cũng giống như Code trên của mình, vì vậy thay vì tìm cách xoá dòng ẩn sau Auto Filter bạn nên chuyển sang Copy kết quả lọc (những dòng hiện) sang nơi khác như mọi người vẫn thường làm.
 
Lần chỉnh sửa cuối:
Bây giờ thế này. Tạo một file mới, tạo AutoFilter lọc và dùng lệnh Range().Clearcontents xem có được không nhé. Đừng lấy file cũ của tác giả.
 
Bây giờ thế này. Tạo một file mới, tạo AutoFilter lọc và dùng lệnh Range().Clearcontents xem có được không nhé. Đừng lấy file cũ của tác giả.
Chắc chắn không bao giờ được ---> ClearContents chỉ xóa được cell ẩn không phải do Filter tạo ra
Điều này có nghĩa là: Nếu dòng được ẩn theo kiểu bình thường thì ClearContents có tác dùng.. Còn như nó được ẩn bằng chức năng AutoFilter thì ClearContents chẳng tác dụng gì
Xem file làm bằng chứng
 

File đính kèm

em test cung không được( file gủi kèm )
chắc là phải bó tay với mấy cái Filter thôi

-- EM có tối kiến này
thử xài vòng lặp rồi xóa theo từng cell của colum đó dc không a
Bác nào viết code giùm em với, em mới học VBA nên không rành lắm
 

File đính kèm

em test cung không được( file gủi kèm )
chắc là phải bó tay với mấy cái Filter thôi

-- EM có tối kiến này
thử xài vòng lặp rồi xóa theo từng cell của colum đó dc không a
Bác nào viết code giùm em với, em mới học VBA nên không rành lắm
Không có gì là không thể cả ---> Bùn lắm ta dùng vòng lập quét qua các cell ---> Xét điều kiện nếu cell bị ẩn thì XÓA
Tuy nhiên bạn nên đưa file gần giống với file thật của bạn lên đây, làm 1 lần cho xong ---> Mất công lại hỏi tiếp
Mà mục đích cuối cùng của bạn là gì? Tại sao lại cần phải xóa dử liệu trong các cell ẩn?
 
@ HungLao bạn xem lại bài 4, bài 7, bài 9. Bạn đừng quan tâm đến việc dòng ẩn hay không ẩn vì bản chất của vấn đề vẫn là xoá các dòng không phải là điều kiện lọc của Auto filter. Bạn dùng bất kỳ cách nào xoá được dữ liệu trong dòng ẩn thì kết quả vẫn như bài 4 tức là sau khi xoá xong thì chỉ có dòng hiện sau Auto filter còn dữ liệu, các dòng ẩn thì bị xoá hết rồi vậy nếu bạn muốn lọc tiếp điều kiện khác thì còn gì đâu mà lọc ?
 
File của em dung lượng lớn lắm nên không Up lên dd được, vì nhu cầu công việc đặc thù,tránh sai sót nên em cần xóa các cell ẩn trong 1 cột
cảm ơn các a/c đã giúp đỡ
 
em test cung không được( file gủi kèm )
chắc là phải bó tay với mấy cái Filter thôi

-- EM có tối kiến này
thử xài vòng lặp rồi xóa theo từng cell của colum đó dc không a
Bác nào viết code giùm em với, em mới học VBA nên không rành lắm
Có phải ý bạn là xóa bỏ những dòng nào bị ẩn đi ? Nếu vậy thì dùng code sau:

Mã:
Sub del()
On Error Resume Next
Dim LastRow As Integer, i As Integer
LastRow = ActiveSheet.UsedRange.Rows.Count + ActiveSheet.UsedRange.Row - 1
For i = LastRow To 1 Step -1
If Rows(i).Hidden = True Then
Rows(i).Delete
End If
Next i
End Sub

Xem thêm file nhé
 

File đính kèm

Mình thấy bạn ít tham khảo các bài viết đã được tổng kết của diễn đàn, với yêu cầu của bạn thì ngay trong bài của Bác Sa_DQ có hẳn ví dụ cho việc xóa vùng lọc ( Của bạn thì đặt ngược lại thôi mà)
 
OK, gần được rồi, anh xóa cho em luôn các cell không ẩn luôn
nói chung là xóa nguyên cột đó, cả ẩn cả không ẩn : từ B2-B10.000 và cho con trỏ nằm đúng vị trí trước khi xóa chứ đừng nhảy sang vị trí khác
 
Nhờ mod xoá giúp bài này. Thanks!
 
Lần chỉnh sửa cuối:
Web KT

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

Back
Top Bottom