|
发表于 2014-10-7 02:24
|
显示全部楼层
本楼为最佳答案
本帖最后由 xdragon 于 2014-10-7 02:33 编辑
- Dim ttl%, chs%, rnd_array%(), t_array%(), cbn&, irow&, cnt&
- Sub test()
- ttl = 5: chs = 3
- cbn = Application.WorksheetFunction.Combin(ttl, chs)
- irow = Rows.Count
- If cbn > irow Then ReDim rnd_array%(1 To irow, 1 To chs) Else ReDim rnd_array%(1 To cbn, 1 To chs)
- ReDim t_array%(1 To chs)
- Call dgzh(1, 0)
- End Sub
- Sub dgzh(yn%, n%)
- Dim i%, j%
- For i = n + 1 To ttl - chs + yn
- If yn <= chs Then
- t_array(yn) = i
- Call dgzh(yn + 1, i)
- Else
- cnt = cnt + 1
- For j = 1 To chs
- rnd_array(cnt, j) = t_array(j)
- Next
- If cnt Mod irow = 0 Or cnt = cbn Then
- Call array_to_range
- End If
- Exit Sub
- End If
- Next
- End Sub
- Sub array_to_range()
- Static shtcnt%
- shtcnt = shtcnt + 1
- If Sheets.Count < shtcnt Then Sheets.Add , Sheets(Sheets.Count)
- Sheets(shtcnt).Cells.Clear
- Sheets(shtcnt).Range("A1").Resize(cnt, chs) = rnd_array
- cbn = cbn - irow
- If cbn > 0 Then
- ReDim rnd_array(1 To IIf(cbn > irow, irow, cbn), 1 To UBound(rnd_array, 2))
- Else
- shtcnt = 0
- Erase rnd_array
- End If
- cnt = 0
- End Sub
复制代码 |
评分
-
查看全部评分
|