<p>公式可一次成形。但我有个不明白的地方,Mod()部分用F9一步步运算没问题,和起来算会出现小数位,导致结果有点问题。我加了个Int()就好了,这是为什么,请各位大师指点。<br/><br/>=LOOKUP(INT(MOD(SMALL(COUNTIF($A$2:$A$25,">"&$A$2:$A$25)+COUNTIF($B$2:$B$25,"<"&$B$2:$B$25)/100+ROW(INDIRECT("1:"&ROWS($A$2:$A$25)))/10000,ROW(INDIRECT("1:"&ROWS($A$2:$A$25))))*10000,100)),ROW(INDIRECT("1:"&ROWS($A$2:$A$25))),OFFSET($A$2:$A$25,,COLUMN($A:$E)-1))</p><font color="#0000ff"><div class="msgheader">QUOTE:</div><div class="msgborder"><p><font color="#0000ff">思路很好,这是个多单元格数组公式,有几点意见供参考:</font></p><p><font color="#0000ff">1、为解决浮点计算的误差,应使用Round()进行修约,不能用Int()。</font></p><p><font color="#0000ff">2、<u>为避免浮点计算的误差,应尽量使用整数计算,把数字扩大,不要把数字缩小为小数(这点很重要)。</u></font></p><p><font color="#0000ff">3、使用太多的ROW(INDIRECT("1:"&ROWS($A$2:$A$25))),没有必要把数组元素都从1开始,只有SMALL要用到,但直接引用单元格,也不必用INDIRECT,直接用ROW(A2:A25)-ROW(A2)+1,即减少了公式长度,又减少了函数嵌套层数。</font></p><p><font color="#0000ff">4、多单元格数组公式,可直接使用相对引用(此点只为减少公式长度,与计算结果无关)。</font></p><p><font color="#0000ff">简化如下:</font></p><p><font color="#0000ff">=LOOKUP(--RIGHT(SMALL(COUNTIF(A2:A25,">"&A2:A25)*10000+COUNTIF(B2:B25,"<"&B2:B25)*100+ROW(A2:A25),ROW(A2:A25)-ROW(A2)+1),2),ROW(A2:A25),INDEX(A2:E25,,COLUMN(A:E)))</font></p><p><font color="#0000ff"> by gvntw</font></p></div></font>
[此贴子已经被gvntw于2007-5-22 9:19:38编辑过] |