Tìm tất cả các hoán vị của thành viên mảng 2 chiều

Liên hệ QC

jubinell

Thành viên mới
Tham gia
27/11/09
Bài viết
37
Được thích
16
Nghề nghiệp
Tư vấn kinh doanh/kinh tế, nhạc sỹ, game thủ (keke
Chào các bạn các bạn giúp mình với,

Mình có 1 mảng VBA 2 chiều chứa ký tự. Mỗi một thành viên trong mảng có thể chứa 1) một nhóm ký tự bất kỳ, 2) dấu _ (underscore), 3) không chứa gì.

Ví dụ (mảng 3x4):
"an" "_" "xanh"
"vinh" "" "vàng"
"trang" "" ""
"" "" ""

Bỏ qua các ký tự trống "", mình muốn sắp xếp các thành viên của mảng này thành một chuỗi được ngăn cách bởi một khoảng trống:
an_xanh vinh_xanh trang_xanh an_vàng vinh_vàng trang_vàng


Mình nghĩ mãi mà không nghĩ ra cách làm bằng for...next. Lưu ý: ví dụ ở trên chỉ có tính chất minh họa. Trong thực tế thì kích cỡ của mảng có thể thay đổi và nội dung cũng vậy.

Các bạn giúp mình với.
 
Theo thí dụ thì hình như không phải "hoán vị" phần tử mảng, mà là phối hợp lần lượt các phần tử mảng, rồi nối lại. Bạn thấy thế nào? Nếu đúng như tôi nói, thì có thể có cách.
 
Upvote 0
À bạn nói đúng đấy. Kiến thức toán học của tôi kém quá cho nên có lẽ là dùng sai từ rồi. Nhờ bạn giúp đỡ nhé!
 
Upvote 0
Dùng mánh nhiều hơn dùng suy luận!
PHP:
Option Base 1
________________
Sub Noi()
Dim Arr
Set Arr = Sheet1.Range("Abc")
Rcount = Arr.Rows.Count
Ccount = Arr.Columns.Count
tmp = ""

For i = 1 To Rcount
    tmp1 = Arr(i, 1)
    If Len(tmp1) = 0 Then GoTo next1
    For j = 1 To Rcount
    tmp2 = tmp1
        For k = 2 To Ccount
        If Len(Arr(j, k)) = 0 Then Exit For
        tmp2 = tmp2 & Arr(j, k)
    Next
        If tmp2 <> tmp1 Then
            tmp = tmp & tmp2
            tmp = tmp & "; "
        End If
Next
next1: Next
Sheet1.[a20] = Left(tmp, Len(tmp) - 2)
End Sub
 

File đính kèm

Upvote 0
Đúng ra là tôi cần nối các thành viên trong một mảng (array) thay vì các ô trong Excel, nhưng code này có thể biến hóa được.

Để tôi thử xem bạn nhé.

Cám ơn bạn nhiều!
 
Upvote 0
Tất cả các câu lệnh trên là xử lý mảng đấy chứ?
Chỉ mỗi câu lệnh lấy từ sheet là gán giá trị ban đầu cho mảng:
PHP:
Set Arr = Sheet1.Range("Abc")
bạn thay bằng giá trị khác cho mảng tùy thích.

Còn câu lệnh gán xuống sheet là kiểm tra kết quả thôi.
 
Upvote 0
Web KT

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

Back
Top Bottom