Nối 3 array vào 1 array (1 người xem)

Liên hệ QC

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

ndu96081631

Huyền thoại GPE
Thành viên BQT
Super Moderator
Tham gia
5/6/08
Bài viết
30,703
Được thích
53,970
Tôi có 3 Array như sau:
- Arr1 = Array("a","b","c")
- Arr2 = Array("d","e","f")
- Arr3 = Array("g","h","i")

Xin hỏi: Làm cách nào nối 3 Array này thành 1?
Arr = Array("a","b","c","d","e","f","g","h","i")
Ý tôi muốn hỏi ngoài cách dùng vòng lập For duyệt qua tất cả các phần tử thì còn cách nào khác nhanh hơn không?
 
Em gửi một cách củ chuối này anh xem thử nha
PHP:
Sub GhepMang()
Dim Arr
arr1 = Array("a", "b", "c")
arr2 = Array("d", "e", "f")
arr3 = Array("g", "h", "i")
Arr = Split(Join(arr1, "~") & "~" & Join(arr2, "~") & "~" & Join(arr3, "~"), "~")
MsgBox Arr(4) '=> "e"
End Sub
 
Upvote 0
Em gửi một cách củ chuối này anh xem thử nha
PHP:
Sub GhepMang()
Dim Arr
arr1 = Array("a", "b", "c")
arr2 = Array("d", "e", "f")
arr3 = Array("g", "h", "i")
Arr = Split(Join(arr1, "~") & "~" & Join(arr2, "~") & "~" & Join(arr3, "~"), "~")
MsgBox Arr(4) '=> "e"
End Sub
Vâng! Join và Split là ngon rồi
Vấn đề ở đây là: Nếu có khoảng 20 Array thì sao? Chẳng lẽ nối bằng tay thế sao?
Liệu có cách nào dùng vòng lập duyệt từ 1 đến 20 không?
Tức duyệt qua từng Array (chứ không phải duyệt qua tất cả các phần từ) rồi nối chúng lại
 
Upvote 0
Vâng! Join và Split là ngon rồi
Vấn đề ở đây là: Nếu có khoảng 20 Array thì sao? Chẳng lẽ nối bằng tay thế sao?
Liệu có cách nào dùng vòng lập duyệt từ 1 đến 20 không?
Tức duyệt qua từng Array (chứ không phải duyệt qua tất cả các phần từ) rồi nối chúng lại
Thì thêm for vào cho nó ah. Hơi rườm rà tí.
PHP:
Sub GhepMang()
Dim Arr(1 To 3), ArrStr As String, i As Long, ArrNew
Arr(1) = Array("a", "b", "c")
Arr(2) = Array("d", "e", "f")
Arr(3) = Array("g", "h", "i")
For i = 1 To 3
ArrStr = ArrStr & Join(Arr(i), "~") & "~"
Next
ArrNew = Split(Left(ArrStr, Len(ArrStr) - 1), "~")
MsgBox ArrNew(4)
End Sub
 
Upvote 0
Thì thêm for vào cho nó ah. Hơi rườm rà tí.
PHP:
Sub GhepMang()
Dim Arr(1 To 3), ArrStr As String, i As Long, ArrNew
Arr(1) = Array("a", "b", "c")
Arr(2) = Array("d", "e", "f")
Arr(3) = Array("g", "h", "i")
For i = 1 To 3
ArrStr = ArrStr & Join(Arr(i), "~") & "~"
Next
ArrNew = Split(Left(ArrStr, Len(ArrStr) - 1), "~")
MsgBox ArrNew(4)
End Sub
Dùng cách này mà trong phần tử mảng có chứa ký tự "~" thì sao?
 
Upvote 0
Dùng cách này mà trong phần tử mảng có chứa ký tự "~" thì sao?

Cái này mình cố tình dùng ký tự "~" để cho biết là phải dùng ký tự đặc biệt. Còn để cho khỏi trùng thì đổi thành chuỗi khác đặc biệt hơn. Cái này bạn hỏi cho các bạn khác thôi phải không chứ còn bạn thì dư sức làm mà.
 
Upvote 0
Cái này mình cố tình dùng ký tự "~" để cho biết là phải dùng ký tự đặc biệt. Còn để cho khỏi trùng thì đổi thành chuỗi khác đặc biệt hơn. Cái này bạn hỏi cho các bạn khác thôi phải không chứ còn bạn thì dư sức làm mà.
Không phải vậy đâu, cái tôi muốn hỏi đúng là như vậy mà, tư tưởng này mà dùng trong công thức thì có thể tạm chấp nhận được vì 1 chuỗi trong công thức dù sao nó đã hạn chế các ký tự đặc biệt rồi. Còn 1 chuỗi trong VBA thì ký tự nào nó cũng có thể có mà. Nếu không thì phải tùy thuộc vào từng yêu cầu cụ thể(Ví dụ như mảng số chẳng hạn ...)
 
Upvote 0
Không phải vậy đâu, cái tôi muốn hỏi đúng là như vậy mà, tư tưởng này mà dùng trong công thức thì có thể tạm chấp nhận được vì 1 chuỗi trong công thức dù sao nó đã hạn chế các ký tự đặc biệt rồi. Còn 1 chuỗi trong VBA thì ký tự nào nó cũng có thể có mà. Nếu không thì phải tùy thuộc vào từng yêu cầu cụ thể(Ví dụ như mảng số chẳng hạn ...)

Đúng như bạn nói, chúng ta không thể lường hết được mọi thứ. Nếu thay "~" bằng "~$#@" thì xác suất trùng cũng tạm chấp nhận được phải không bạn.
 
Lần chỉnh sửa cuối:
Upvote 0
Đúng như bạn nói, chúng ta không thể lường hết được mọi thứ. Nếu thay "~" bằng "~$#@" thì xác suất trùng cũng tạm chấp nhận được phải không bạn.
Như tôi đã nói, cách nào cũng ok miễn sao đáp ứng đúng được yêu cầu cụ thể. Mảng trong 1 số ngôn ngữ khác thường có hỗ trợ để nối mảng. Còn với VBA của excel theo tôi có thể đẩy các mảng vào 1 Sheet rồi chuyển ngược lại 1 mảng kết quả cũng là 1 cách. Tuy nhiên không hiểu ý tưởng của tác giả muốn gì, chứ tôi thấy hầu hết mọi người đều dùng vòng lặp để nối các mảng với nhau.
 
Upvote 0
Như tôi đã nói, cách nào cũng ok miễn sao đáp ứng đúng được yêu cầu cụ thể. Mảng trong 1 số ngôn ngữ khác thường có hỗ trợ để nối mảng. Còn với VBA của excel theo tôi có thể đẩy các mảng vào 1 Sheet rồi chuyển ngược lại 1 mảng kết quả cũng là 1 cách. Tuy nhiên không hiểu ý tưởng của tác giả muốn gì, chứ tôi thấy hầu hết mọi người đều dùng vòng lặp để nối các mảng với nhau.
Mình vẫn đang nghiên cứu và muốn tìm hiểu xem cách nào nhanh nhất thôi mà!
 
Upvote 0
Mình vẫn đang nghiên cứu và muốn tìm hiểu xem cách nào nhanh nhất thôi mà!
Tôi thấy bài toán nối mảng này không phức tạp lắm, nếu dùng vòng lặp thì trong vòng lặp cũng không có nhiều phép toán có thể ảnh hưởng đến tốc độ, chỉ là phép gán thông thường. Nên tôi nghĩ tốc độ không ảnh hưởng nhiều lắm.
 
Upvote 0
Tôi thấy bài toán nối mảng này không phức tạp lắm, nếu dùng vòng lặp thì trong vòng lặp cũng không có nhiều phép toán có thể ảnh hưởng đến tốc độ, chỉ là phép gán thông thường. Nên tôi nghĩ tốc độ không ảnh hưởng nhiều lắm.
Tôi cũng muốn nối mảng như sau, không biết có được không.
Dim ArrMe(), ArrCon()
ReDim ArrMe(2,10)
ReDim ArrCon(2,2)
Các ArrCon là kết quả của những lần tính toán.
Tôi muốn ArrMe=ArrCon(2,2)+ArrCon(2,2)+ArrCon(2,2)+ArrCon(2,2)+ArrCon(2,2)
Vậy có cách nào ngoài phải duyệt từng ArrCon và gán vào ArrMe.
Tôi có tham khảo CombineTwoDArrays của trang http://www.cpearson.com/Excel/VBAArrays.htm nhưng chưa áp dụng được.
Cám ơn. Phải chi có hàm
ArrMe=ArrMe+ArrCon(2,2) ...
Thì hay quá.
 
Upvote 0
Em gửi một cách củ chuối này anh xem thử nha
PHP:
Sub GhepMang()
Dim Arr
arr1 = Array("a", "b", "c")
arr2 = Array("d", "e", "f")
arr3 = Array("g", "h", "i")
Arr = Split(Join(arr1, "~") & "~" & Join(arr2, "~") & "~" & Join(arr3, "~"), "~")
MsgBox Arr(4) '=> "e"
End Sub
Em dùng hàm fiter2Array của thầy NDU để xuất ra 2 mảng theo 2 điều kiện tìm kiếm.
Sau đó dùng cách này để nối 2 mảng này lại với nhau nhưng không được.

Nhờ mọi người chỉ dẫn thêm.
 

File đính kèm

Upvote 0
Em dùng hàm fiter2Array của thầy NDU để xuất ra 2 mảng theo 2 điều kiện tìm kiếm.
Sau đó dùng cách này để nối 2 mảng này lại với nhau nhưng không được.

Nhờ mọi người chỉ dẫn thêm.
Bạn xem file đính kèm nhé.
 

File đính kèm

Upvote 0

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

Back
Top Bottom