Build VBA code để tính cho nhanh

Liên hệ QC

crahogaho

Thành viên mới
Tham gia
5/10/13
Bài viết
2
Được thích
0
Xin chào mọi người.

Mình có 1 file có tới 300.000 row x 50 column data, mỗi lần calculate thì rất lâu, khoảng 30 phút đến 1 tiếng đồng hồ, trong khi công thức thì chỉ loanh quanh vloookup, hlookup sang sheet khác, cộng trừ nhân chia thôi.

Để đẩy nhanh thời gian thì mình có viết 1 vba, vì đặc điểm chung là các dòng đều có formula framework giống nhau, nên mình đặt 1 row làm formula gốc. Sau đó copy rồi paste formula, cho tính toán. Nhưng tình hình là nó ko chịu copy paste chứ đừng nói gì là tính. Mình không rõ mình sai lỗi nào, vì mình record macro thì cấu trúc vẫn giống như code mình build.

Các bạn có suggest gì để sửa lỗi này hoặc giúp mình đạt được mục tiêu trên không ạ ?

Xin chân thành cảm ơn

Đây là code của mình:

Dim n As Long

With ThisWorkbook.Worksheets(1)
n = .Range(Cells(3, 2), Cells(3, 2).End(xlDown)).Rows.Count
.Range(Cells(3, 3), Cells(3, 36)).Copy
.Range(Cells(4, 3), Cells(n + 2, 36)).PasteSpecial Paste:=xlPasteFormulas, Operation:=xlNone, SkipBlanks:=False
.Calculate
.Range(Cells(4, 3), Cells(n + 2, 36)).Value = .Range(Cells(4, 3), Cells(n + 2, 36)).Value2
End With

With ThisWorkbook.Worksheets(9)
n = .Range(Cells(3, 1), Cells(3, 1).End(xlDown)).Rows.Count
.Range(Cells(3, 13), Cells(3, 44)).Copy
.Range(Cells(4, 13), Cells(n + 2, 44)).PasteSpecial Paste:=xlPasteFormulas, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
.Calculate
.Range(Cells(4, 13), Cells(n + 2, 44)).Value = .Range(Cells(4, 13), Cells(n + 2, 44)).Value2
End With
 
Cách này đâu có nhanh hơn hả bạn!
 
Upvote 0
Mình biết, chỉ là 1 cách thủ công hơn thôi. Vì mình nghe nói tính bằng code thì sẽ nhanh hơn khi excel tự tính, sau đó mình để kết quả ở dạng value hết thì save sẽ nhanh hơn. Mình mới học VBA thôi không biết nhiều thủ thuật, mình tham khảo các thủ thuật như updatescreen hay manual calculation cũng áp dụng trong code VBA của mình rồi í.

Bạn có suggest gì không ạ :D
 
Upvote 0
Web KT
Back
Top Bottom