Xin nhờ các Anh/Chị giúp em sửa đoạn code để chạy nhanh hơn !

Liên hệ QC

Yugi_Nguyễn

Thành viên mới
Tham gia
23/5/19
Bài viết
32
Được thích
1
Giới tính
Nam
Chà các Anh/Chị trên diễn đàn !
Em xin nhờ mn xem giúp em 1 đoạn code. hiện tại code chạy vẫn bình thường nhưng nó khá chậm
Nhờ Anh/Chị xem giúp em có thể sửa cách nào để nó chạy nhanh không ạ
Em cảm ơn
Đoạn code của em như sau ạ

Sub Sao_chep_du_lieu()
Dim x As Integer
Dim y As Integer
For x = 19 To 35
For y = 6 To 10
If Sheet5.Cells(x, y).value = 0 Then
Sheet5.Cells(x, y + 5).value = ""
Else
Sheet5.Cells(x, y + 5).value = Sheet5.Cells(x, y).value
End If
Next y
Next x
End Sub
 
Chà các Anh/Chị trên diễn đàn !
Em xin nhờ mn xem giúp em 1 đoạn code. hiện tại code chạy vẫn bình thường nhưng nó khá chậm
Nhờ Anh/Chị xem giúp em có thể sửa cách nào để nó chạy nhanh không ạ
Em cảm ơn
Đoạn code của em như sau ạ

Sub Sao_chep_du_lieu()
Dim x As Integer
Dim y As Integer
For x = 19 To 35
For y = 6 To 10
If Sheet5.Cells(x, y).value = 0 Then
Sheet5.Cells(x, y + 5).value = ""
Else
Sheet5.Cells(x, y + 5).value = Sheet5.Cells(x, y).value
End If
Next y
Next x
End Sub
Có nhiêu đó dòng cột thì trong nháy mắt là code chạy xong rồi, cần gì phải sửa thêm chi cho phức tạp.
 
Upvote 0
Bài này khả năng chậm là do cập nhật xuống bảng tính thì bảng tính tính toán công thức cho vùng khác, thử đầu sub thêm: Application.Calculation = xlCalculationManual và cuối sub thêm: Application.Calculation=xlCalculationAutomatic
 
Upvote 0
Viết thế này nhanh hơn nếu dữ liệu nhiều vì sử lý trên mảng.

Mã:
Sub Sao_chep_du_lieu()
Dim x, y, Tm
Application.ScreenUpdating = False
Tm = Sheet5.[F19:O35]
For x = 1 To 16
For y = 1 To 4
If Tm(x, y) = 0 Then
Tm(x, y + 5) = ""
Else
Tm(x, y + 5) = Tm(x, y)
End If
Next y
Next x
Sheet5.[F19:O35] = Tm
Application.ScreenUpdating = True
End Sub
 
Lần chỉnh sửa cuối:
Upvote 0
Viết thế này nhanh hơn nếu dữ liệu nhiều vì sử lý trên mảng.

Mã:
Sub Sao_chep_du_lieu()
Dim x, y, Tm
Application.ScreenUpdating = False
Tm = Sheet5.[F19:O35]
For x = 1 To 16
For y = 1 To 4
If Tm(x, y) = 0 Then
Tm(x, y + 5) = ""
Else
Tm(x, y + 5) = Tm(x, y)
End If
Next y
Next x
Sheet5.[F19:O35] = Tm
Application.ScreenUpdating = True
End Sub
Bài này chỉ đơn thuần là bỏ giá trị 0 về rỗng thì em nghĩ như thế này là đủ, không cần khúc "Tm(x, y + 5) = Tm(x, y)":
Mã:
Sub Sao_chep_du_lieu()
Dim x&, y&, Tm()
Tm = Sheet5.[F19:J35].Value
For x = 1 To UBound(Tm)
    For y = 1 To UBound(Tm, 2)
        If Tm(x, y) = 0 Then Tm(x, y) = ""
    Next
Next
Sheet5.[K19].Resize(UBound(Tm), UBound(Tm, 2)) = Tm
End Sub
 
Upvote 0
Bài này chỉ đơn thuần là bỏ giá trị 0 về rỗng thì em nghĩ như thế này là đủ, không cần khúc "Tm(x, y + 5) = Tm(x, y)":
Mã:
Sub Sao_chep_du_lieu()
Dim x&, y&, Tm()
Tm = Sheet5.[F19:J35].Value
For x = 1 To UBound(Tm)
For y = 1 To UBound(Tm, 2)
If Tm(x, y) = 0 Then Tm(x, y) = ""
Next
Next
Sheet5.[K19].Resize(UBound(Tm), UBound(Tm, 2)) = Tm
End Sub
Hì, đôi khi "" khác 0 đấy, mình cũng nhấn nhá vậy thôi, chủ topic liệu mà tham khảo phương án làm.
 
Upvote 0
Viết thế này nhanh hơn nếu dữ liệu nhiều vì sử lý trên mảng.

Mã:
Sub Sao_chep_du_lieu()
Dim x, y, Tm
Application.ScreenUpdating = False
Tm = Sheet5.[F19:O35]
For x = 1 To 16
For y = 1 To 4
If Tm(x, y) = 0 Then
Tm(x, y + 5) = ""
Else
Tm(x, y + 5) = Tm(x, y)
End If
Next y
Next x
Sheet5.[F19:O35] = Tm
Application.ScreenUpdating = True
End Sub
Cảm ơn anh
Anh cho em hỏi mảng F19:J35 của em có công thức
Khi chạy code đó công thức của em sẽ bị mất
nhờ anh sửa lại giúp em để mảng F19:J35 của em không thay đổi với ạ
cảm ơn anh
Bài đã được tự động gộp:

Hì, đôi khi "" khác 0 đấy, mình cũng nhấn nhá vậy thôi, chủ topic liệu mà tham khảo phương án làm.
Em cảm ơn anh đã giúp đỡ ạ
Bài đã được tự động gộp:

Bài này chỉ đơn thuần là bỏ giá trị 0 về rỗng thì em nghĩ như thế này là đủ, không cần khúc "Tm(x, y + 5) = Tm(x, y)":
Mã:
Sub Sao_chep_du_lieu()
Dim x&, y&, Tm()
Tm = Sheet5.[F19:J35].Value
For x = 1 To UBound(Tm)
    For y = 1 To UBound(Tm, 2)
        If Tm(x, y) = 0 Then Tm(x, y) = ""
    Next
Next
Sheet5.[K19].Resize(UBound(Tm), UBound(Tm, 2)) = Tm
End Sub
Em cảm ơn anh đã giúp đỡ nhé
 
Upvote 0
Cảm ơn anh
Anh cho em hỏi mảng F19:J35 của em có công thức
Khi chạy code đó công thức của em sẽ bị mất
nhờ anh sửa lại giúp em để mảng F19:J35 của em không thay đổi với ạ
cảm ơn anh
Tôi hiểu là trên sheet có công thức, nếu sửa trực tiếp thì khi thỏa điều kiện có xóa công thức không? Nếu không xóa công thức thì ô liên quan tính theo công thức hay kết quả tính toán của code?
 
Lần chỉnh sửa cuối:
Upvote 0
Có nhiêu đó dòng cột thì trong nháy mắt là code chạy xong rồi, cần gì phải sửa thêm chi cho phức tạp.
Phức tạp cho người viết code chứ đâu có phải cho người nhận code?
Hỏi một tiếng, người ta viết giùm, tét giùm, chỉnh sửa giùm hết. Tội gì không vòi đồ "càng phức tạp càng trông xịn".
 
Upvote 0
@sealand Lâu lắm mới thấy vào bờ, chắc vì bầu cữ!
 
Upvote 0
Tôi hiểu điều bạn muốn rồi
Mã:
Sub Sao_chep_du_lieu()
Dim x, y, Tm
Application.ScreenUpdating = False
Tm1 = Sheet5.[F19:J35]
Tm2 = Sheet5.[K19:O35]
For x = 1 To 16
For y = 1 To 4
If Tm1(x, y) = 0 Then
Tm2(x, y) = ""
Else
Tm2(x, y) = Tm1(x, y)
End If
Next y
Next x
Sheet5.[K19:O35] = Tm2
Application.ScreenUpdating = True
End Sub
Bài đã được tự động gộp:

@sealand Lâu lắm mới thấy vào bờ, chắc vì bầu cữ!
Em chào bác, lâu nay vẫn khỏe chứ bác. Em có thay đổi công tác (Em hưu rồi) không thường xuyên vào thăm anh em được. Lâu lâu mò về xem sao cho đỡ nhớ, đừng tưởng nhầm trộm nha!!!
Bài đã được tự động gộp:

Phức tạp cho người viết code chứ đâu có phải cho người nhận code?
Hỏi một tiếng, người ta viết giùm, tét giùm, chỉnh sửa giùm hết. Tội gì không vòi đồ "càng phức tạp càng trông xịn".
Chào bác nha, em vẫn rất thích bài bác viết, nhưng giọng văn bác thì tức như bò đá ấy!!! (Ngày trước nhà mình có SIWTOM cũng giống thế này)
 
Lần chỉnh sửa cuối:
Upvote 0
...
Chào bác nha, em vẫn rất thích bài bác viết, nhưng giọng văn bác thì tức như bò đá ấy!!! (Ngày trước nhà mình có SIWTOM cũng giống thế này)
Tôi không hề chối việc mình có thành kiến, không thích những người lười biếng, ỷ lại và/hoặc cẩu thả. :p
Tuy nhiên, nếu gặp người biết cách hỏi hoặc tôi nhận ra người hiếu học thì tôi trả lời rất êm và bảo đảm là rõ rệt hơn sách vở.
 
Upvote 0
Upvote 0
Web KT

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

Back
Top Bottom