ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 Excel Home精品图文教程库
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
300集Office 2010微视频教程 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
楼主: 山菊花

[Excel 函数与公式] [第22期-2]奇妙的计票系统

[复制链接]

TA的精华主题

TA的得分主题

发表于 2007-4-16 19:31 | 显示全部楼层

答案已发.请查收 .谢谢谢谢 :)

 

QUOTE:

错了。

——山菊花

[此贴子已经被山菊花于2007-4-22 21:16:32编辑过]

TA的精华主题

TA的得分主题

发表于 2007-4-20 23:07 | 显示全部楼层

已发送,,,,,,不知是否正常收到,,,,,,超版,,,,,,

QUOTE:

未收到答案。

——山菊花

[此贴子已经被山菊花于2007-4-22 21:19:06编辑过]

TA的精华主题

TA的得分主题

发表于 2007-4-21 19:06 | 显示全部楼层

答题已发送至指定邮箱,

请查收!

[em04]

QUOTE:

不符合要求。

——山菊花

[此贴子已经被山菊花于2007-4-22 21:21:30编辑过]

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?免费注册

x

TA的精华主题

TA的得分主题

 楼主| 发表于 2007-4-23 01:25 | 显示全部楼层

小结

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编辑过]

TA的精华主题

TA的得分主题

发表于 2007-4-23 13:34 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2007-4-23 18:43 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2007-4-23 19:45 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册

我的计票应该没有错误呀,我试了没有问题呀,

TA的精华主题

TA的得分主题

发表于 2007-4-24 09:40 | 显示全部楼层
好像大部分答案存在一个问题,就是如果在录入区以外随意输入数据的话,会引起统计错误,2楼的答案处理得比较好。

TA的精华主题

TA的得分主题

发表于 2007-4-24 17:05 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册

不好意思,上次的答题确实有问题,在有些情况下是对的,有些情况下错误。找到问题了

TA的精华主题

TA的得分主题

发表于 2007-4-24 20:43 | 显示全部楼层
QUOTE:
以下是引用jonnni在2007-4-24 9:40:10的发言:
好像大部分答案存在一个问题,就是如果在录入区以外随意输入数据的话,会引起统计错误,2楼的答案处理得比较好。

这是相当于表格更新自动重算了

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

本版积分规则

关闭

最新热点上一条 /1 下一条

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-4-25 13:42 , Processed in 0.041255 second(s), 13 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

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