Ẩn dòng rổng

Liên hệ QC

tranttoan

Thành viên mới
Tham gia
1/8/09
Bài viết
42
Được thích
19
Tôi mới biết ít về VBA, và có viết 1 code để ẩn những dòng không chứa dữ liệu ( nhưng có thể có công thức tính ) nhưng vẫn báo lỗi dòng Next i . Do đó nhờ các bác cao thủ trong GPE chỉ giúp. Xin Cảm ơn các bác nhiều. File đính kèm Các Bác xem giúp !
Dưới đây là Code
PHP:
 Private Sub Worksheet_Activate()
Dim i As Integer
Dim FirstRow As Integer, LastRow As Integer, UsedRows As Integer
 
Application.ScreenUpdating = False
FirstRow = ActiveSheet.UsedRange.Row
UsedRows = ActiveSheet.UsedRange.Row.Count
LastRow = FirstRow - 1 + UsedRows
For i = LastRow To 1 Step -1
    If Application.CountA(Rows(i)) = 0 Then
           Rows(i).Hide
Next i
Application.ScreenUpdating = True
End Sub
 

File đính kèm

Chỉnh sửa lần cuối bởi điều hành viên:
Bạn thử code này nhé (Tốt nhất nên chỉ định sheet cụ thể tránh ẩn ở trang không cần thiết)
Mã:
Private Sub Worksheet_Activate()
Dim Rng As Range
Dim i As Integer
Dim FirstRow As Integer, LastRow As Integer, UsedRows As Integer
Application.ScreenUpdating = False
Set Rng = Sheet1.UsedRange
FirstRow = Rng.Item(1, 1).Row
 LastRow = FirstRow + Rng.Rows.Count - 1
For i = FirstRow To LastRow
If Application.WorksheetFunction.CountA(Rows(i)) = 0 Then
Rows(i).EntireRow.Hidden = True
Else
Rows(i).EntireRow.Hidden = False
End If
Next
Application.ScreenUpdating = True
End Sub
 
Lần chỉnh sửa cuối:
Upvote 0
Không hiểu lắm về các tính năng mà pro đang trình bày. Tôi lấy về và thử dùng vẫn không thấy hiệu ứng gì cả, vậy cái này để làm gi? Có thể nói rõ được không?
 
Upvote 0
Cảm ơn bác sealand rất nhiều đã chỉ dẫn cụ thể , nhưng bác ơi code này chỉ chạy khi dữ liệu nhập vào, còn khi là công thức lấy dữ liệu từ Sheet khác thì code này không thực thi ( như mình đã trình bày ờ trên là có thể công thức tính). Bác có thể xem giúp mình lần nữa nhé.Mình có file đính kèm để bác thử
Cảm ơn bác
 

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
Cảm ơn bác sealand rất nhiều đã chỉ dẫn cụ thể , nhưng bác ơi code này chỉ chạy khi dữ liệu nhập vào, còn khi là công thức lấy dữ liệu từ Sheet khác thì code này không thực thi ( như mình đã trình bày ờ trên là có thể công thức tính). Bác có thể xem giúp mình lần nữa nhé.Mình có file đính kèm để bác thử
Cảm ơn bác
Đương nhiên là vậy rồi, ai biểu bạn dùng COUNTA chi, nó đương nhiên là đếm các cell có dử liệu, mà 1 cell bị rổng do công thức cũng được xem là CÓ DỬ LIỆU đấy
Phải dùng COUNTBLANK
Vả lại, code lằng nhằng quá, gì mà FirstRow, LastRow.. tùm lum biến
Bạn đã dùng đến UsedRange, vậy sao không For Each Clls In ActiveSheet.UsedRange.Resize(, 1) cho nó gọn
Vầy đây:
PHP:
Private Sub Worksheet_Activate()
  Dim Clls As Range
  With ActiveSheet.UsedRange
    For Each Clls In .Resize(, 1)
      If WorksheetFunction.CountBlank(Clls.Resize(, .Columns.Count)) = .Columns.Count Then
        Clls.EntireRow.Hidden = True
      Else
       Clls.EntireRow.Hidden = False
      End If
    Next Clls
  End With
End Sub
1 biến Clls là đủ lắm rồi
Nếu muốn rút gọn, cùng lắm là thêm 1 biến nữa... thế này đây:
PHP:
Private Sub Worksheet_Activate()
  Dim Clls As Range, Check As Long
  With ActiveSheet.UsedRange
    For Each Clls In .Resize(, 1)
      Check = WorksheetFunction.CountBlank(Clls.Resize(, .Columns.Count))
      Clls.EntireRow.Hidden = (Check = .Columns.Count)
    Next Clls
  End With
End Sub
Thêm Application.ScreenUpdating = False và Application.ScreenUpdating = True vào đầu và cuối code nếu thấy cần
Ngoài ra với 1 cấu trúc dử liệu đã biết trước, tôi nghĩ dùng Advanced Filter sẽ nhanh hơn!
 
Upvote 0
Chào bác ndu !
Cảm ơn bài viết của bác rất nhiều, đã giải thích cặn kẽ những điều tôi chưa hiểu ( mới tập tành VBA để ứng dụng trong công việc.. ) Code của bác rất tuyệt đúng như ý. Tuy nhiên bác có cách nào cải tiến cho nó chạy nhanh hơn nữa không ( mất khoảng 7 phút )
File của tôi cũng có nhiều ứng dụng chạy VBA nhưng trước đây không mất nhiều thời gian như thế
Sheet ẩn dòng có rất nhiều công thứctinh.
Lấy 11 --> 12 cột và khoảng 1600 dòng
Nếu được bác giúp cải tiến giùm tôi nhé
Cảm ơn bác rất nhiều
Thân chào
 
Upvote 0
tranttoan đã viết:
Chào bác ndu !
Cảm ơn bài viết của bác rất nhiều, đã giải thích cặn kẽ những điều tôi chưa hiểu ( mới tập tành VBA để ứng dụng trong công việc.. ) Code của bác rất tuyệt đúng như ý. Tuy nhiên bác có cách nào cải tiến cho nó chạy nhanh hơn nữa không ( mất khoảng 7 phút )
File của tôi cũng có nhiều ứng dụng chạy VBA nhưng trước đây không mất nhiều thời gian như thế
Sheet ẩn dòng có rất nhiều công thứctinh.
Lấy 11 --> 12 cột và khoảng 1600 dòng
Nếu được bác giúp cải tiến giùm tôi nhé
Cảm ơn bác rất nhiều
Thân chào
Lý ra bạn phải đưa file lên đây thì mới biết được nên dùng giải pháp gì (ý tôi muốn biết cấu trúc dử liệu trong file bạn)
Tuy nhiên bạn có thể tham khảo bài này xem có giúp gì không nha:
http://www.giaiphapexcel.com/forum/showthread.php?t=27073
Tốc độ của code còn phụ thuộc vào rất nhiều yếu tố, chẳng hạn công thức hiện có trong file ---> Bạn xem lại
 
Upvote 0
Web KT

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

Back
Top Bottom