Giúp đỡ code ẩn dòng trong excel

Liên hệ QC

babyheomoi

Thành viên thường trực
Tham gia
22/9/13
Bài viết
396
Được thích
91
Hi mọi người, em có viết code về ẩn dòng có điều kiện trong data của mình.
Tuy nhiên, do sử dụng vòng lặp for...next, nên đối với dữ liệu tầm 5000 dòng em thấy nó load lâu.
Nhờ mọi người giúp em code khác hoặc cải tiến code để chạy lẹ hơn ạ!
Nội dung: em lọc cột AC có giá trị > 0 (cột AC này có thể có giá trị lỗi, text, <0 và =0, >0) - nó là công thức SUM từ các cột khác.
Code của em đây ạ!
Mã:
Sub Claim_conlai()
Sheets("DATA").Select
Dim i, lr
lr = Sheets("DATA").Range("C5000").End(xlUp).Row
    For i = 11 To lr
        If Range("AC" & i).Value > 0 Then
        Rows(i).Hidden = True
    End If
    Next i
 Mgsbox ("DA LOC CLAIM CON PHAI THU")
    
End Sub
Em cám ơn ạ!
 
Hi mọi người, em có viết code về ẩn dòng có điều kiện trong data của mình.
Tuy nhiên, do sử dụng vòng lặp for...next, nên đối với dữ liệu tầm 5000 dòng em thấy nó load lâu.
Nhờ mọi người giúp em code khác hoặc cải tiến code để chạy lẹ hơn ạ!
Nội dung: em lọc cột AC có giá trị > 0 (cột AC này có thể có giá trị lỗi, text, <0 và =0, >0) - nó là công thức SUM từ các cột khác.
Code của em đây ạ!
Em cám ơn ạ!
Thử dùng biểu thức union vùng xem thế nào
 
Upvote 0
dạ, cụ thể sao ạ? em chưa hiểu ý anh lắm.
Thử code này.
Mã:
Sub Claim_conlai()
Dim aCell As Range, Rng As Range
Set Rng = Nothing
With Sheets("DATA")
    For Each aCell In .Range("AC11:AC" & .Range("C5000").End(xlUp).Row)
        If aCell.Value > 0 Then
            If Rng Is Nothing Then
                Set Rng = aCell
            Else
                Set Rng = Union(aCell, Rng)
            End If
        End If
    Next aCell
End With
If Not Rng Is Nothing Then Rng.EntireColumn.Hidden = True
MsgBox ("DA LOC CLAIM CON PHAI THU")
End Sub
 
Upvote 0
Hi mọi người, em có viết code về ẩn dòng có điều kiện trong data của mình.
Tuy nhiên, do sử dụng vòng lặp for...next, nên đối với dữ liệu tầm 5000 dòng em thấy nó load lâu.
Nhờ mọi người giúp em code khác hoặc cải tiến code để chạy lẹ hơn ạ!
Nội dung: em lọc cột AC có giá trị > 0 (cột AC này có thể có giá trị lỗi, text, <0 và =0, >0) - nó là công thức SUM từ các cột khác.
Code của em đây ạ!
Mã:
Sub Claim_conlai()
Sheets("DATA").Select
Dim i, lr
lr = Sheets("DATA").Range("C5000").End(xlUp).Row
    For i = 11 To lr
        If Range("AC" & i).Value > 0 Then
        Rows(i).Hidden = True
    End If
    Next i
 Mgsbox ("DA LOC CLAIM CON PHAI THU")
   
End Sub
Em cám ơn ạ!
Nếu muốn tăng tốc độ thì bạn thử chèn thêm:
Mã:
    Application.ScreenUpdating = False
    Application.Calculation = xlCalculationManual
    '....
    Application.ScreenUpdating = True
    Application.Calculation = xlCalculationAutomatic
ít ra cũng thấy nhanh hơn một chút.
 
Upvote 0
Hi mọi người, em có viết code về ẩn dòng có điều kiện trong data của mình.
Tuy nhiên, do sử dụng vòng lặp for...next, nên đối với dữ liệu tầm 5000 dòng em thấy nó load lâu.
Nhờ mọi người giúp em code khác hoặc cải tiến code để chạy lẹ hơn ạ!
Nội dung: em lọc cột AC có giá trị > 0 (cột AC này có thể có giá trị lỗi, text, <0 và =0, >0) - nó là công thức SUM từ các cột khác.
Code của em đây ạ!
Mã:
Sub Claim_conlai()
Sheets("DATA").Select
Dim i, lr
lr = Sheets("DATA").Range("C5000").End(xlUp).Row
    For i = 11 To lr
        If Range("AC" & i).Value > 0 Then
        Rows(i).Hidden = True
    End If
    Next i
 Mgsbox ("DA LOC CLAIM CON PHAI THU")
   
End Sub
Em cám ơn ạ!
Gửi file lên được ko bạn?
 
Upvote 0
Thử code này.
Mã:
Sub Claim_conlai()
Dim aCell As Range, Rng As Range
Set Rng = Nothing
With Sheets("DATA")
    For Each aCell In .Range("AC11:AC" & .Range("C5000").End(xlUp).Row)
        If aCell.Value > 0 Then
            If Rng Is Nothing Then
                Set Rng = aCell
            Else
                Set Rng = Union(aCell, Rng)
            End If
        End If
    Next aCell
End With
If Not Rng Is Nothing Then Rng.EntireColumn.Hidden = True
MsgBox ("DA LOC CLAIM CON PHAI THU")
End Sub
Code chạy nhanh hơn hẳn. Cám ơn bác.
 
Upvote 0
Web KT
Back
Top Bottom