ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 5103|回复: 13

我的排序功课

[复制链接]

TA的精华主题

TA的得分主题

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

oQeVCgRH.rar (7.13 KB, 下载次数: 51)

上边是一个区域排序的例子,可以当模板用,只要根据说明摸索一下就可以了。想读懂可以把用到的名称一个一个帖出来。

最近20天可能会不"回家",忙 那个考试 去了,希望大家记得我,特此给份小礼物,希望大家喜欢

[此贴子已经被作者于2006-12-1 8:16:52编辑过]

TA的精华主题

TA的得分主题

发表于 2006-11-10 00:24 | 显示全部楼层

先谢谢分享。。不过这个排序对我来说有点难度。。。

TA的精华主题

TA的得分主题

发表于 2006-11-10 08:01 | 显示全部楼层

TA的精华主题

TA的得分主题

 楼主| 发表于 2006-11-10 08:23 | 显示全部楼层

我的排序功课-暂时完全

3KgnXCdp.rar (41.86 KB, 下载次数: 24)

象上几个功课一样,是按某个帖子上所列的倩贴进行汇总,加工,完善的,希望对大家有用。如果懂了这些,那么那些帖子几乎是不用去看了

TA的精华主题

TA的得分主题

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

  发的帖子跟贴那么少,心里好是惭愧呀。我的例子很多是论坛里收集的,解决办法有些是参照高手的,有些是自己摸索的。看排序我有一个体会就是公式比较庞大,比数据有效性,单元格要复杂的多,尤其涉及数组公式。但看到后来我发觉排序基本上都可以套用一个公式来解决(该公式是我看一位仁兄的公式一个下午再经消化吸收改编形成的)。一种排序往往实现的方式有多种,但从解决问题的角度来说一个人只要熟练自己习惯的一些函数组合就行了,遇到特殊的排序可以降低要求作个辅助列来解决,本来么写函数的话一个辅助列应该就相当于定义一个数组,没有什么丢人的(本人就因为对一个区域排序想通过不加辅助列的方式一步实现,结果白白浪费了两天,头都涨死了,最后还是添加了辅助列,把它变成了一个很熟悉的问题,我们的首要任务是解决问题,心态很重要。当然你是高手那除外,毕竟我们要不断完美自己。)

排序,一般是对某列数字排序,当排序的特性不是数据的时候我们就要把他转化为数据(比如根据文本的长度我们可以先通过一个公式LEN()来转化成数据,其他雷同),然后套用INDEX(REF,SMALL(IF(large(f(REF),row())=f(REF),row(REF),""),row()-sum(if(large(f(REF),row())<f(REF),1,"")))).

解释:上面的公式我已经作了某些假定:我们是从第一行开始排序。其他简要说明如下:f(REF),在这里不是一个具体的函数,他是不确定的,他的功能是用来把那些排序特性转化为数值型的,就如上边的LEN(),如果排序的对象就是数值型的那么可以省去这个函数;INDEX()函数大家应该懂吧,不懂自己查帮助(总的逻辑如下:排序么从稍微高一点的角度讲就是把一列数(源数)更改次序后变成另一列数(目标数)。这里有两点,一,目标数和源数是同一堆数,所以目标数1的生成过程可以看成是把源数中满足条件的数选过来(降序排列时就是从源数据中找到第row()大的数据(这里row()是用来标注目标数据的序号,可以根据实际进行修改,如果目标数据是一行的,那么可以用column()取代)在源数据中的位置,然后把源数据中这个位置的数据取出来生成目标数据。对于纯数据排序这可以了,但是如果是这样我们不是可以通过excel自己的降序来完成了吗?对呀,但实际情况可能是这样源数据有多列,其中有一列是数据,呵呵,这样好象也能用excel的自带降序来完成...恩,这样用公式后就是自动实现了,如果数据多的话还是省心很多,加上如果要对文本长度之类特殊的排序还是懂点公式好,呵呵,必要性就讲这里吧,呵呵。

上边的通用公式有个地方可能看上去有点晦涩,row()-sum(if(large(f(REF),row())<f(REF),1,"")))可能括号层次有错误,先不考虑这些。这部分主要是针对下面这种情况,看了你就明白了。先有必要讲一下large()函数,定义名称1,5,6,8,5为data,那么large(data,1)是8,没有疑问,large(data,2)=6,也没有疑问,但是large(data,3)=large(data,4)=5,如果他们分别对应事物A,B,C,D,E(定义名称为ABC)的某个数据属性,我们要根据他们的这个数据属性对事物进行排序,如果我们使用INDEX(REF,SMALL(IF(large(f(REF),row())=f(REF),row(REF),""),1))).那么降序的结果是D,C,B,B,A,你可以发现B出现了2次,而E没有出现,原因就是因为B,E的数据属性大小相等,而B在源数据中的位置在前面。在公式IF(large(f(REF),row())=f(REF),row(REF),"")中我们把第row()大的源数据项在源数据中的位置都记录下来了,保存在这样的一个数组中{"","",row(ref1),"","",row(ref2)...}。对应我们上面的情况就是IF(large(data,row())=data,row(data),""),当row()=3是,就是把第三大的数5在源数据中的位置登记到这个数组了{"",2,"","","",5}.如果我们使用公式=INDEX(ABC,SMALL(IF(large(data,3)=data,row(data),""),1)).括号层次可能不对,不理会这个。这样就是取了ABC中的第2个数,就是B。当row()=4时,large(data,4)=5,此时产生的数组也是{"",2,"","","",5},通过公式得到的数据依然是B。而我们期望这个时候得到的是5,就是ABCDE中的E。这种情况什么时候会发生呢,就是当数据相同的时候发生这样的错误(上面的例子中就是同时出现5的情况)。从信息的角度讲就是我们没有充分利用源数据中的次序这个量,就是对中间生成的数组没有充分利用。当产生的数组中非""的量有多个时为了能让他一个一个吐(应该第一声吧,呵呵)出来,而不是单单就知道吐第一个,怎么办呢,我于是想到了row()的渐大性。最大的产生就是row(),第二大的产生就是row()-第一大的数的个数,第三大的产生就是row()-第一大的数的个数-第二大的数的个数...于是就是row()-所有比large(data,row())大的个数。这个个数就是sum(if(large(f(REF),row())<f(REF),1,""))。这样对于我们的列子,B的产生,row()-2=1,取数组{"",2,"","","",5},中的第一小的数据就是2,对应ABC中的事物就是B,E的产生,row()-2=4-2=2,取数组{"",2,"","","",5},中第二小的数据就是5,对应ABC中的事物就是E。于是排序就是D,C,B,E,A。

个人觉得排序核心的就是这个公式。如果消化了就好呀,呵呵。如果喜欢请回个贴,我最近对这个虚无的东西还是很感兴趣,谢谢配合。

hl3eLkHd.rar (1.93 KB, 下载次数: 20)

个人感觉排序的功力主要体现在那个数组公式里,如果一时看起来有点累,建议先去看我的主题贴中那个数组公式解读,然后我想你会更容易读这个公式,然后排序的时候真的就当他公式套好了,,呵呵

[此贴子已经被作者于2006-12-10 17:13:14编辑过]

TA的精华主题

TA的得分主题

 楼主| 发表于 2006-11-29 17:26 | 显示全部楼层

发觉自己顶了以后就没人支持了,郁闷。在注释里有说明的

TA的精华主题

TA的得分主题

发表于 2006-11-29 21:56 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
楼主的贴子对实际使用很有用,谢谢楼主

TA的精华主题

TA的得分主题

发表于 2006-11-30 10:55 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
楼主,不要灰心.付出总会有回报的.建议版主奖励加分!

TA的精华主题

TA的得分主题

发表于 2006-11-30 11:15 | 显示全部楼层

TA的精华主题

TA的得分主题

 楼主| 发表于 2006-12-1 08:04 | 显示全部楼层
哈哈,看来我象个成功的乞讨者。我觉得写公式比较简单,但读公式是比较难的,有时需要加上点猜想,现在我在主攻透视性表,希望不日和大家见面,呵呵。那个东西我发觉对统计分析的人很有帮助。
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-24 22:43 , Processed in 0.037458 second(s), 10 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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