Xin các Thầy giúp code đưa từng nhóm dữ liệu từ mảng xuống sheet !!! (1 người xem)

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

ducky2301

Thành viên chính thức
Tham gia
25/3/08
Bài viết
74
Được thích
15
_ Em làm 1 cái code Dim res (1 To 2000000, 1 To 1). Giờ em muốn đưa xuống sheet từng nhóm từ res(1 To 1000000, 1 To 1) và res(1000001 To 2000000, 1 To 1) xuống sheet thì làm sao ? vì nếu đưa 1 lượt res(1 To 2000000, 1 To 1) xuống thì sheet trong excel không đủ (vì chỉ có 1048576 dòng thôi). Cụ thể code như sau :

PHP:
Sub TaoData()
Application.ScreenUpdating = False
Dim name As String, tenmien As String, b As Long, i As Long, j As Long, k As Long
Dim res(1 To 2000000, 1 To 1), ik, LastRow As Long
Frm_Progress.Show
Frm_Progress.Lbl_ProgressMsg.Caption = UNC("§ang t¹o Data Mail...")
LastRow = Sheets("Ten").Range("B1048576").End(xlUp).Row
tenmien = UserForm1.TextBox6.Text
b = 1
For ik = 1 To LastRow
name = Sheets("Ten").Range("B" & ik).Text
For i = 0 To 9
    For j = 0 To 9
        For k = 0 To 9
            b = b + 1
            res(b, 1) = name & i & j & k & tenmien
        Next k
    Next j
Next i
Frm_Progress.ProgressBar (ik / LastRow)
DoEvents
Next ik
Sheets("RunCode").[A2].Resize(b) = res '----> chỗ này này, nếu để vậy thì nó đưa hết 2000000 xuống luôn => lỗi'
Frm_Progress.Hide
Application.ScreenUpdating = True
Call AutoEx
End Sub
 

File đính kèm

Lần chỉnh sửa cuối:
Mã:
[COLOR=#000000][COLOR=#0000BB]...
Dim res[/COLOR][COLOR=#007700]([/COLOR][COLOR=#0000BB]1 To 1000000[/COLOR][COLOR=#007700], [/COLOR][COLOR=#0000BB]1 To [/COLOR][/COLOR][COLOR=#ff0000]2[/COLOR][COLOR=#000000][COLOR=#007700])[/COLOR][/COLOR], [COLOR=#ff0000]nCol As Long[/COLOR], [COLOR=#ff0000]name()
[/COLOR][COLOR=#000000][COLOR=#0000BB]LastRow [/COLOR][COLOR=#007700]= [/COLOR][COLOR=#0000BB]Sheets[/COLOR][COLOR=#007700]([/COLOR][COLOR=#DD0000]"Ten"[/COLOR][COLOR=#007700]).[/COLOR][COLOR=#0000BB]Range[/COLOR][COLOR=#007700]([/COLOR][COLOR=#DD0000]"B1048576"[/COLOR][COLOR=#007700]).[/COLOR][COLOR=#0000BB]End[/COLOR][COLOR=#007700]([/COLOR][COLOR=#0000BB]xlUp[/COLOR][COLOR=#007700]).[/COLOR][COLOR=#0000BB]Row
tenmien [/COLOR][COLOR=#007700]= [/COLOR][COLOR=#0000BB]UserForm1[/COLOR][COLOR=#007700].[/COLOR][COLOR=#0000BB]TextBox6[/COLOR][COLOR=#007700].[/COLOR][COLOR=#0000BB]Text
b [/COLOR][COLOR=#007700]= [/COLOR][/COLOR][COLOR=#ff0000]0[/COLOR][COLOR=#000000][COLOR=#0000BB]
[/COLOR][COLOR=#0000BB]
[/COLOR][/COLOR][COLOR=#ff0000]name = Sheets("Ten").Range("B1:B" & LastRow).Value[/COLOR]
[COLOR=#000000][COLOR=#007700]For [/COLOR][COLOR=#0000BB]ik [/COLOR][COLOR=#007700]= [/COLOR][COLOR=#0000BB]1 To LastRow[/COLOR][/COLOR]
[COLOR=#000000][COLOR=#007700]For [/COLOR][COLOR=#0000BB]i [/COLOR][COLOR=#007700]= [/COLOR][COLOR=#0000BB]0 To 9
    [/COLOR][COLOR=#007700]For [/COLOR][COLOR=#0000BB]j [/COLOR][COLOR=#007700]= [/COLOR][COLOR=#0000BB]0 To 9
        [/COLOR][COLOR=#007700]For [/COLOR][COLOR=#0000BB]k [/COLOR][COLOR=#007700]= [/COLOR][COLOR=#0000BB]0 To 9
            b [/COLOR][COLOR=#007700]= [/COLOR][/COLOR][COLOR=#ff0000]IIf(b = 1000000, 1, b + 1)[/COLOR][COLOR=#000000][COLOR=#0000BB]
            [/COLOR][/COLOR][COLOR=#ff0000]nCol = IIf(b = 1000000, 1, 2)[/COLOR]
[COLOR=#000000][COLOR=#0000BB]            res[/COLOR][COLOR=#007700]([/COLOR][COLOR=#0000BB]b[/COLOR][COLOR=#007700], [/COLOR][/COLOR][COLOR=#ff0000]nCol[/COLOR][COLOR=#000000][COLOR=#007700]) = [/COLOR][/COLOR][COLOR=#ff0000]name(ik, 1)[/COLOR] [COLOR=#000000][COLOR=#007700]& [/COLOR][COLOR=#0000BB]i [/COLOR][COLOR=#007700]& [/COLOR][COLOR=#0000BB]j [/COLOR][COLOR=#007700]& [/COLOR][COLOR=#0000BB]k [/COLOR][COLOR=#007700]& [/COLOR][COLOR=#0000BB]tenmien
        Next k
    Next j
Next i[/COLOR][/COLOR]
[COLOR=#000000][COLOR=#0000BB]Frm_Progress[/COLOR][COLOR=#007700].[/COLOR][COLOR=#0000BB]ProgressBar [/COLOR][COLOR=#007700]([/COLOR][COLOR=#0000BB]ik [/COLOR][COLOR=#007700]/ [/COLOR][COLOR=#0000BB]LastRow[/COLOR][COLOR=#007700])
[/COLOR][COLOR=#0000BB]DoEvents
Next ik[/COLOR][/COLOR]
[COLOR=#000000][COLOR=#0000BB]Sheets[/COLOR][COLOR=#007700]([/COLOR][/COLOR][COLOR=#0000cd]"RunCode"[/COLOR][COLOR=#000000][COLOR=#007700]).[[/COLOR][COLOR=#0000BB]A2[/COLOR][COLOR=#007700]].[/COLOR][COLOR=#0000BB]Resize[/COLOR][COLOR=#007700]([/COLOR][COLOR=#0000BB]1000000, 2[/COLOR][COLOR=#007700])[/COLOR][/COLOR] [COLOR=#ff0000]= res[/COLOR]
 
Lần chỉnh sửa cuối:
Upvote 0
Mã:
[COLOR=#000000][COLOR=#0000BB]Dim res[/COLOR][COLOR=#007700]([/COLOR][COLOR=#0000BB]1 To 2000000[/COLOR][COLOR=#007700], [/COLOR][COLOR=#0000BB]1 To [/COLOR][/COLOR][COLOR=#ff0000]2[/COLOR][COLOR=#000000][COLOR=#007700])[/COLOR][/COLOR], [COLOR=#ff0000]nCol As Long[/COLOR]
...
[COLOR=#000000][COLOR=#007700]For [/COLOR][COLOR=#0000BB]i [/COLOR][COLOR=#007700]= [/COLOR][COLOR=#0000BB]0 To 9
    [/COLOR][COLOR=#007700]For [/COLOR][COLOR=#0000BB]j [/COLOR][COLOR=#007700]= [/COLOR][COLOR=#0000BB]0 To 9
        [/COLOR][COLOR=#007700]For [/COLOR][COLOR=#0000BB]k [/COLOR][COLOR=#007700]= [/COLOR][COLOR=#0000BB]0 To 9
            b [/COLOR][COLOR=#007700]= [/COLOR][/COLOR][COLOR=#ff0000]IIf(b = 1000000, 1, b + 1)[/COLOR][COLOR=#000000][COLOR=#0000BB]
            [/COLOR][/COLOR][COLOR=#ff0000]nCol = IIf(b = 1000000, 1, 2)[/COLOR]
[COLOR=#000000][COLOR=#0000BB]            res[/COLOR][COLOR=#007700]([/COLOR][COLOR=#0000BB]b[/COLOR][COLOR=#007700], [/COLOR][/COLOR][COLOR=#ff0000]nCol[/COLOR][COLOR=#000000][COLOR=#007700]) = [/COLOR][COLOR=#0000BB]name [/COLOR][COLOR=#007700]& [/COLOR][COLOR=#0000BB]i [/COLOR][COLOR=#007700]& [/COLOR][COLOR=#0000BB]j [/COLOR][COLOR=#007700]& [/COLOR][COLOR=#0000BB]k [/COLOR][COLOR=#007700]& [/COLOR][COLOR=#0000BB]tenmien
        Next k
    Next j
Next i[/COLOR][/COLOR]
...
[COLOR=#000000][COLOR=#0000BB]Sheets[/COLOR][COLOR=#007700]([/COLOR][/COLOR][COLOR=#0000cd]"RunCode"[/COLOR][COLOR=#000000][COLOR=#007700]).[[/COLOR][COLOR=#0000BB]A2[/COLOR][COLOR=#007700]].[/COLOR][COLOR=#0000BB]Resize[/COLOR][COLOR=#007700]([/COLOR][COLOR=#0000BB]1000000, 2[/COLOR][COLOR=#007700])[/COLOR][/COLOR] [COLOR=#ff0000]= res[/COLOR]

_ Theo như code Thầy sửa lại thì nó đưa 1.000.000 dòng sau xuống cột B, vậy còn 1.000.000 dòng đầu đâu ? Nó mất luôn rồi **~**.
_ Chắc có lẽ Thầy ptm chưa hiểu ý em, em muốn là khi mảng res nhiều hơn 1.000.000 dòng thì nó sẽ đưa 1.000.000 đó xuống trước để Call AutoEx xử lý, xong nó lại đưa tiếp 1.000.000 còn lại xuống và tiếp tục Call AutoEx để xử lý tiếp đó Thầy. -\\/.
 
Upvote 0
_ Theo như code Thầy sửa lại thì nó đưa 1.000.000 dòng sau xuống cột B, vậy còn 1.000.000 dòng đầu đâu ? Nó mất luôn rồi **~**.
_ Chắc có lẽ Thầy ptm chưa hiểu ý em, em muốn là khi mảng res nhiều hơn 1.000.000 dòng thì nó sẽ đưa 1.000.000 đó xuống trước để Call AutoEx xử lý, xong nó lại đưa tiếp 1.000.000 còn lại xuống và tiếp tục Call AutoEx để xử lý tiếp đó Thầy. -\\/.


Tôi có sửa code bên trên, đã dùng mảng thì dùng tất cả đều mảng, chứ biến name (String) lại phải chạy xuống sheet vô số lần để đọc.
 
Lần chỉnh sửa cuối:
Upvote 0
Bạn chạy, thì sẽ biết nó xuống đâu.
Còn đưa xuống trước sau hay cùng lúc thì bài 1 bạn không nói.
Tôi có sửa code bên trên, đã dùng mảng thì dùng tất cả đều mảng, chứ biến name (String) lại phải chạy xuống sheet vô số lần để đọc.

_ Code Thầy sửa lại vẫn chỉ đưa có 1.000.000 dòng sau xuống cột B thôi mà, còn 1.000.000 dòng đầu nó đâu có đưa xuống cột A đâu ???
_ Ở bài 1 em có hỏi là làm sao đưa Từng Nhóm xuống đó Thầy. Tại vì em cái file em làm là nó tạo ra dưới 1.048.576 dòng trong mảng res thì không sao, còn nó mà tạo hơn (do số lượng Tên nhiều) thì nó bị lỗi chỗ đưa xuống sheet. Nên em hỏi có cách nào đưa từng nhóm xuống để xử lý mà không bị lỗi do vượt quá số dòng đó Thầy. %#^#$
 
Upvote 0
Tôi sai rồi, sửa lại như sau:

Mã:
b = 0: nCol = 1

name = Sheets("Ten").Range("B1:B" & LastRow).Value
For ik = 1 To LastRow
    For i = 0 To 9
        For j = 0 To 9
            For k = 0 To 9
                b = b + 1
                If b = 1000001 Then b = 1: nCol = 2
                res(b, nCol) = name(ik, 1) & i & j & k & tenmien
            Next k
        Next j
    Next i
    Frm_Progress.ProgressBar (ik / LastRow)
    DoEvents
Next ik
Sheets("RunCode").[A2].Resize(1000000, 2) = res
Còn chuyện xử lý thì có thể xử lý 2 lần cho 2 cột được không? Không được thì tính tiếp, giả sử 2 mảng res1 và res2

Mã:
b = b + 1

If b <= 1000000 then
    res[COLOR=#ff0000]1[/COLOR](b, 1) = name(ik, 1) & i & j & k & tenmien
Else 
    b = b - 1000000
    res[COLOR=#ff0000]2[/COLOR](b, 1) = name(ik, 1) & i & j & k & tenmien
End If
 
Lần chỉnh sửa cuối:
Upvote 0
Tôi sai rồi, sửa lại như sau:

Mã:
b = 0: nCol = 1

name = Sheets("Ten").Range("B1:B" & LastRow).Value
For ik = 1 To LastRow
    For i = 0 To 9
        For j = 0 To 9
            For k = 0 To 9
                b = b + 1
                If b = 1000001 Then b = 1: nCol = 2
                res(b, nCol) = name(ik, 1) & i & j & k & tenmien
            Next k
        Next j
    Next i
    Frm_Progress.ProgressBar (ik / LastRow)
    DoEvents
Next ik
Sheets("RunCode").[A2].Resize(1000000, 2) = res
Còn chuyện xử lý thì có thể xử lý 2 lần cho 2 cột được không? Không được thì tính tiếp, giả sử 2 mảng res1 và res2

Mã:
b = b + 1

If b <= 1000000 then
    res[COLOR=#ff0000]1[/COLOR](b, 1) = name(ik, 1) & i & j & k & tenmien
Else 
    b = b - 1000000
    res[COLOR=#ff0000]2[/COLOR](b, 1) = name(ik, 1) & i & j & k & tenmien
End If

_ Chia ra 2 mảng để xử lý từng mảng thì chỉ được trong trường hợp này thôi. Ở bài 1 em đưa ra cái mảng res 2.000.000 dòng chỉ để ví dụ là lớn hơn 1.048.576 dòng của sheet thôi. Thực tế thì mảng có thể lớn hơn nhiều. Thầy xem File em đính kèm đó, trong đó có đến 1960 Tên. Trong code ví dụ thì chỉ có 3 vòng lặp gán số thì mỗi tên chỉ có 1.000 số thôi, còn nếu em đưa vào 4 hay 5 vòng lặp gán số thì mỗi tên lên đến 10.000 hay 100.000 số cho nên con số trong mảng res sẽ lớn hơn nhiều.
_ Vì vậy em muốn làm sao để xử lý tuần tự 1.000.000 dòng của mảng res đó Thầy. Ví dụ mảng có 2.000.000 thì làm vòng lặp xử lý 2 lần, 3.000.000 thì làm 3 lần v.v...
 
Lần chỉnh sửa cuối:
Upvote 0
Vậy thì có 2 cách:
1. Khai báo res chỉ 1 cột. Mỗi khi b vượt quá 1 triệu thì gán xuống sheet 1 cột, b quay về 1, nCol tăng 1:
[A2].Offset(0, nCol).Resize(1000000, 1) = res
Sau đó res nhận 1 triệu giá trị tiếp theo đè lên giá trị cũ.

2. Tính ra b Max = LastRow * 10 ^ n với n = 3, 4, 5, ... 10, 100. Chia b Max cho 1 triệu lấy số nguyên và cộng 1 sẽ có nCol.
Redim res(1 to 1000000, 1 to nCol)
Sau đó mỗi khi b vượt quá 1 triệu thì b quay về 1, nCol tăng 1
Cuối cùng gán cả mảng to đùng kia xuống sheet.

Một chuyện nữa: Mắc gì phải dùng 3, 4, ...10 vòng lặp cho số tăng? Dùng 1 vòng là được mà:
For i = 0 to 99999
 
Upvote 0
Vậy thì có 2 cách:
1. Khai báo res chỉ 1 cột. Mỗi khi b vượt quá 1 triệu thì gán xuống sheet 1 cột, b quay về 1, nCol tăng 1:
[A2].Offset(0, nCol).Resize(1000000, 1) = res
Sau đó res nhận 1 triệu giá trị tiếp theo đè lên giá trị cũ.

2. Tính ra b Max = LastRow * 10 ^ n với n = 3, 4, 5, ... 10, 100. Chia b Max cho 1 triệu lấy số nguyên và cộng 1 sẽ có nCol.
Redim res(1 to 1000000, 1 to nCol)
Sau đó mỗi khi b vượt quá 1 triệu thì b quay về 1, nCol tăng 1
Cuối cùng gán cả mảng to đùng kia xuống sheet.

Một chuyện nữa: Mắc gì phải dùng 3, 4, ...10 vòng lặp cho số tăng? Dùng 1 vòng là được mà:
For i = 0 to 99999

_ cách 1 : thì có phải ý Thầy là nỗi khi b > 1 triệu thì cho gán xuống sheet rồi xử lý nó, và tiếp tục b về 1 nhận tiếp 1 triệu giá trị tiếp theo hả Thầy. Cái này em cũng có nghĩ rồi, nhưng không nghĩ ra cách viết code làm sao ngắt ra như vậy ?
_ cách 2 : thì em bị vướng 2 chỗ, 1 là khi gán cả cái mảng to đùng đó xuống, nó sẽ xảy ra thời gian chờ hơi bị lâu, 2 là làm sao để xứ lý tiếp các cột tiếp theo trong khi code xử lý của em nó chỉ làm đối với cột A của sheet thôi -\\/.
_ còn tại sao em phải dùng nhiều vòng lặp là tại vì từ 0 -> 99999 nó khác với từ 00000 -> 99999 đó Thầy. Ví dụ anhkhoa0@gmail.com nó khác anhkhoa00000@gmail.com chứ Thầy -\\/..
_ Tóm lại là cách 1 là em thấy khả thi nhất, nhưng chưa nghĩ ra viết code sao nữa, Thầy giúp em với -\\/..
 
Upvote 0
...
_ cách 2 : thì em bị vướng 2 chỗ, 1 là khi gán cả cái mảng to đùng đó xuống, nó sẽ xảy ra thời gian chờ hơi bị lâu, 2 là làm sao để xứ lý tiếp các cột tiếp theo trong khi code xử lý của em nó chỉ làm đối với cột A của sheet thôi -\\/.
...

Bạn hoàn toàn không hiểu cách này. Sao lại có thể cả đoan cho rằng "thời gian chờ hơi bị lâu" ?
Thực ra đây mới là cách hữu hiệu nhất.
 
Upvote 0
Bạn hoàn toàn không hiểu cách này. Sao lại có thể cả đoan cho rằng "thời gian chờ hơi bị lâu" ?
Thực ra đây mới là cách hữu hiệu nhất.

_ mình đã thử rồi bạn ơi, trong đoạn code này mình giả sử luôn là b Max ko vượt quá 5 triệu dòng. Khi mình chạy code thì nó có hiện tượng là sau khi tạo ra mảng res (theo mình tưởng tượng thì chắc trong đó có 5 cột, mỗi cột 1 triệu dòng), đưa xuống sheet thì nó đơ máy 1 hồi sau mới hiện kết quả là gán cả mảng đó xuống 5 cột trên sheet.
_ bạn có thể down file của mình về và copy cho cái cột B bên sheet Tên lên thành hơn 3900 tên và cho chạy code xem nha.

PHP:
Sub TaoData()
Application.ScreenUpdating = False
Dim name(), tenmien As String, b As Long, i As Long, j As Long, k As Long
Dim res(1 To 1000000, 1 To 5), nCol As Long, ik, LastRow As Long
Frm_Progress.Show
Frm_Progress.Lbl_ProgressMsg.Caption = UNC("§ang t¹o Data Mail...")
LastRow = Sheets("Ten").Range("B1048576").End(xlUp).Row
tenmien = UserForm1.TextBox6.Text
b = 0: nCol = 1
name = Sheets("Ten").Range("B1:B" & LastRow).Value
For ik = 1 To LastRow
For i = 0 To 9
    For j = 0 To 9
        For k = 0 To 9
            b = b + 1
                If b = 1000001 Then b = 1: nCol = nCol + 1
                res(b, nCol) = name(ik, 1) & i & j & k & tenmien
        Next k
    Next j
Next i
Frm_Progress.ProgressBar (ik / LastRow)
DoEvents
Next ik
Sheets("RunCode").[A2].Resize(1000000, nCol) = res
Frm_Progress.Hide
Application.ScreenUpdating = True
'Call AutoEx
End Sub

_ Xin Cám Ơn Thầy ptm0412 rất nhiều, nhờ sự giúp đỡ và gợi ý của Thầy mà em làm được cách 1 luôn rồi haha...
 
Lần chỉnh sửa cuối:
Upvote 0
_ cách 1 : thì có phải ý Thầy là nỗi khi b > 1 triệu thì cho gán xuống sheet rồi xử lý nó, và tiếp tục b về 1 nhận tiếp 1 triệu giá trị tiếp theo hả Thầy. Cái này em cũng có nghĩ rồi, nhưng không nghĩ ra cách viết code làm sao ngắt ra như vậy ?
_ cách 2 : thì em bị vướng 2 chỗ, 1 là khi gán cả cái mảng to đùng đó xuống, nó sẽ xảy ra thời gian chờ hơi bị lâu, 2 là làm sao để xứ lý tiếp các cột tiếp theo trong khi code xử lý của em nó chỉ làm đối với cột A của sheet thôi -\\/.
_ còn tại sao em phải dùng nhiều vòng lặp là tại vì từ 0 -> 99999 nó khác với từ 00000 -> 99999 đó Thầy. Ví dụ anhkhoa0@gmail.com nó khác anhkhoa00000@gmail.com chứ Thầy -\\/..
_ Tóm lại là cách 1 là em thấy khả thi nhất, nhưng chưa nghĩ ra viết code sao nữa, Thầy giúp em với -\\/..

1. For i = 0 to 99999 nhưng khi nối chuỗi thì nối format(i, "00000") chứ ai bảo nối i không làm chi. Vấn đề là khi bạn tăng 1000 lên 100.000, bạn phải viết 5 vòng lặp, hoặc 4, 6, 8 vòng lặp. Còn 1 vòng thì dễ hơn rất nhiều.
2. Trong tất cả trường hợp, việc đọc lên, gán xuống sheet bao giờ cũng chiếm nhiều thời gian. Ngoài ra bạn nghĩ lặp 5 triệu vòng mất vài giây hoặc năm ba giây là nhiều à? Bạn còn phải test và so sánh thời gian với code cũ của bạn, hoặc so sánh cách 1 và 2.
3. Cách 2 trong vòng 5, 7 triệu có thể tốt hơn cách một (tôi chưa test), nhưng nếu mảng có nhiều hơn 1 số lượng phần tử nào đó, sẽ bị overload, lúc đó cách 1 phải được dùng.
4. Cách 2, sau khi ghi mảng xuống nCol cột, chạy 1 vòng lặp For i từ 1 đến nCol và xử lý 1 cột i. Ai bỉu khăng khăng xử lý cột A làm chi.
 
Lần chỉnh sửa cuối:
Upvote 0
Tôi đã test cho mỗi tên 3000 địa chỉ, chạy 5.880.000 vòng lặp:
Cách 2: (Sub TaoData2): 150 giây,
Cách 1: (Sub TaoData1): 80 giây
Cách 1 sử dụng bộ nhớ nhỏ hơn 6 lần và chạy nhanh gấp đôi.

Ghi chú là cả 2 cách tôi dùng for i = 0 to 2999 chứ không dùng 4 vòng lặp. Dùng 4 vòng lặp tốc độ tương đương 1 vòng cho mỗi cách trên (Sub Tao Data3). Đằng nào cũng phải nối chuỗi, nối ít và thêm hàm format thì bằng với nối nhiều.
 

File đính kèm

Upvote 0
Tôi đã test cho mỗi tên 3000 địa chỉ, chạy 5.880.000 vòng lặp:
Cách 2: (Sub TaoData2): 150 giây,
Cách 1: (Sub TaoData1): 80 giây
Cách 1 sử dụng bộ nhớ nhỏ hơn 6 lần và chạy nhanh gấp đôi.

Ghi chú là cả 2 cách tôi dùng for i = 0 to 2999 chứ không dùng 4 vòng lặp. Dùng 4 vòng lặp tốc độ tương đương 1 vòng cho mỗi cách trên (Sub Tao Data3). Đằng nào cũng phải nối chuỗi, nối ít và thêm hàm format thì bằng với nối nhiều.
Sư phụ kiên nhẫn quá! Ẹc... Ẹc...
---------------------
Chết cha!
Định sửa lung tung ai dè... sai bét
Vầy đi: Sư phụ thay chỗ này:
ReDim res(1 To 1000000, 1 To nCol)
thành:
ReDim res(1 To 1000000, 1 To nCol) As String
đồng thời bỏ khai báo Dim res() ở phía trên và chạy code lại xem
 
Lần chỉnh sửa cuối:
Upvote 0
Sư phụ kiên nhẫn quá! Ẹc... Ẹc...
---------------------
Chết cha!
Định sửa lung tung ai dè... sai bét

Code cách 2 viết nhanh (5 phút), nhưng chạy chậm. Code cách 1 nghĩ rằng chạy nhanh, sửa 1 chút đỉnh thôi, không ngờ sửa 2 tiếng đồng hồ. Mỗi lần test và chờ, vào GPE đọc bài và ban 1 nick QC, cũng không sốt ruột lắm.

(Mà lão chết tiệt bỏ 2 tiếng để sửa 1 đoạn code 10 dòng thì ndu trong vòng 10 phút khó sửa hay hơn lém).


Vầy đi: Sư phụ thay chỗ này:
ReDim res(1 To 1000000, 1 To nCol)
thành:
ReDim res(1 To 1000000, 1 To nCol) As String
đồng thời bỏ khai báo Dim res() ở phía trên và chạy code lại xem

Giảm 10% thời gian ...
 
Upvote 0

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

Back
Top Bottom