以下是引用[I]gdliyy[/I]在2006-6-17 0:17:23的发言:
1、大家是否想过,对于这种问题用Mmult来解,有个共同点是有些列必须用Transpose来进行转置,楼主说MMULT速度会比SUMPRODUCT快,可能未必,因为这时公式中除了Mmult的造成矩阵运算外,无形中还加入了Transpose的运算(这个函数也是一个耗内存大户,很有可能造成内存不足); 我做了一个简单测试,在实例2中,将运算公式加大到2000行,对于明细数据增加到(1000行),使用Sumproduct运算了13秒;而用Mmult则运算了19秒;重新更新数据,明细数据增加到(3000行),,Sumproduct运算了65秒;而用Mmult则运算了78秒。 我接触MMULT时间不长,还不大熟悉。感谢gdliyy版主的指点! 用MMULT能否在大量公式的情况下取代SUMPRODUCT,确实还是一个值得讨论的问题,或者换句话说,现在还不能下定论。 同意版主关于多了一个TRANSPOSE函数要多费时间的说法。 但是在我发这个帖子之前,我已经做过了一些简单的测试,也在实际工作中所使用的表格上作了测试,总的结论如我在帖子中表达的那样:公式越多,速度的优势明显。这点和版主的测试结论不相同。同样是我帖子中的实例2,我的测试结果是在公式2000行,明细数据1000行的情况下,SUMPRODUCT:3.6秒;MMULT:1.3秒。我不知道为什么正好与版主数据相反。 我想,TRANSPOSE虽然耗时间和内存,只要不出现内存不足的情况,在大量公式的情况下,其总的计算量应该是比SUMPRODUCT要小的。这是多单元格数组公式的特性使然。而在公式数量少的情况下,使用MMULT就远不如SUMPRODUCT了。比如,数据1000行,如果公式只有20行,则SUMPRODUCT时间为0.05秒,而MMULT公式还是1.3秒。 再补充一个刚才的测试结果:对于顶楼帖子中的实例3,SUMPRODUCT的运行时间是1.5秒,而使用MMULT的时间是0.08秒。【SUMPRODUCT公式参见原帖,顶楼实例3中已给出链接】 关于MMULT的限制,我找到了chenjun的一个帖子,里面有这个说法: 以下是引用[I]chenjun[/I]在2004-10-6 23:41:00的发言: TRANSPOSE和MMULT函数对参数行的限制在2000版中是5461。 原帖链接: http://club.excelhome.net/dispbbs.asp?boardid=1&replyid=276203&id=59645&page=1&skin=0&Star=4 我测试了一下,在XP版本中,TRSPOSE没有限制,也就是说可以用到65536。按理说,2003版应该也是这样吧?
[此贴子已经被czzqb于2007-10-6 11:02:03编辑过] |