Xin đoạn code cải thiện tốc độ cho file khoảng 2000 dòng

Liên hệ QC

tuandat106

Thành viên mới
Tham gia
19/4/11
Bài viết
49
Được thích
2
Việc là em có đoạn code chạy trong file excel. nó chạy ổn, tuy nhiên tốc độ nó ko dc tốt lắm, nó bị đơ khoảng 4s sau khi thực hiện xong.
Mong các anh chị tối ưu giúp. em cảm ơn.
Vùng L5:R5 em có đặt công thức sumifs. dữ liệu em chạy khoảng 2k dòng.
"
Sub TINH_LIST()
Application.ScreenUpdating = False
Range("L5:R5").Select
Range(Selection, Selection.End(xlDown)).Select
Selection.FillDown
Range("L6").Select
Range(Selection, Selection.End(xlToRight)).Select
Range(Selection, Selection.End(xlDown)).Select
Selection.Copy
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Application.CutCopyMode = False
Range("L5").Select
Application.ScreenUpdating = True
End Sub
"
 
Việc là em có đoạn code chạy trong file excel. nó chạy ổn, tuy nhiên tốc độ nó ko dc tốt lắm, nó bị đơ khoảng 4s sau khi thực hiện xong.
Mong các anh chị tối ưu giúp. em cảm ơn.
Vùng L5:R5 em có đặt công thức sumifs. dữ liệu em chạy khoảng 2k dòng.
"
Sub TINH_LIST()
Application.ScreenUpdating = False
Range("L5:R5").Select
Range(Selection, Selection.End(xlDown)).Select
Selection.FillDown
Range("L6").Select
Range(Selection, Selection.End(xlToRight)).Select
Range(Selection, Selection.End(xlDown)).Select
Selection.Copy
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Application.CutCopyMode = False
Range("L5").Select
Application.ScreenUpdating = True
End Sub
"
Tiếc gì không đính kèm file luôn? Để xem mặt mặt công thức nó thế nào để bỏ filldown đi
 
Upvote 0
Định vào làm thử mà sợ giang hồ đồn mình tự nhận là "cao nhân" nên thôi...
p/s: Ah, có "cao nhân" vào rồi...
 
Upvote 0
Upvote 0
Chỉ có 4s (s chắc là giây) mà tối ưu chi. Mất ít nhất là 4 phút.

Cao nhơn còn tuỳ theo cao chỗ nào. Cao chỗ cắm cúi sửa code hay chỗ thực tế.
 
Upvote 0
Sửa "cao nhân" thành "cố nhân" đi bạn. Mấy chục cái xuân xanh, đếm sơ sơ mình làm "cố nhân" cũng gần chục lần rồi, nên nhiều kinh nghiệm lắm.
Đùa thôi, "Xin đoạn code cải thiện tốc độ cho file khoảng 2000 dòng" là gợi ý đổi tiêu đề.
 
Upvote 0
99% thời gian là tính toán cho công thức có hàm SUMIFS rồi.
 
Upvote 0
Dạ em sửa lại tiêu đề rồi ạ, mong các anh chị giúp đỡ
 
Upvote 0
em gửi file lên đây, mong các anh chị xem có thể sử dụng công thức không cần filldown ko.
 

File đính kèm

  • KHO-giaiphap.xlsm
    869.4 KB · Đọc: 13
Upvote 0
em gửi file lên đây, mong các anh chị xem có thể sử dụng công thức không cần filldown ko.
Code record của bạn mình thử trên máy mình có 0.9s chứ đâu đến nỗi 4s (core i3 thôi)
File này dùng filldown cũng ổn rồi, chứ code mảng bạn không biết chỉnh sửa đâu lại đi hỏi
Mình sửa lại tí cho nó gọn code thôi:
Mã:
Sub TINH_LIST()
Dim Lr As Long
With Sheets("List")
    Lr = .Cells(Rows.Count, 1).End(xlUp).Row - 1
    If Lr < 6 Then Exit Sub
    .Range("L5:R" & Lr).FillDown
    .Range("L6:R" & Lr).Value = .Range("L6:R" & Lr).Value
End With
End Sub
 
Upvote 0
Việc là em có đoạn code chạy trong file excel. nó chạy ổn, tuy nhiên tốc độ nó ko dc tốt lắm, nó bị đơ khoảng 4s sau khi thực hiện xong.
Mong các anh chị tối ưu giúp. em cảm ơn.
Vùng L5:R5 em có đặt công thức sumifs. dữ liệu em chạy khoảng 2k dòng.
"
Sub TINH_LIST()
Application.ScreenUpdating = False
Range("L5:R5").Select
Range(Selection, Selection.End(xlDown)).Select
Selection.FillDown
Range("L6").Select
Range(Selection, Selection.End(xlToRight)).Select
Range(Selection, Selection.End(xlDown)).Select
Selection.Copy
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Application.CutCopyMode = False
Range("L5").Select
Application.ScreenUpdating = True
End Sub
"
Thêm Application.Calculation = xlCalculationManual ở đầu code và Application.Calculation = xlCalculationAutomatic cuối code thì cải thiện được đáng kể
 
Upvote 0
Thêm Application.Calculation = xlCalculationManual ở đầu code và Application.Calculation = xlCalculationAutomatic cuối code thì cải thiện được đáng kể
Mấy cái này bạn đâu có thay đổi tuỳ thích được.
Trước khi Application.Calculation = xlCalculationManual, bạn phải Saved_CalcMode = Application.Calculation.
Cuối code Application.Calculation = Saved_CalcMode
 
Upvote 0
Web KT

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

Back
Top Bottom