Giúp viết code nối cột A và cột B dữ liệu khoảng 1 triệu dòng

Liên hệ QC
Tôi tuân thủ nội quy khi đăng bài

quochuy2022

Thành viên bị đình chỉ hoạt động
Thành viên bị đình chỉ hoạt động
Tham gia
21/11/22
Bài viết
20
Được thích
-1
Chào GPE ! Tồi cần viết 1 đoạn code để nối kết quả cột A và cột B cho ra cột C ( khoảng 1 triệu dòng ). Nhờ anh chỉ diễn đàn giúp đỡ. Xin cảm ơn

1669423052778.png
 
Lần chỉnh sửa cuối:
PHP:
Sub noiHonMotTrieuDong()
const sRangeData = "A2:B1048500"
const sDelim = " # "
const sCellTarget = "C2"
Dim data as variant, i as long, strA as string, listRes as variant
data = range(sRangeData).value2
redim listRes(1 to ubound(data,1),1 to 1)
For i=1 to ubound(data,1)
strA = data(i,1)
if vba.len(strA)>0 then
listRes(i,1)=strA & sDelim & data(i,2)
End if
Next i
Range(sCellTarget).Resize(ubound(listRes,1),1).value=listRes
erase data, listRes

End sub
 
Upvote 0
PHP:
Sub VBconcate()
Dim sArr As Variant, dArr As Variant
Dim i As Long
    sArr = Range("A1:B" & Range("B" & Rows.Count).End(xlUp).Row)
    ReDim dArr(1 To UBound(sArr))
    For i = 1 To UBound(sArr)
        dArr(i) = sArr(i, 1) & " # " & sArr(i, 2)
    Next i
    Range("C1").Resize(UBound(sArr)) = WorksheetFunction.Transpose(dArr)
End Sub
Bạn xài thử.
Tuy mình vẫn thấy cấn cấn :D
 
Upvote 0
Upvote 0
PHP:
Sub VBconcate()
Dim sArr As Variant, dArr As Variant
Dim i As Long
    sArr = Range("A1:B" & Range("B" & Rows.Count).End(xlUp).Row)
    ReDim dArr(1 To UBound(sArr))
    For i = 1 To UBound(sArr)
        dArr(i) = sArr(i, 1) & " # " & sArr(i, 2)
    Next i
    Range("C1").Resize(UBound(sArr)) = WorksheetFunction.Transpose(dArr)
End Sub
Bạn xài thử.
Tuy mình vẫn thấy cấn cấn :D
Cảm ơn bạn. Mình thử lên 500k dòng lại báo lỗi
1669429684149.png
Bài đã được tự động gộp:

Làm gì đến mức treo máy.
Tôi dùng công thức chạy còn chưa đến 3s.


View attachment 283903
File này làm nhiều việc khác nữa. chứ không phải để chỉ chạy cái này
 
Upvote 0
:D chưa đề cập đến cấu hình máy tính.
Đây là nói chuyện "1 triệu dòng" (kinh điển GPE, nhỏng nhẻo quen rồi). Cấu hình tư tưởng chứ máy tính chỉ là chuyện phụ.

Công thức chỉ có giản dị IF và &. Làm cách nào treo máy thì thua luôn.
 
Upvote 0
Đây là nói chuyện "1 triệu dòng" (kinh điển GPE, nhỏng nhẻo quen rồi). Cấu hình tư tưởng chứ máy tính chỉ là chuyện phụ.

Công thức chỉ có giản dị IF và &. Làm cách nào treo máy thì thua luôn.
Anh ơi file nhiều công thức mảng rồi thêm thằng này giọt nước tràn ly anh à.
 
Upvote 0
Anh ơi file nhiều công thức mảng rồi thêm thằng này giọt nước tràn ly anh à.
Loại cong thức đơn giỏn như vầy là loại để lkamf cột phụ.
Đúng với kinh điển bài toán dữ liệu lớn: dùng cột phụ để giảm công thức mảng (hoặc tính theo mảng)
 
Upvote 0
Loại cong thức đơn giỏn như vầy là loại để lkamf cột phụ.
Đúng với kinh điển bài toán dữ liệu lớn: dùng cột phụ để giảm công thức mảng (hoặc tính theo mảng)
Đúng chính xác, Bạn này hiểu ý mình. Ví phải làm cái này để chia nhỏ ra tác vụ để không bị đầy bộ nhớ
 
Upvote 0
Cảm ơn bạn. Mình thử lên 500k dòng lại báo lỗi
PHP:
Sub VBconcate()
Dim sArr As Variant, dArr As Variant
Dim i As Long
    sArr = Range("A1:B" & Range("B" & Rows.Count).End(xlUp).Row)
    ReDim dArr(1 To UBound(sArr))
    For i = 1 To UBound(sArr)
        dArr(i) = sArr(i, 1) & " # " & sArr(i, 2)
    Next i
    Application.Calculation = xlManual
    Range("C1").Resize(UBound(sArr)) = WorksheetFunction.Transpose(dArr)
    Application.Calculation = xlAutomatic
End Sub
Chắc phải vầy quá.
Toàn dữ liệu thần thánh.
 
Upvote 0
Dùng EVALUATE cả cột, sau đó filter để loại bỏ dòng trống
Máy mình chạy khoảng 4s
PHP:
Option Explicit
Sub NOICOT()
Dim t
t = Timer
With Columns(3)
    .Value = Evaluate("=A:A & "" # "" & B:B")
    .AutoFilter
    .AutoFilter Field:=1, Criteria1:="#"
    Rows("2:1048576").Delete Shift:=xlUp
    .AutoFilter
End With
MsgBox Timer - t
End Sub
 

File đính kèm

  • Capture.JPG
    Capture.JPG
    98.4 KB · Đọc: 10
Upvote 0
Web KT

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

Back
Top Bottom