Xóa các dòng, cột ẩn bằng VBA (2 người xem)

Liên hệ QC

Người dùng đang xem chủ đề này

Tunguyen

Thành viên mới
Tham gia
6/10/07
Bài viết
25
Được thích
2
Các bác chỉ em cách xóa các row hoặc các column ẩn bằng VBA với. Em cảm ơn .
Em đã tìm trên diễn đàn nhưng mà không thấy nên mới hỏi các bác.
 
Chỉnh sửa lần cuối bởi điều hành viên:
Thử cái này xem:
Mã:
Sub DeleteHiddenRows()
    For j = 1 To 2542
        If Rows(j).Hidden Then
            Rows(j).Hidden = False
            Rows(j).Select
            Selection.EntireRow.Delete
        End If
    Next j
End Sub
 
Lần chỉnh sửa cuối:
Upvote 0
Anh Tuấn ơi, code của anh khi áp dụng cho file có các dòng ẩn không liên tục thì còn sót lại dòng ẩn cuối cùng. Anh nghiên cứu V2.0 đi anh.
 
Upvote 0
Code này ko phải tự tôi làm mà là copy trên mạng... mới sửa xong.. Có điều sao nó ko xóa 1 phát luôn hết tất cả các row đang ẩn nhỉ
 
Upvote 0
Chào mọi người,

Code anh Tuấn không xóa hết hàng vì trong code cho biết "mũi Cà Mau" là ở hàng 2542 rồi nếu các hàng ẩn ờ dưới nữa thì vẫn không ảnh hưỡng (tức là không bị xóa).

Các bạn thữ code này nhá:

Sub DelHiddenRows()
Dim r As Range, k As Range
With ActiveSheet
Set r = .Range("A1:A" & .Cells.SpecialCells(xlCellTypeLastCell).Row)
Set k = r.SpecialCells(xlCellTypeVisible)
r.EntireRow.Hidden = False
k.EntireRow.Hidden = True
r.SpecialCells(xlCellTypeVisible).EntireRow.Delete
r.EntireRow.Hidden = False
End With
End Sub

Còn xóa các cột ẩn thì là:

Sub DelHiddenRows()
Dim r As Range, k As Range
With ActiveSheet
Set r = .Range("A1:A" & .Cells.SpecialCells(xlCellTypeLastCell).Column)
Set k = r.SpecialCells(xlCellTypeVisible)
r.EntireColumn.Hidden = False
k.EntireColumn.Hidden = True
r.SpecialCells(xlCellTypeVisible).EntireColumn.Delete
r.EntireColumn.Hidden = False
End With
End Sub

Mến
 
Upvote 0
Nó báo lỗi bạn Digita ơi.. (thông báo lỗi chỉ có duy nhất số 400.. ko biết là lỗi gì).. và nó chỉ Unhide chứ ko xóa gì cả
 
Upvote 0
digita đã viết:
Code anh Tuấn không xóa hết hàng vì trong code cho biết "mũi Cà Mau" là ở hàng 2542 rồi nếu các hàng ẩn ờ dưới nữa thì vẫn không ảnh hưỡng (tức là không bị xóa).
Không hẳn là dtới dòng thứ 2542. Tôi thử chỉ vài dòng từ 1 đến 10 thì nó cũng không xóa dòng ẩn cuối cùng.
 
Upvote 0
anhtuan1066 đã viết:
Nó báo lỗi bạn Digita ơi.. (thông báo lỗi chỉ có duy nhất số 400.. ko biết là lỗi gì).. và nó chỉ Unhide chứ ko xóa gì cả
Bác xem lại Excel của bác bị làm sao... Máy em chạy cái vèo, xóa tuốt, chỉ chừa những hàng không hide thôi.
 
Upvote 0
BNTT đã viết:
Bác xem lại Excel của bác bị làm sao... Máy em chạy cái vèo, xóa tuốt, chỉ chừa những hàng không hide thôi.
Chẳng biết nữa.. thử 3 máy tính rồi, đều báo lỗi và ko xóa dc thứ gì cả... Cũng thử trên 2 phiên bản Office: 2002 và 2003
Là sao ta?
 
Upvote 0
Theo mình code cua anhtuan1066 sẽ xóa sót dòng ẩn khi có 2 dòng ẩn kề nhau. Lý do: khi dòng ẩn trên bị xoá, dòng ẩn kề dưới sẽ thay thế dòng phía trên ( nghĩa là số dòng bị trừ 1) mà vòng lặp đã duyệt qua rồi. Thế nên dòng này không bị xoá.
Cách giải quyết: Cho vòng lặp chạy ngược từ dưới lên sẽ không bị trường hợp này.
 
Upvote 0
digita đã viết:
Còn xóa các cột ẩn thì là:

Trích:
Sub DelHiddenRows()
Dim r As Range, k As Range
With ActiveSheet
Set r = .Range("A1:A" & .Cells.SpecialCells(xlCellTypeLastCell).Column)
Set k = r.SpecialCells(xlCellTypeVisible)
r.EntireColumn.Hidden = False
k.EntireColumn.Hidden = True
r.SpecialCells(xlCellTypeVisible).EntireColumn.Delete
r.EntireColumn.Hidden = False
End With
End Sub
Mến
Cái xóa hàng thì được còn cái xóa cột thì không bác Digita ơi (mặc dù đã sửa dùm bác chữ Delete rồi)
 
Upvote 0
OK. Đã kiểm lại 2 code. Cái code 1 xóa hàng thì chạy ngon lành. Còn code 2 đúng là có lổi. Vì chưa nghĩ ra cách dùng theo cách specialcell, mình viết lại cái code xóa các cột ẩn dùng vòng lặp. Tuy chạy hơi lâu 1 chút nhưng thà chậm tí xíu nhưng chắc ăn.

Sub DelHiddenColumns()
For i = Cells.Columns.Count To 1
If Cells(1, i).EntireColumn.Hidden = True Then Cells(1, i).EntireColumn.Delete
Next
End Sub

Mến
 
Upvote 0
digita đã viết:
OK. Đã kiểm lại 2 code. Cái code 1 xóa hàng thì chạy ngon lành. Còn code 2 đúng là có lổi. Vì chưa nghĩ ra cách dùng theo cách specialcell, mình viết lại cái code xóa các cột ẩn dùng vòng lặp. Tuy chạy hơi lâu 1 chút nhưng thà chậm tí xíu nhưng chắc ăn.
Mến

Nó không báo lỗi nhưng cũng không nhúc nhích gì cả bác ơi.
 
Upvote 0
Bác BNTT ơi, tôi vẫn xoá được mà. Tất nhiên sau khi đã chỉnh lại code 1 chút.
Mã:
Sub DelHiddenColumns()
For i = Cells.Columns.Count To 1 Step -1
    If Cells(1, i).EntireColumn.Hidden = True Then
        Cells(1, i).EntireColumn.Hidden = False
        Cells(1, i).EntireColumn.Delete
    End If
Next
End Sub
Cái Step - 1 này học của bác Mr Okebab
 
Upvote 0
Món này khó vậy sao?
Tôi ko biết tạo code nhưng nghĩ thuật toán chắc phải là:
1> Đặt tên cho vùng ẩn
2> Unhide vùng vừa đặt tên
3> Select vùng ấy và xóa
Sao lại căng thế nhỉ?
 
Upvote 0
Cám ơn bạn Minhlev. Mình quên gõ cái step -1 vô. Thôi thì nhất quá tam vậy.

Sub DelHiddenColumns()
For i = Cells.Columns.Count To 1 Step -1
If Cells(1, i).EntireColumn.Hidden Then Cells(1, i).EntireColumn.Delete
Next
End Sub

Các bạn không cần giải ẩn trước khi xóa cột và cũng không cần name range. Code trên chỉ có 1 test duy nhất là nếu cột bị ẩn thì cho nó đi luôn. Chúc mọi người 1 cuối tuần hạnh phúc nha.

Mến.
 
Upvote 0
OK... cách của minhlev thì chạy tốt... sữa lại chút đỉnh thì thành xóa Row...
Code cuối cùng của Digita cũng chạy tốt... và theo ý bạn Digita thì code của minhlev có thể bỏ bớt dòng:
Cells(1, i).EntireColumn.Hidden = False
 
Upvote 0
anhtuan1066 đã viết:
OK... cách của minhlev thì chạy tốt... sữa lại chút đỉnh thì thành xóa Row...
Code cuối cùng của Digita cũng chạy tốt... và theo ý bạn Digita thì code của minhlev có thể bỏ bớt dòng:
Cells(1, i).EntireColumn.Hidden = False

Đúng vậy anh bạn ạ. Nhưng dùng vòng lặp để xóa hàng thì L....Â......U lắm. XL 2007 thì có đâu cả triệu hàng còn các phiên bãng trước thì 65536 hàng. Để kiểm tra từ hàng 1 thì chắc chờ hụt hơi. Nên xài cái code 1 nhanh hơn.


Mến
 
Upvote 0
Uh... đúng, nhưng cũng ko lâu lắm.. Tôi test thấy nó chỉ "khựng" lại vài giây thôi.. ko có vấn đề... Còn code 1 thì tôi thật sự ko chạy dc.. Nó báo lỗi và ko xóa gì cả.. Chỉ có code cuối cùng là OK
 
Upvote 0
Web KT

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

Back
Top Bottom