Cần giúp đở xử lý data trên 600.000 dòng

Liên hệ QC

thunghe

Thành viên mới
Tham gia
22/6/11
Bài viết
15
Được thích
0
Mình có 1 file excell với data trên 600.000 dòng.Mình lập trình bằng vba để xử lý data nhưng chạy rất chậm hoặc thâm chí đứng máy luôn có ai biết cách xin chỉ giúp
Vì file tới 38MB nên mình attach lên ko được.Các bạn thông cảm cho
Đề là chuyển data từ vùng price sang data với cột mã được sắp xếp lại theo kiểu cùng tên
Ai biết xin chỉ cách khắc phục.Thanks
 
Lần chỉnh sửa cuối:
Đề bài rõ ràng hơn đi bạn! Ít nhất cũng up được cái file lên chứ!
 
Upvote 0
Mình có 1 file excell với data trên 600.000 dòng.Mình lập trình bằng vba để xử lý data nhưng chạy rất chậm hoặc thâm chí đứng máy luôn có ai biết cách xin chỉ giúp.Cảm ơn
Với 600.000 dòng bạn dùng VBA.Nếu không dùng ADO.Mà vấn đề mình chưa thấy cái file với 60 dòng và code của bạn đâu.Ai biết bạn viết code kiểu gì mà bắt bệnh.
 
Upvote 0
sory bạn mình mới sửa lại :)
Bài đã được tự động gộp:

Với 600.000 dòng bạn dùng VBA.Nếu không dùng ADO.Mà vấn đề mình chưa thấy cái file với 60 dòng và code của bạn đâu.Ai biết bạn viết code kiểu gì mà bắt bệnh.
code mình đây
---------------------------------------------------------------------------
Sub thu()
Dim i, j, k As Long
Dim mang(1 To 770000, 1 To 7) As Variant
Dim t As Byte
Dim sdata, da As Range
Dim ten As String
Set sdata = Sheets("a").Range("price")
Set da = Sheets("a").Range("data")
Do
i = i + 1
If sdata.Cells(i, 1) <> 0 Then
ten = sdata.Cells(i, 1)
k = i
Do
If ten = sdata.Cells(k, 1) Then
j = j + 1
For t = 1 To 7
da.Cells(j, t) = sdata.Cells(k, t)
Next
sdata.Cells(k, 1).ClearContents
End If
k = k + 1
Loop While sdata.Cells(k, 2) <> 0
End If
Loop While sdata.Cells(i + 1, 2) <> 0
End Sub
 
Upvote 0
Theo tôi hiểu thì sort 1 cái là xong!
 
Upvote 0
sory bạn mình mới sửa lại :)
Bài đã được tự động gộp:


code mình đây
---------------------------------------------------------------------------
Sub thu()
Dim i, j, k As Long
Dim mang(1 To 770000, 1 To 7) As Variant
Dim t As Byte
Dim sdata, da As Range
Dim ten As String
Set sdata = Sheets("a").Range("price")
Set da = Sheets("a").Range("data")
Do
i = i + 1
If sdata.Cells(i, 1) <> 0 Then
ten = sdata.Cells(i, 1)
k = i
Do
If ten = sdata.Cells(k, 1) Then
j = j + 1
For t = 1 To 7
da.Cells(j, t) = sdata.Cells(k, t)
Next
sdata.Cells(k, 1).ClearContents
End If
k = k + 1
Loop While sdata.Cells(k, 2) <> 0
End If
Loop While sdata.Cells(i + 1, 2) <> 0
End Sub
Bạn cho cái file lên nhé.Và giải thích yêu cầu của mình.Code của bạn nó có nhiều vòng lặp lồng nhau nên sẽ bị chậm nhé.
 
Upvote 0
mình giải quyết được rồi.Thanks các bác rất nhiều
 
Upvote 0
data này lớn dùng sort và copy past cũng ko được nên chuyển qua dùng acces
 
Upvote 0
Nể tính năng Sort của Excel thiệt, gần 770,000 dòng mà nó sort trong tích tắc. VBA thì đừng có mơ mà đua với nó.
Sort xong Remove Duplicates đi bạn, tui remove được 2556 dòng trùng đó.
 
Upvote 0
Đổi qua Access là việc thiên kinh địa nghĩa, khong còn gì để nói.
Tuy nhiên, nếu vẫn còn luyến tiếc ba cái chức nămg của Excel thì nghiên cứu thử cái này
 
Upvote 0
sory bạn mình mới sửa lại :)
Bài đã được tự động gộp:


code mình đây
---------------------------------------------------------------------------
Sub thu()
Dim i, j, k As Long
Dim mang(1 To 770000, 1 To 7) As Variant
Dim t As Byte
Dim sdata, da As Range
Dim ten As String
Set sdata = Sheets("a").Range("price")
Set da = Sheets("a").Range("data")
Do
i = i + 1
If sdata.Cells(i, 1) <> 0 Then
ten = sdata.Cells(i, 1)
k = i
Do
If ten = sdata.Cells(k, 1) Then
j = j + 1
For t = 1 To 7
da.Cells(j, t) = sdata.Cells(k, t)
Next
sdata.Cells(k, 1).ClearContents
End If
k = k + 1
Loop While sdata.Cells(k, 2) <> 0
End If
Loop While sdata.Cells(i + 1, 2) <> 0
End Sub
Code của bạn thao tác trên sheet quá nhìu, lấy dữ liệu vào array rồi xử lý trong đó, ra kết quả thì in xuống lại sheet.
 
Upvote 0
Web KT
Back
Top Bottom