Làm sao để macro chạy nhanh hơn?

  • Thread starter Thread starter chit62
  • Ngày gửi Ngày gửi
Liên hệ QC

chit62

Thành viên mới
Tham gia
27/6/08
Bài viết
13
Được thích
0
Xin chào, mình vừa viết xong 1 CT để xử lý dử liệu trên Excel, chủ yếu là tìm kiếm , lọc, xử lý, xóa,.. dữ liệu (gần 30.000 dòng)với rất nhiều hàm , đa phần là phải dùng vòng lặp For..to, Do while, Do ..loop until,... nên CT chạy rất chậm Ram 1GB mà chạy tới 5' mới xong, còn 512MB thì đơ luôn. Vậy cho mình hỏi, ai có biết những câu lệnh nào hỗ trợ cho Macro chạy nhanh hơn ko? Hay những kinh nghiệm nào để giúp viết code tối ưu hay ko?
P/s: Xin lỗi các bạn, mình đã gởi nhầm mục, thay vì " các lĩnh vực khác" gởi nhầm " Ứng dụng các lĩnh vực khac", do ko del được nên mong MOD remove dùm, xin cảm ơn!
 
Lần chỉnh sửa cuối:
Vì không thấy macro của bạn nên nói áng chừng thôi vậy:

Nếu có thể ta thay vòng lặp bằng phương thức tìm kiếm:
1 CSDL vạn dòng, nếu được thay vòng lặp bằng phương thức như vậy, đã từng từ 30' xuống còn không quá 20''
1 trong những ví dụ, đó là câu lệnh tìm như sau:

Mã:
  sAddr = AllRng.Find(What:=Clls, After:=Clls, LookIn:=xlValues, _
      LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext).Address

Tuy thấy có vẽ dài, nhưng sẽ đẩy tốc độ tìm kiếm lên 100 lần (Một khi cái cần tìm càng ít trong trường dữ liệu, càng tìm nhanh!)
(Hình như VienDo có kinh nghiệm về vấn đề này!, Bạn thử xin ý kiến bạn í xem sao)
Trong câu lệnh trên, mình đắc ý nhất là mệnh đề: After:=Clls
Diễn nôm: Tìm từ chỗ mà anh vừa tìm thấy (Chứ không phải tìm lại từ đầu!)
 
Upvote 0
Trong câu lệnh trên, mình đắc ý nhất là mệnh đề: After:=Clls
Diễn nôm: Tìm từ chỗ mà anh vừa tìm thấy (Chứ không phải tìm lại từ đầu!)

Bác thử qua cái của Bill, nó chính là FindNext


PHP:
        Set Mang = Sheet3.Range("B5:C60000")
        With Mang
           Set TimThay = .FIND(What:=StrFind)
            If Not TimThay Is Nothing Then
                CellDau = TimThay.Address
                Do
                    If r < TimThay.Row Then
                        r = TimThay.Row
                        MaKhach.LB.AddItem Cells(r, 2)
                        MaKhach.LB.List(i, 1) = Cells(r, 3)
                        i = i + 1
                        Set TimThay = .FindNext(TimThay)
                    End If
                Loop While Not TimThay Is Nothing And CellDau <> TimThay.Address
            End If
        End With
chit62 đã viết:
Xin chào, mình vừa viết xong 1 CT để xử lý dử liệu trên Excel, chủ yếu là tìm kiếm , lọc, xử lý, xóa,.. dữ liệu (gần 30.000 dòng)với rất nhiều hàm , đa phần là phải dùng vòng lặp For..to, Do while, Do ..loop until,... nên CT chạy rất chậm Ram 1GB mà chạy tới 5' mới xong, còn 512MB thì đơ luôn. Vậy cho mình hỏi, ai có biết những câu lệnh nào hỗ trợ cho Macro chạy nhanh hơn ko? Hay những kinh nghiệm nào để giúp viết code tối ưu hay ko?
P/s: Xin lỗi các bạn, mình đã gởi nhầm mục, thay vì " các lĩnh vực khác" gởi nhầm " Ứng dụng các lĩnh vực khac", do ko del được nên mong MOD remove dùm, xin cảm ơn!

Câu hỏi như thể là : Làm thế nào để có thể tiết kiệm được nhiều tiền ???

Với từng trường hợp cụ thể thì sẽ có những phương án cụ thể riêng, đặc biệt là với giải thuật, vì vậy bạn nên đưa ra 1 VD tiêu biểu (có giải thích cặn kẽ) , sau đó mới phân tích rằng : Bạn còn thiếu cái gì ở Code đó. Qua đó bạn mới thấy rõ được.
Chứ 1 câu hỏi chung chung thế rất khó trả lời .

Thân!




Thân!
 
Upvote 0
Web KT

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

Back
Top Bottom