这个比较简单.只定义一个Sz=问题!$B$1:$B$21,以下是先求001,公式放在K2.可以向右填充
=MAX(MMULT(((TRANSPOSE(ROW(Sz))=ROW(Sz))-(TRANSPOSE(ROW(Sz))=ROW(Sz)+2))*1,LARGE(IF(ROW(Sz)>1,(Sz=K$1)*ROW(Sz),1),ROW(Sz)))-2)*(COUNTIF(Sz,K$1)>0)
这个够不够简?说真的,你说求间隔有别的方法,我始终没找着.这个其实是简化求间隔和,由于原题是要求连续两个间隔的和,因此,只要让第三个减一个,而不是求三减二再加上二减一.由于是用行号相减,因此每一个间隔是行号差还要-1,那么三减一,相当于二个间隔,故要-2.至于构造的矩阵,见http://club.excelhome.net/viewthread.php?tid=120991,这里是对角线矩阵-后移2格矩阵,同时由于0不影响运算,所以数组大小不需要用约束,直接用全数组运算.使得公式得以进一步简化.
所以这只是算法上的简化.未能找到求间隔的新方法.
Gdliyy注:
晚上才仔细看了,利用Mmult进行错位运算,你这个思路很不错啊!这个分应该加!
值得提醒一点:建议不要在最后*Countif()段,最好使用IF函数来进行判断,这样当标志不存在时,系统自动直接取0值返回,不会再进行False的运算了。或者另外一个方法:直接多加个0在Max函数中(Countif()段省略),这样也可以达到目的:)
再次感谢您的参与!
[此贴子已经被gdliyy于2005-9-9 2:19:07编辑过] |