Liệt kê chuỗi ký tự được ghép nối từ nội dung các cột khác nhau

Liên hệ QC
Tham gia
17/9/12
Bài viết
1,350
Được thích
1,570
Giới tính
Nữ
Em có 1 bài như file đính kèm ạ, giờ em cần liệt kê ra tất cả các chuỗi mà ghép được từ 3 cột nội dung tỉnh, đại lý và mức doanh số đó với nhau.
upload_2017-6-30_14-14-25.png
nhưng em vẫn chưa tìm được cách nào nhanh và hợp lý để giải quyết vấn đề này. Mong các chú và anh chị em giúp đỡ ạ. Cháu/Em cảm ơn ạ!
 

File đính kèm

  • Tổ hợp chuỗi.xlsb
    9.7 KB · Đọc: 9
Em có 1 bài như file đính kèm ạ, giờ em cần liệt kê ra tất cả các chuỗi mà ghép được từ 3 cột nội dung tỉnh, đại lý và mức doanh số đó với nhau.
View attachment 178660
nhưng em vẫn chưa tìm được cách nào nhanh và hợp lý để giải quyết vấn đề này. Mong các chú và anh chị em giúp đỡ ạ. Cháu/Em cảm ơn ạ!
Em đọc bài này:
http://www.giaiphapexcel.com/diendan/threads/giúp-vba-nối-lần-lượt-các-range.125307/#post-785680
 
Upvote 0
Em có 1 bài như file đính kèm ạ, giờ em cần liệt kê ra tất cả các chuỗi mà ghép được từ 3 cột nội dung tỉnh, đại lý và mức doanh số đó với nhau.
View attachment 178660
nhưng em vẫn chưa tìm được cách nào nhanh và hợp lý để giải quyết vấn đề này. Mong các chú và anh chị em giúp đỡ ạ. Cháu/Em cảm ơn ạ!
Cho chị code này:
PHP:
Sub ghep()
Dim num1 As Long, num2 As Long, num3 As Long, num4 As Long
Dim arr1, arr2(1 To 60000, 1 To 1)
arr1 = Range("A2:C" & [a65000].End(xlUp).Row)
For num1 = 1 To UBound(arr1)
    For num2 = 1 To UBound(arr1)
        For num3 = 1 To UBound(arr1)
            num4 = num4 + 1
            arr2(num4, 1) = arr1(num1, 1) & "," & arr1(num2, 2) & "," & arr1(num3, 3)
        Next num3
    Next num2
Next num1
[d2].Resize(num4, 1).Value = arr2
End Sub
 
Upvote 0
Cho chị code này:
PHP:
Sub ghep()
Dim num1 As Long, num2 As Long, num3 As Long, num4 As Long
Dim arr1, arr2(1 To 60000, 1 To 1)
arr1 = Range("A2:C" & [a65000].End(xlUp).Row)
For num1 = 1 To UBound(arr1)
    For num2 = 1 To UBound(arr1)
        For num3 = 1 To UBound(arr1)
            num4 = num4 + 1
            arr2(num4, 1) = arr1(num1, 1) & "," & arr1(num2, 2) & "," & arr1(num3, 3)
        Next num3
    Next num2
Next num1
[d2].Resize(num4, 1).Value = arr2
End Sub
Cảm ơn Eke_rula nhé. Code chạy đúng ý mình rồi :)
 
Upvote 0
arr2(1 To 60000, 1 To 1) 'Chỗ này chưa hợp lý lắm, vì ta xác định được kích thước sau khi có mảng dữ liệu.
Em không xác định được bao nhiêu dữ liệu được tạo ra nên em cho đaii, anh chỉnh lại chỗ này dùm em, em cám ơn anh!!!
 
Upvote 0
Thực ra lấy đại là 60000 cũng chẳng phải là sai.
Phần đông các bạn ở đây ngại tốn bộ nhớ chứ tôi thì chả quan tâm mấy.
Tuy nhiên, ở trường hợp khác có thể 60000 dòng chạy chậm hơn 1000 dòng một chút (chỉ một tẹo thôi, nhưng người nào khó tính sẽ có chỗ để bắt bẻ)

Cái lý do chạy chậm có người đã từng giải thích rồi (tôi không nới tên người đó ra đâu, quý vị tự tìm lấy)
Gợi ý: tôi dùng từ "ở trường hợp khác". Có nghĩa là không phải trường hợp này.
 
Upvote 0
Code ở bài #4, con toán UBound(Arr1) được gọi tất cả [số tỉnh] * [số cấp đại lý] * [số mức doanh số] lần.

Code đó cũng không được an toàn khi số tỉnh tăng lên, hoặc khi số cấp đại lý khác với số mức doanh số.
 
Upvote 0
Web KT
Back
Top Bottom