Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
楼主: lizhengxu

[已解决]关于数组罗列问题,很难的题,咨询3天无结果,跪求

[复制链接]
发表于 2014-5-17 14:43 | 显示全部楼层
上传表格,并举实例说明你的情况
回复

使用道具 举报

 楼主| 发表于 2014-5-17 20:44 | 显示全部楼层
无聊的疯子 发表于 2014-5-17 14:43
上传表格,并举实例说明你的情况

大神,已经上传表格了,说明,例子也都在excel中,求解答。谢谢
回复

使用道具 举报

 楼主| 发表于 2014-5-18 08:34 | 显示全部楼层
求结论啊

点评

其实就是从m个数取n个数的组合,楼主的解释着实让人费解  发表于 2014-5-18 09:32
回复

使用道具 举报

发表于 2014-5-18 11:32 | 显示全部楼层
………………

新建 Microsoft Excel 工作表.zip

11.23 KB, 下载次数: 4

回复

使用道具 举报

 楼主| 发表于 2014-5-18 14:15 | 显示全部楼层
dsmch 发表于 2014-5-18 11:32
………………

大神的概括很准确,很感谢回复。但是有些错误。
例如:
n=8,m=5,程序的结果是:
8
8
8
8
8
8
8
8
7
7
7
7
7
7
7
7
6
6
6
6
6
6
6
6
5
5
5
5
4
4
4
3
4
3
2
1
3
2
1
2

但正确的结果应该是:
5
6
6
6
6
6
7
7
7
7
7
7
7
7
7
7
7
7
7
7
7
8
8
8
8
8
8
8
8
8
8
8
8
8
8
8
8
8
8
8
8
8
8
8
8
8
8
8
8
8
8
8
8
8
8
8
4
4
5
5
5
5
4
5
5
5
5
6
6
6
6
6
6
6
6
6
6
4
5
5
5
5
6
6
6
6
6
6
6
6
6
6
7
7
7
7
7
7
7
7
7
7
7
7
7
7
7
7
7
7
7
7
3
3
3
4
4
4
3
3
4
4
4
3
4
4
4
5
5
5
5
5
5
3
3
4
4
4
3
4
4
4
5
5
5
5
5
5
3
4
4
4
5
5
5
5
5
5
6
6
6
6
6
6
6
6
6
6
2
2
2
2
3
3
2
2
2
3
3
2
2
3
3
2
3
3
4
4
4
2
2
2
3
3
2
2
3
3
2
3
3
4
4
4
2
2
3
3
2
3
3
4
4
4
2
3
3
4
4
4
5
5
5
5
1
1
1
1
1
2
1
1
1
1
2
1
1
1
2
1
1
2
1
2
3
1
1
1
1
2
1
1
1
2
1
1
2
1
2
3
1
1
1
2
1
1
2
1
2
3
1
1
2
1
2
3
1
2
3
4

少了好多数据。在帮忙优化一下,谢谢了。亲
回复

使用道具 举报

 楼主| 发表于 2014-5-18 14:27 | 显示全部楼层
dsmch 发表于 2014-5-18 11:32
………………

可以把它提供二维数组里面么?
回复

使用道具 举报

 楼主| 发表于 2014-5-18 14:41 | 显示全部楼层
lizhengxu 发表于 2014-5-18 14:15
大神的概括很准确,很感谢回复。但是有些错误。
例如:
n=8,m=5,程序的结果是:

最好存在数组里a(x, m)一个二维数组里面。
刚才试验,如果n=30,m=20. 就会卡死。还有优化的空间么?
例如IIF 换成 IF 提高效率
回复

使用道具 举报

发表于 2014-5-18 15:13 | 显示全部楼层
  1. Dim arr(), m%, n&, s&
  2. Sub Macro1()
  3. n = [b5]: m = [b6]: s = 0
  4. [11:15].ClearContents
  5. ReDim arr(1 To m, 1 To n)
  6. aa "", 0
  7. End Sub
  8. Sub aa(p$, t%)
  9. If t = m Then
  10.     s = s + 1
  11.     Cells(11, s).Resize(m, 1) = Application.Transpose(Split(Mid(p, 2), ","))
  12. End If
  13. For i = n To 1 Step -1
  14.     If p = "" Then
  15.         aa p & "," & i, t + 1
  16.     Else
  17.         x = Split(p, ","): y = IIf(p = "", 0, Val(x(UBound(x))))
  18.         If InStr(p & ",", "," & i & ",") = 0 And y > i Then aa p & "," & i, t + 1
  19.     End If
  20. Next
  21. End Sub
复制代码
回复

使用道具 举报

 楼主| 发表于 2014-5-18 20:22 | 显示全部楼层
dsmch 发表于 2014-5-18 15:13

同样问题,m,n值一高就卡死
回复

使用道具 举报

发表于 2014-5-18 20:56 | 显示全部楼层
lizhengxu 发表于 2014-5-18 20:22
同样问题,m,n值一高就卡死

Combin(30,20)=30,045,015 即3千多万个结果。


如果要定义一个数组 arr(1 To 30045015, 1 To 20) 我的电脑是内存溢出了。


你确定你需要这么巨量的数组?!



…………
另外,一般输出结果时,会按照行大于列的方式,
如你附件按列输出时,最大只能计算 16384组数据。




回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|Excel精英培训 ( 豫ICP备11015029号 )

GMT+8, 2024-5-6 21:22 , Processed in 0.218419 second(s), 13 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表