|
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用 · 内置多项VBA编程加强工具 ★ 免费下载 ★ ★ 使用手册★
只取三个进行组合,确实循环就行了。
给个通用的组合的方法,可以任取几个进行组合。
- Dim brr, t
- Sub main() '初始数组arr,返回brr,n为选取个数
- t = 0
- tmp = Range("a3:c18")
- ReDim arr(UBound(tmp) * UBound(tmp, 2))
- For Each x In tmp
- If Len(x) Then
- arr(n) = x
- n = n + 1
- End If
- Next
- ReDim Preserve arr(n - 1)
- n = 3
- ReDim result(0 To UBound(arr))
- ReDim brr(1 To Application.Combin(UBound(arr) + 1, n)) '结果的个数
- Call Cmbine(arr, 0, result, n, n, UBound(arr) + 1)
-
- [e3].Resize(t) = Application.Transpose(brr)
- End Sub
- '//arr为原始数组
- '//start为遍历起始位置
- '//result保存结果,为一维数组
- '//count为result数组的索引值,起辅助作用
- '//NUM为要选取的元素个数
- '//arr_len为原始数组的长度,为定值
- Sub Cmbine(arr, start, result, count, NUM, arr_len)
- i = 0
- For i = start To arr_len + 1 - count - 1
- result(count - 1) = i
- If count - 1 = 0 Then
- For j = NUM - 1 To 0 Step -1
- s = s & "+" & arr(result(j))
- Next
- t = t + 1
- brr(t) = Mid(s, 2): s = ""
- Else
- Call Cmbine(arr, i + 1, result, count - 1, NUM, arr_len)
- End If
- Next
- End Sub
复制代码 |
|