ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[Excel 函数与公式] [第15期]选举得票情况统计

[复制链接]

TA的精华主题

TA的得分主题

发表于 2006-9-15 10:34 | 显示全部楼层

本帖子中包含更多资源

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

x

TA的精华主题

TA的得分主题

发表于 2006-9-16 01:50 | 显示全部楼层

很久没有解题了,其实这个解法不重要,关键在于效率优化,速度一般:)

期待更好的解法,呵呵。。。

 

QUOTE:
提速关键: 
1、 利用Frequency()代替Match(),速度稍快。
2、 利用--减负运算,代替1*,速度稍快。
3、 姓名公式中使用B4相对引用判断,减少数组公式运算量,速度倍增。
4、 使用SUM(--(_Count=$B4))/$B4代替人数统计,速度稍有提升。
5、 利用等差数列取姓名,省去MATCH查找比较判断,速度稍有提升。

QUOTE:

精辟,可代总结了!

加分奖励。

——山菊花

[此贴子已经被山菊花于2006-9-21 10:14:20编辑过]

本帖子中包含更多资源

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

x

TA的精华主题

TA的得分主题

发表于 2006-9-17 14:14 | 显示全部楼层

比第1个能稍微好点,请版主审批:

 

本帖子中包含更多资源

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

x

TA的精华主题

TA的得分主题

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

回复:(山菊花)[第15期]选举得票情况统计

再次交两个答案,都是用的多单元格公式。

用条件格式处理的错误值:


QUOTE:

为区域数组公式,加分鼓励。

[此贴子已经被山菊花于2006-9-20 19:04:15编辑过]

本帖子中包含更多资源

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

x

TA的精华主题

TA的得分主题

发表于 2006-9-17 22:10 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助

回复:(山菊花)[第15期]选举得票情况统计


本帖子中包含更多资源

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

x

TA的精华主题

TA的得分主题

发表于 2006-9-18 16:33 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助


花了一个上午的时间,搜刮了论坛上的相关知识,终于做出来了!版主不嫌公式臭长的话,给两分鼓励一下吧,呵呵!

本帖子中包含更多资源

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

x

TA的精华主题

TA的得分主题

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

试做了一个,运行速度较慢!见笑了!


本帖子中包含更多资源

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

x

TA的精华主题

TA的得分主题

发表于 2006-9-21 08:34 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助

会错意了.


QUOTE:

shuyee兄的答案早早发到我邮箱中,没有跟帖上传,现在算补交了。

——山菊花

[此贴子已经被山菊花于2006-9-21 9:04:09编辑过]

本帖子中包含更多资源

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

x

TA的精华主题

TA的得分主题

 楼主| 发表于 2006-9-21 14:15 | 显示全部楼层

总结

逢县镇人大换届选举,看同事为印制选票等事忙忙碌碌,特制一题以纪念。

收到13位会员共21份答案,感谢老朋友的热情参与,祝贺新朋友获得成功,特别祝贺fjlhgs会员首次得到积分。

总也猜不透czzqb的圈子是什么圈子,遗憾。

目不新鲜,提取不重复的值,在论坛老生常谈,现仅为其披一件马甲而已。

第1、2、3选区纯是题目的花絮,为检测公式提供不同数据,对公式的设计没有影响,我们不再提它。

题目要分两部分完成:

1、票数的不重复值;

2、相同票数的名字的不重复值。

实这个解法不重要,关键在于效率优化。[em44]gdliyy版主为这个总结划定了主题!5个提速关键就是一个精辟的总结,让人受益匪浅:[em17]

QUOTE:
提速关键: 
1、 利用Frequency()代替Match(),速度稍快。
2、 利用--减负运算,代替1*,速度稍快。
3、 姓名公式中使用B4相对引用判断,减少数组公式运算量,速度倍增。
4、 使用SUM(--(_Count=$B4))/$B4代替人数统计,速度稍有提升。
5、 利用等差数列取姓名,省去MATCH查找比较判断,速度稍有提升。

取票数的不重复值,首先根据姓名计算所得票数(即重复次数),用公式=COUNTIF(data02,data02),如下图所示:


先把它定义为名称:_Count=COUNTIF(data02,data02)

(所有名称定义引用gdliyy版主答案)

接着,提取_Count形如黄色区域的不重复值,两个公式都是经典解法:

IF(MATCH(_Count,_Count,)=ROW(data02)-1,_Count)

IF(FREQUENCY(_Count,_Count),_Count)

结果为:

{6;;7;4;;;;;;;8;;;;;;;;;;;;;;;2;;;;;;;;;;;;;;;;;;;;;;;;;;1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;}

最后,用Small()函数按从小到大的顺序,把结果输出到B5:B11区域:

SMALL(IF(FREQUENCY(_Count,_Count),_Count),ROW(A1))

公式中,计算不重复票数的个数:COUNT(1/FREQUENCY(_Count,_Count)),公式用得也很好。

取名字的不重复值,以C6:I6单元格公式为例(票数等于4的对应姓名):

1、用下面公式生成一内存数组,数值包含两部分信息,后三位表示姓名所在行号,前面部分表示姓名在所有姓名中的排位:

IF(_Count=$B6,COUNTIF(data02,"<="&data02)*1000+ROW(data02)-1)

结果为:


以生成结果为关键字进行排序,结果如下:


根据上面数据的排列规律,用下面公式可提取出不重复值:

SMALL(IF(_Count=$B6,COUNTIF(data02,"<="&data02)*1000+ROW(data02)-1),(COLUMN(A3)-1)*$B6+1)

公式中的彩色部分,在单元格C6:I6中从左至右,结果依次为:1,5,9,13,17,21,25,即,取上面结果从小到大的位数,即跳过重复的姓名,取不重复的值。这便是gdliyy版主说的“利用等差数列取姓名”。

完整公式中的SUM(--(_Count=$B6))/$B6,票数等于4的记录数除以4,得到不重复的姓名个数,思路巧而妙。

速的第6关键。公式中被反复调用的部分要尽量简化,以减少重复计算的次数,本题中的_Count在公式中被反复调用,如果把“以拼音为序”,即countif(data02,"<"&data02),加入到最底层的表达式中被反复调用,这样的公式就是低效率的公式。

这方面,gdliyychrisfanglee123封州大少shuyee几位的公式中,都表现得很好。

其他朋友的答案中,也有很精彩的部分,这里不再一一提及。

[此贴子已经被作者于2006-9-21 14:22:50编辑过]

本帖子中包含更多资源

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

x

TA的精华主题

TA的得分主题

发表于 2006-9-24 10:47 | 显示全部楼层

犯了个超低级错误:竟然没有点“上传”!

不过即使传上来了,在这21份答案中,要比较公式之优劣、比较速度之快慢,我的答案都名列三甲——倒数的。

[em04]

既然作了,还是发上来,只是献丑而已了。

这次应该不会不点上传了。


QUOTE:
从FREQUENCY(COUNTIF(data,data),ROW(!$1:$9))/ROW(!$1:$10)到COLUMN(A1:G1)>INDEX(P,B4),思路都显得新颖、独特,学习。——山菊花
[此贴子已经被山菊花于2006-9-24 11:26:01编辑过]

本帖子中包含更多资源

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

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

本版积分规则

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

GMT+8, 2024-4-27 12:16 , Processed in 0.053368 second(s), 14 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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