Tốc độ chạy Macro trong Excel 2007

Liên hệ QC

minh duc le

Thành viên mới
Tham gia
9/11/07
Bài viết
18
Được thích
13
Chào mọi người.

Mình có một file excel sử dụng VBA, nếu chạy trong Excel 2003 mất khoảng 5-10 giây nhưng khi chạy trong excel 2007 cần đến gần 1 phút. Lý do là gì vậy? Có cách nào chỉnh lại được không?

Mong nhận được giúp đỡ. Cảm ơn nhiều.
 
Chào mọi người.
Mình có một file excel sử dụng VBA, nếu chạy trong Excel 2003 mất khoảng 5-10 giây nhưng khi chạy trong excel 2007 cần đến gần 1 phút. Lý do là gì vậy? Có cách nào chỉnh lại được không?
Mong nhận được giúp đỡ. Cảm ơn nhiều.
Lý do thì làm sao mà biết được nếu không nhìn thấy FILE + CODE hả bạn
Bạn hỏi thế chả khác nào gọi điện thoại cho thợ sửa xe và nói rằng "Tại sao xe tôi và xe thằng bạn cùng 1 loại mà xe tôi lại chạy chậm hơn" (thằng cha thợ nó mà không CHỬI THỀ mới lạ)
 
Upvote 0
Xin lỗi, nhưng hình như tất cả các macro trong excel 2007 đều chạy rất chậm.

Xem file đính kèm. (Thay đổi số lần lặp trong ô "K8" sheet1. - Chú ý, nếu số quá lớn sẽ chờ lâu lắm.)

Tuy nhiên, nếu dùng excel 2003 với 1000 lần lặp cũng rất nhanh.
 

File đính kèm

  • Test.rar
    24.9 KB · Đọc: 60
Lần chỉnh sửa cuối:
Upvote 0
Xin lỗi, nhưng hình như tất cả các macro trong excel 2007 đều chạy rất chậm.

Xem file đính kèm. (Thay đổi số lần lặp trong ô "K8" sheet1. - Chú ý, nếu số quá lớn sẽ chờ lâu lắm.)

Tuy nhiên, nếu dùng excel 2003 với 1000 lần lặp cũng rất nhanh.

Tôi không biết máy bạn ra sao, tôi đã thử tại ô K8 con số này: "1000000000", chưa tới 1 giây! Tôi đang xài 2007. Vậy bạn kiểm tra lại cấu hình máy!

Thậm chí nó sẽ nhanh hơn nếu bạn thêm Application.ScreenUpdating.

PHP:
Sub Button1_Click()
Application.ScreenUpdating = False
a = Range("k8")
For i = 1 To a
Range("C4").Value = Cells(i + 4, 3)
Range("D4").Value = Cells(i + 4, 4)
Range("E4").Value = Cells(i + 4, 5)
Range("F4").Value = Cells(i + 4, 6)
Range("G4").Value = Cells(i + 4, 7)
Range("H4").Value = Cells(i + 4, 8)
Range("I4").Value = Cells(i + 4, 9)
Range("J4").Value = Cells(i + 4, 10)
Range("k4").Value = Cells(i + 4, 11)
If Range("o4").Value = 1 Then Exit Sub
Next i
Application.ScreenUpdating = True
End Sub
 
Lần chỉnh sửa cuối:
Upvote 0
Xin lỗi, nhưng hình như tất cả các macro trong excel 2007 đều chạy rất chậm.

Xem file đính kèm. (Thay đổi số lần lặp trong ô "K8" sheet1. - Chú ý, nếu số quá lớn sẽ chờ lâu lắm.)

Tuy nhiên, nếu dùng excel 2003 với 1000 lần lặp cũng rất nhanh.
Code của bạn nhìn nó.. sao sao ấy:
PHP:
Sub Button1_Click()
  a = Range("k8")
  For i = 1 To a
    Range("C4").Value = Cells(i + 4, 3)
    Range("D4").Value = Cells(i + 4, 4)
    Range("E4").Value = Cells(i + 4, 5)
    Range("F4").Value = Cells(i + 4, 6)
    Range("G4").Value = Cells(i + 4, 7)
    Range("H4").Value = Cells(i + 4, 8)
    Range("I4").Value = Cells(i + 4, 9)
    Range("J4").Value = Cells(i + 4, 10)
    Range("k4").Value = Cells(i + 4, 11)
    If Range("C4").Value = 1 Then Exit Sub
  Next i
End Sub
Nếu C4 đạt giá trị = 1 thì thoát, bằng ngược lại sẽ lấy theo dòng cuối cùng ---> Thế thì cần quái gì vòng lập cho điên đầu nhỉ ---> Sao không dùng Find method?
Chẳng hạn là:
PHP:
Sub Test()
  Dim FRng As Range
  With Range("C4").Resize([K8] + 1)
    Set FRng = .Offset(1).Find("1", , xlValues, xlWhole)
    If Not FRng Is Nothing Then
      .Resize(1, 9).Value = FRng.Resize(, 9).Value
    Else
      .Resize(1, 9).Value = .Offset([K8]).Resize(1, 9).Value
    End If
  End With
End Sub
Một nhát là ra ---> Nhanh như điện!
 
Lần chỉnh sửa cuối:
Upvote 0
Code trong excel 2007 chạy chậm hơn excel 2003.

Cảm ơn bạn quan tâm, xin lỗi thông tin chưa đầy đủ.

Bạn thử thay đổi giá trị trong ô "C2" và "C3" trong sheet2 lên 35000 và 100000 xem thế nào.

Code của bạn rất hay, tôi cũng mới tập tành viết code nên chưa có nhiều công cụ.
 
Lần chỉnh sửa cuối:
Upvote 0
Cảm ơn bạn quan tâm, xin lỗi thông tin chưa đầy đủ.

Bạn thử thay đổi giá trị trong ô "C2" và "C3" trong sheet2 lên 35000 và 100000 xem thế nào.

Code của bạn rất hay, tôi cũng mới tập tành viết code nên chưa có nhiều công cụ.
Bạn nói cũng đúng, mới học có thể không biết đến Find Method, nhưng chắc phải biết hàm MATCH chứ nhỉ?
Bạn có thể dùng hàm MATCH để tìm số 1, nếu có thì lấy dòng có số 1 này, ngược lại lấy dòng cuối
Thuật toán là vậy (ai lại đi For...) ---> Bài này thậm chí dùng công thức cũng ra
 
Upvote 0
Bạn nói cũng đúng, mới học có thể không biết đến Find Method, nhưng chắc phải biết hàm MATCH chứ nhỉ?
Bạn có thể dùng hàm MATCH để tìm số 1, nếu có thì lấy dòng có số 1 này, ngược lại lấy dòng cuối
Thuật toán là vậy (ai lại đi For...) ---> Bài này thậm chí dùng công thức cũng ra


Thế còn về tốc độ, bạn thấy thế nào. Có cách nào cải thiện không. Minh xài 2007 xong rồi thì không muốn xài 2003 nữa.
 
Upvote 0
Cảm ơn bạn quan tâm, xin lỗi thông tin chưa đầy đủ.

Bạn thử thay đổi giá trị trong ô "C2" và "C3" trong sheet2 lên 35000 và 100000 xem thế nào.

Code của bạn rất hay, tôi cũng mới tập tành viết code nên chưa có nhiều công cụ.
Xin lổi, trong code của bạn có đoạn
If Range("O4").Value = 1 Then Exit Sub
Tôi đọc nhầm thế nào mà thành:
If Range("C4").Value = 1 Then Exit Sub
Vì thế đã hiểu sai và đưa lên code sai hoàn toàn
------------------------
Thế còn về tốc độ, bạn thấy thế nào. Có cách nào cải thiện không.
Tôi thì test thử và không phát hiện có gì khác biệt về tốc độ giữa Excel 2003 và Excel 2007 cả (không biết mọi người thế nào
-----------------------
Minh xài 2007 xong rồi thì không muốn xài 2003 nữa.
Tôi thì ngược lại, đã xài qua Excel 2007 (định bỏ luôn Excel 2003) nhưng sau 1 thời gian thấy nó dở ẹt nên đã thay đổi ý định: Cóc thèm Excel 2007 nữa
 
Upvote 0
Có ai biết cách tăng tốc độ được không, hay excel 2007 là vậy không thểthay đổi được?
 
Upvote 0
Có ai biết cách tăng tốc độ được không, hay excel 2007 là vậy không thểthay đổi được?

Có rất nhiều cách tăng tốc độ.

VD:

Application.ScreenUpdating = False

Application.Calculation = xlCalculationManual

.....v.v... và v.v...

Tuy nhiên, qua code của bạn, như Thầy Ndu nói, nó lủng củng quá, bạn kiểm tra lại code, tránh viết thừa, cần gì viết đó, không nên chọn nhiều .select hoặc .active... Nên chọn With ... end with, không nên dùng IF nhiều v.v...

Bạn cải tiến Code tốt sẽ chạy nhanh thôi.
 
Upvote 0
Chào bạn
- Bạn có thể giúp mình tăng tốc độ cho file macro bên dưới được không?
Cám ơn bạn.
 

File đính kèm

  • Book2.xlsm
    41.4 KB · Đọc: 11
Upvote 0
Chào bạn
- Bạn có thể giúp mình tăng tốc độ cho file macro bên dưới được không?
Cám ơn bạn.
Góp ý cho bạn:
1/ Tôi nhớ không lầm thì bạn cũng đã đăng ké File này ở Topic khác nhưng tôi tìm không ra. Cách tốt nhất là bạn nên mở 1 Topic mới riêng cho mình để được nhiều người trợ giúp hơn.
2/ Bạn muốn làm cái gì? Ở Đâu thì nên cụ thể, rõ ràng để mọi thành viên có giải pháp khác tốt hơn chứ không nên đưa File với một đống code mà không một lời giải thích muốn sử dụng code nào cho vấn đề của bạn (không ai rảnh để đọc hết code đâu).
 
Upvote 0
Web KT

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

Back
Top Bottom