Hỏi về Dictionary với data trên 100K dòng (1 người xem)

Liên hệ QC

Người dùng đang xem chủ đề này

gplantopia

Thành viên mới
Tham gia
5/12/14
Bài viết
20
Được thích
0
Dear anh chị

Em có code này chạy với data dưới 60k dòng thì không sao nhưng khi data lên đến hơn 100K dòng thì bị lỗi

"Run Time Error 1004

Application-defined or object-defined error"


Code như sau ah

Mạng công ty e block e không gửi đc attached file lên mong anh chị thong cảm

Mã:
Sub noimodel()
Application.ScreenUpdating = False
Dim i As Long, k As Long, dic As Object, m As String
Dim sArr(), dArr()
With Sheet1
sArr = .Range(.[A2], .[A200000].End(xlUp).Resize(, 2)).Value
End With
ReDim dArr(1 To UBound(sArr), 1 To UBound(sArr, 2))
Set dic = CreateObject("scripting.dictionary")
For i = 1 To UBound(sArr) - 1
    If Not dic.exists(sArr(i, 2)) Then
        k = k + 1
        dic.Add sArr(i, 2), k
        dArr(k, 1) = sArr(i, 2)
        dArr(k, 2) = sArr(i, 1)
    Else
        m = dic.Item(sArr(i, 2))
        dArr(m, 2) = sArr(i, 1) & "/" & dArr(m, 2)
    End If
Next

With Sheet2
.[A3:B200000].ClearContents
.[A3].Resize(k, 2) = dArr
End With
Application.ScreenUpdating = True
End Sub
 
Em có test thử với dic chỉ có 1 giá trị sArr(I,1) chỉ có một giá trị A nhưng sArr(I,2) có khoảng 1000 giá trị khác nhau thì code bị lỗi

Vậy có phải là Dictionary giới hạn giá trị không vậy ah.
 
Upvote 0
Nhìn code thì ko thấy vấn đề gì. Mà có file mới biết được bạn ạh.
một số đoạn code sao ko đơn giản hoá đi:
..
sarr=range(sheet1.[A2],Sheet1.[A200000].end(3)).resize(,2)
..
redim darr(1 to ubound(sarr),1 to 2)
..
for i = 1 to ubound(sarr)
..

next
...
 
Upvote 0
Em đang xài E2007 nên không bị giới hạn dòng, cũng không up đc file vì bị block rồi

Code báo lỗi dòng này

.[A3].Resize(k, 2) = dArr

Đại thể file của e nó muốn làm việc này

ví dụ có 2 cột A và B

A1 = A
A2 = A
B1 = m
B2 = l

=> giá trị giả về mong muốn sẽ là tại sheet 2 sẽ là
A1 = A
B1 = m / l

hình như nếu như các giá trị bên cột B mà nhiều hơn 700 dòng thì bị lỗi thì phải
 
Upvote 0
Em đang xài E2007 nên không bị giới hạn dòng, cũng không up đc file vì bị block rồi

Code báo lỗi dòng này

.[A3].Resize(k, 2) = dArr

Đại thể file của e nó muốn làm việc này

ví dụ có 2 cột A và B

A1 = A
A2 = A
B1 = m
B2 = l

=> giá trị giả về mong muốn sẽ là tại sheet 2 sẽ là
A1 = A
B1 = m / l

hình như nếu như các giá trị bên cột B mà nhiều hơn 700 dòng thì bị lỗi thì phải
Mình nghĩ lỗi này là do mảng, chứ k phải dic. Bạn có thể viết code khác k cần dic và chia nhỏ mảng ra làm. Mình nghĩ dữ liệu lớn nên thế
 
Lần chỉnh sửa cuối:
Upvote 0
Em đang xài E2007 nên không bị giới hạn dòng, cũng không up đc file vì bị block rồi

Code báo lỗi dòng này

.[A3].Resize(k, 2) = dArr

Đại thể file của e nó muốn làm việc này

ví dụ có 2 cột A và B

A1 = A
A2 = A
B1 = m
B2 = l

=> giá trị giả về mong muốn sẽ là tại sheet 2 sẽ là
A1 = A
B1 = m / l

hình như nếu như các giá trị bên cột B mà nhiều hơn 700 dòng thì bị lỗi thì phải
Không có file nên tôi đoán theo hướng này. Do dữ liệu bạn nhiều nên khi nối lại có 1 hoặc nhiều cell tại cột B vượt quá 32767 ký tự cho phép trong 1 ô. Bạn hãy kiểm tra thử xem.
 
Upvote 0
bạn sửa code lại
With Sheet2
.[A3:B200000].ClearContents
.[A3].Resize(k, 2) = dArr
End With

thành

With Sheet2
.[A3:B200000].ClearContents
For i = 1 To k
For j = 1 To 2
.Cells(i + 2, j) = dArr(i, j)
Next
Next
End With
 
Lần chỉnh sửa cuối:
Upvote 0
Mình muốn hỏi, nếu mình copy data trên 100k dòng , 100 cột từ sheet này sang sheet khác bằng DIC thì có được không? Và code cần viết thế nào. Mong mọi người giúp đỡ. thanks
 
Upvote 0
Mình muốn hỏi, nếu mình copy data trên 100k dòng , 100 cột từ sheet này sang sheet khác bằng DIC thì có được không? Và code cần viết thế nào. Mong mọi người giúp đỡ. thanks
Muốn biết thế nào thì bạn hãy lập topic khác, đính kèm file và nêu rõ yêu cầu cụ thể, ắt sẽ có câu trả lời.
 
Upvote 0
chính xác thì nó bị lỗi ở trong cột B, nhưng chiều dài của nó cũng chưa vượt quá giới hạn 32K

Các anh/chị test thử với data khoảng 800 dòng giúp e. Cột A chỉ bao gồm giá trị là "A", cột B các ký tự bất kỳ với

độ dài 1 -> 2 ký tự gì đấy nó cũng báo lỗi.

Tối nay e sẽ up file này lên.
 
Upvote 0
chính xác thì nó bị lỗi ở trong cột B, nhưng chiều dài của nó cũng chưa vượt quá giới hạn 32K

Các anh/chị test thử với data khoảng 800 dòng giúp e. Cột A chỉ bao gồm giá trị là "A", cột B các ký tự bất kỳ với

độ dài 1 -> 2 ký tự gì đấy nó cũng báo lỗi.

Tối nay e sẽ up file này lên.

file bạn đang để định dạng xls, hay xlsm ?
 
Upvote 0
Trao đổi không có file cũng như không à, ở đây muốn biết lỗi gì phải có mặt đặt tên của file mới nói chuyện được. bạn có thể up lên mediafile rồi cho đường link mọi người sẽ giúp
 
Upvote 0
Web KT

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

Back
Top Bottom