1、启动迭代计算 在C3单元格录入姓名,按录入顺序依次将结果输出到E4:E23区域,重复结果只在F列统计录入次数。编写E列公式,不可避免要作一次判断,本单元格是否已经填充了数据,如果是,则不改变它,这种引用本单元格的公式,称为循环引用。当必须使用循环引用时,我们必须启动迭代计算,单击“工具—选项—重新计算”,勾选“迭代计算”。 2、简化公式 4编写循环引用公式,因测试难度相对较大,常常在不知不觉中把公式写得复杂了。如: =IF(C$3="","",IF(AND(E4="",COUNTIF(E$3:E3,C$3)=0),C$3,IF(E4="","",E4))) 后面部分,无论哪种情况,都等于E4本身: =IF(C$3="","",IF(AND(E4="",COUNTIF(E$3:E3,C$3)=0),C$3,E4)) 4下面的公式也存在多余的判断: =IF($C$3="","",IF(COUNTIF($E$3:E3,$C$3)=0,IF(OR(E4=0,E4=""),$C$3,E4),IF(LEN(E4)>1,E4,""))) OR(E4=0,E4="")这部分允许简化为E4="",填充公式后,执行一次C3单元格的清空处理,公式所在单元格便被填充为空字符""。或者设置工作表“不显示零值”,将公式改为: =IF($C$3="",0,IF(COUNTIF($E$3:E3,$C$3)=0,IF(E4=0,$C$3,E4),E4)) 4lrf2003、逍遥自在2005、chrisfang等朋友提供的答案十分简练: =IF($C$3="","",IF((E4<>"")+COUNTIF($E$3:E3,$C$3),E4,$C$3)) 两种情况下,公式的结果等于单元格本身:⑴单元格不为空,⑵C3的值在本单元格以上区域存在,如果两条件都不破成立,则用C3单元格的值填充本单元格。 4统计票数的公式,chrisfang、fjlhgs、mallen、leeyong、huiz999等朋友的答案写得很好: =IF(E4="","",IF($C$3=E4,N(F4)+1,F4)) 3、控制迭代次数 各位朋友的答案,除了复选“迭代计算”外,还设置“最多迭代次数”为1,不然,按默认值100,会得到错误的统计结果。 4如果“最多迭代次数”等于100,可以得到正确的结果吗?可以: 设一辅助单元格: D4=IF(C3="",0,D4+1) 统计结果公式为: E4=IF(C$3="","",IF(AND(E4="",COUNTIF(E$3:E3,C$3)=0,MOD(D$4,100)=1),C$3,E4)) F4=IF(E4="","",IF(MOD(D$4,100)=0,(N(F4)+(C$3=E4)),F4)) 4题外话,如何获得“最多迭代次数”?本例中,可借用F24的值控制单元格的计算: D3=IF(C3="",0,IF(F24>0,D3,D3+1)) (使用F4:F5也可以) 4以上公式,无论最多迭代次数为几,按F9都会引发公式的重算。除了C3单元格输入姓名外,按F9不改变F列的统计结果,可以实现吗?也是可以的。 作为思考题留给大家。 4、复杂的循环引用 18楼lws朋友的公式: =IF($C$3="","",IF(AND($G$4=ROW()-3,E4="",$C$3<>""),$C$3&"",E4&"")) 第一次录入的姓名会被丢失,除非第一次录入姓名后按F9一次。原因是E4与G4两个单元格之间存在循环引用: E4=IF($C$3="","",IF(AND($G$4=ROW()-3,E4="",$C$3<>""),$C$3&"",E4&"")) G4=IF(C3="",0,IF(AND($C$3<>"",$G$4<20,C3<>G5,COUNTIF(E4:E23,C3)<1),G4+1,G4)) 在G4单元格公式计算结束之前,它的值为0,E4单元格的计算结束在G4单元格之前,引用G4的值是0,不是1。 所以,要把公式改为(条件$C$3<>""多余,舍去): E4=IF(C$3="","",IF(AND(G$4=ROW()-4,E4=""),C$3,E4)) 或者: G4=IF(C3="",1,G4+(COUNTIF(E4:E23,C3)=0)) E4=IF(C$3="","",IF(AND(G$4=ROW()-3,E4=""),C$3,E4)) (取消E24、G5辅助单元格)
[此贴子已经被作者于2007-4-23 7:51:59编辑过] |