Chào bạn bạn đọc bài viết sau nhé
em đã thử hết rồi nhưng nó vẫn bị chậm ạ. Thầy có thể xem giúp em xem đoạn code của em có bị lỗi chỗ nào ko ạ:
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
Application.EnableEvents = False
With Sheet1
.Range("A5").CurrentRegion.Delete
.Range("A5").Interior.ColorIndex = 3
.Range("A5").Value = "HO TEN"
.Range("B5").Value = "STK"
.Range("C5").Value = "ST"
.Range("D5").Value = "NH"
.Range("E5").Value = "ND"
End With
For i = 4 To Sheets.Count
Sheets(i).Range("A1").AutoFilter
Sheets(i).Range("A1:AZ50000").Value = Sheets(i).Range("A1:AZ50000").Value
For lp = 256 To 1 Step -1
If Sheets(i).Columns(lp).EntireColumn.Hidden = True Then
Sheets(i).Columns(lp).EntireColumn.Delete
End If
Next lp
Dim rg As Range
Dim criterial_rg As Range
Dim copy_rg As Range
lri = Sheet1.Cells(Rows.Count, 1).End(xlUp).Row
Set rg = Sheets(i).Range("A1").CurrentRegion
Set criterial_rg = Sheet1.Range("A1:E2")
Set copy_rg = Sheet1.Range("A" & lri & ":E" & lri)
rg.AdvancedFilter xlFilterCopy, criterial_rg, copy_rg
lru = Sheet1.Cells(Rows.Count, 1).End(xlUp).Row + 1
With Sheet1
.Range("A" & lru).Value = "HO TEN"
.Range("B" & lru).Value = "STK"
.Range("C" & lru).Value = "ST"
.Range("D" & lru).Value = "NH"
.Range("E" & lru).Value = "ND"
End With
Next i
Application.ScreenUpdating = True
Application.Calculation = xlCalculationAutomatic
Application.EnableEvents = True
End Sub
code chạy chậm do logic (quy trình thực hiện) của code phức tạp.
Bạn thực hiện vòng lặp qua các sheet, trong mỗi sheet lại làm nhiều thao tác vòng lặp nhỏ hơn liên quan tới lọc, xóa cột ẩn... => những điều này làm excel chạy chậm.
Bạn có thể nghĩ quy trình đơn giản hơn để làm việc này nhé. Đây là vấn đề liên quan tới tư duy lập trình nên bạn cần suy nghĩ để tự thay đổi thôi.