AnhThu-1976
Thành viên tích cực
![](/diendan/data/PhoToDanhHieu/pip.gif)
![](/diendan/data/PhoToDanhHieu/pip.gif)
- Tham gia
- 17/10/14
- Bài viết
- 1,061
- Được thích
- 175
Thầy/cô, anh/chị cho em hỏi có Code nào xóa toàn bộ các dòng và cột ẩn của tất cả các sheet trong 1 file?
Em cảm ơn!
Em cảm ơn!
Bạn thử code này xem.Thầy/cô, anh/chị cho em hỏi có Code nào xóa toàn bộ các dòng và cột ẩn của tất cả các sheet trong 1 file?
Em cảm ơn!
Sub GPE()
Dim Rng As Range, Ws As Worksheet
For Each Ws In ThisWorkbook.Sheets
For Each Rng In Ws.UsedRange
If Rng.EntireRow.Hidden Then
Rng.EntireRow.Delete
ElseIf Rng.EntireColumn.Hidden Then
Rng.EntireColumn.Delete
End If
Next Rng
Next Ws
MsgBox "Done", vbInformation, "GPE"
End Sub
For Each Rng In Ws.UsedRange như vậy là vòng lập phải duyệt quá nhiều. Ví dụ vùng UsedRange có 5 cột 10 dòng, vị chi tổng số ô là 50 ===> Bạn phải duyệt 50 lần trong vòng lậpBạn thử code này xem.
Mã:Sub GPE() Dim Rng As Range, Ws As Worksheet For Each Ws In ThisWorkbook.Sheets For Each Rng In Ws.UsedRange If Rng.EntireRow.Hidden Then Rng.EntireRow.Delete ElseIf Rng.EntireColumn.Hidden Then Rng.EntireColumn.Delete End If Next Rng Next Ws MsgBox "Done", vbInformation, "GPE" End Sub
Dùng UsedRange thì tự Excel nó biết đâu là giới hạn rồi đó bạnỨng dụng code ở bài # 2 cho file có khoảng 30 sheet thì thấy code chạy hoài không ra kết quả!
Để giới hạn lại số dòng hay cột ẩn khi chạy code thì số dòng trong các sheet không quá 5.000 dòng và số cột thì không quá cột CZ
Không bàn đến code, tôi có 1 thắc mắc rằng: Lý do gì bạn phải xóa những cells ẩn thay vì cho hiện nó ra? Việc xóa dòng, cột trong bảng tính đôi khi ảnh hướng nghiêm trọng đến các liên kết công thức nên bạn phải thật cẩn thận. Bởi macro đã chạy là không có chuyện Undo được đâuThầy/cô, anh/chị cho em hỏi có Code nào xóa toàn bộ các dòng và cột ẩn của tất cả các sheet trong 1 file?
Em cảm ơn!
Viết theo ý bài #3, bạn chạy thử xem:Ứng dụng code ở bài # 2 cho file có khoảng 30 sheet thì thấy code chạy hoài không ra kết quả!
Để giới hạn lại số dòng hay cột ẩn khi chạy code thì số dòng trong các sheet không quá 5.000 dòng và số cột thì không quá cột CZ
Public Sub GPE()
Dim Ws As Worksheet, Col As Long, Rws As Long, I As Long
For Each Ws In ThisWorkbook.Worksheets
With Ws
Col = .UsedRange.Columns.Count
Rws = .UsedRange.Rows.Count
For I = Col To 1 Step -1
If .Cells(1, I).EntireColumn.Hidden = True Then .Cells(1, I).EntireColumn.Delete
Next I
For I = Rws To 1 Step -1
If .Cells(I, 1).EntireRow.Hidden = True Then .Cells(I, 1).EntireRow.Delete
Next I
End With
Next Ws
End Sub
Em hay kết xuất 1 số sheet gởi cho khách hàng, các sheet này em ẩn đi những gì không cần thiết (tính toán phụ), nhưng khi họ mở file ra và unhide thì họ thắc mắc!Lý do gì bạn phải xóa những cells ẩn thay vì cho hiện nó ra?
Vì các dòng và cột ẩn là tính toán phụ trợ (ví dụ kiểm tra số liệu trên bản chính có đúng không) nên nó sẽ không ảnh hưởng gì hết ạ.Việc xóa dòng, cột trong bảng tính đôi khi ảnh hưởng nghiêm trọng đến các liên kết công thức nên bạn phải thật cẩn thận.
Nhờ Thầy xem lại giúp em, em cảm ơn!.Cells(1, I).EntireColumn.Delete
Em gởi file đính kèmBạn đưa cái file chạy lỗi lên đây xem.
Người ta phải giữ bản gốc lại làm chứng. Chỉ copy phần không ẩn sang file khác thôi.Em hay kết xuất 1 số sheet gởi cho khách hàng, các sheet này em ẩn đi những gì không cần thiết (tính toán phụ), nhưng khi họ mở file ra và unhide thì họ thắc mắc!
Và cũng có nhiều người thắc mắc tại sao không xóa nó đi mà che lại!...
Vì các dòng và cột ẩn là tính toán phụ trợ (ví dụ kiểm tra số liệu trên bản chính có đúng không) nên nó sẽ không ảnh hưởng gì hết ạ.
Bạn đảo thứ tự xóa dòng trước xem sao, không biết trong mấy cái "ẩn" của bạn có gì.Em gởi file đính kèm
For I = Rws To 1 Step -1
If .Cells(I, 1).EntireRow.Hidden = True Then .Cells(I, 1).EntireRow.Delete
Next I
For I = Col To 1 Step -1
If .Cells(1, I).EntireColumn.Hidden = True Then .Cells(1, I).EntireColumn.Delete
Next I
File đang ở chế độ filter chứ đâu phải ẩn gì chứ. Thêm cái ShowAllData vào:Em gởi file đính kèm
Public Sub GPE()
Dim Ws As Worksheet, Col As Long, Rws As Long, I As Long
For Each Ws In ThisWorkbook.Worksheets
With Ws
If .FilterMode = True Then .ShowAllData
Col = .UsedRange.Columns.Count
Rws = .UsedRange.Rows.Count
For I = Col To 1 Step -1
If .Cells(1, I).EntireColumn.Hidden = True Then .Cells(1, I).EntireColumn.Delete
Next I
For I = Rws To 1 Step -1
If .Cells(I, 1).EntireRow.Hidden = True Then .Cells(I, 1).EntireRow.Delete
Next I
End With
Next Ws
End Sub
Híc! Cắm đầu vào code mà không xem file.File đang ở chế độ filter chứ đâu phải ẩn gì chứ. Thêm cái ShowAllData vào:
Mã:Public Sub GPE() Dim Ws As Worksheet, Col As Long, Rws As Long, I As Long For Each Ws In ThisWorkbook.Worksheets With Ws If .FilterMode = True Then .ShowAllData Col = .UsedRange.Columns.Count Rws = .UsedRange.Rows.Count For I = Col To 1 Step -1 If .Cells(1, I).EntireColumn.Hidden = True Then .Cells(1, I).EntireColumn.Delete Next I For I = Rws To 1 Step -1 If .Cells(I, 1).EntireRow.Hidden = True Then .Cells(I, 1).EntireRow.Delete Next I End With Next Ws End Sub
Hi... Hi... em thấy nhưng cứ.. kệ. Nếu là yêu cầu "XÓA NHỮNG DÒNG ẨN DO FILTER" thì đó lại là bài toán hoàn toàn khác + code khácYêu cầu Ẩn dòng "phá sản", chẳng có dòng nào bị Hide.
Vì em nghỉ Filter để ẩn dòng thì nó # ẩn dòng, nên em mới hỏiNếu là yêu cầu "XÓA NHỮNG DÒNG ẨN DO FILTER" thì đó lại là bài toán hoàn toàn khác + code khác
thì đúng là nó khác màVì em nghỉ Filter để ẩn dòng thì nó # ẩn dòng, nên em mới hỏi
Code theo nguyên tắc:Vậy cho em hỏi có cách nào xóa các dòng hoặc cột mà đã ẩn = Filter không ạ!
Chạy codeVì em nghỉ Filter để ẩn dòng thì nó # ẩn dòng, nên em mới hỏi
Xin lỗi vì đã làm mất thời gian của các thầy & anh
Vậy cho em hỏi có cách nào xóa các dòng hoặc cột mà đã ẩn = Filter không ạ!
Sub GPE()
Dim Ws As Worksheet, i As Long
Dim cRng As Range, rRng As Range
For Each Ws In ThisWorkbook.Worksheets
With Ws.UsedRange
For i = 1 To .Columns.Count
If .Cells(1, i).EntireColumn.Hidden = True Then
If cRng Is Nothing Then Set cRng = .Cells(1, i) Else Set cRng = Union(cRng, .Cells(1, i))
End If
Next i
For i = 1 To .Rows.Count
If .Cells(i, 1).EntireRow.Hidden = True Then
If rRng Is Nothing Then Set rRng = .Cells(i, 1) Else Set rRng = Union(rRng, .Cells(i, 1))
End If
Next i
If Ws.FilterMode = True Then Ws.ShowAllData
If Not cRng Is Nothing Then cRng.EntireColumn.Delete: Set cRng = Nothing
If Not rRng Is Nothing Then rRng.EntireRow.Delete: Set rRng = Nothing
End With
Next Ws
End Sub
Bạn cho hỏi thêm có cách nào xóa luôn các dòng hay cột đang Group (đang Group, nghĩa là đang ở chế độ hide )không?Chạy codeMã:Sub GPE() Dim Ws As Worksheet, i As Long Dim cRng As Range, rRng As Range For Each Ws In ThisWorkbook.Worksheets With Ws.UsedRange For i = 1 To .Columns.Count If .Cells(1, i).EntireColumn.Hidden = True Then If cRng Is Nothing Then Set cRng = .Cells(1, i) Else Set cRng = Union(cRng, .Cells(1, i)) End If Next i For i = 1 To .Rows.Count If .Cells(i, 1).EntireRow.Hidden = True Then If rRng Is Nothing Then Set rRng = .Cells(i, 1) Else Set rRng = Union(rRng, .Cells(i, 1)) End If Next i If Ws.FilterMode = True Then Ws.ShowAllData If Not cRng Is Nothing Then cRng.EntireColumn.Delete: Set cRng = Nothing If Not rRng Is Nothing Then rRng.EntireRow.Delete: Set rRng = Nothing End With Next Ws End Sub