ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[分享] 【已总结】一则排序

[复制链接]

TA的精华主题

TA的得分主题

发表于 2023-6-15 23:36 | 显示全部楼层 |阅读模式
本帖最后由 人间油物 于 2023-6-17 21:33 编辑

这个题目较为容易,希望一看就会的大佬不要回帖,我觉得题目有实际意义,挺好的。

123.png
排序.zip (13.69 KB, 下载次数: 47)

评分

8

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2023-6-17 21:32 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
总结
  首先感谢shaowu超人老师,这个题目是他首先提出的,再次感谢为本题提供答案的2位老师,分别是汤春晖老师跟三秋之叶老师。题目估计也是比较简单,大家热情不太高涨,算是针对排序的一个类型题目,掌握好思路可以对其它变形熟练解决,下面我就分析一下2位老师提供的答案。
一、汤老师
  1. INDEX(A:I,RIGHT(SMALL(INT(MMULT(N(ROW(2:25)>COLUMN(A:X)),1/C2:C25)-1%+1)/1%%-(D2:D25="户主")/1%+ROW(),ROW()-1),2),COLUMN(A:J))
复制代码
优点:可扩展性很强,当不只针对户主排序,例如加上配偶排序的时候只需要简单添加条件即可解决
缺点:稍显复杂,累加的时候不太方便,当然用TRANSPOSE也不是不可以
个人觉得
  1. INT(MMULT(N(ROW(2:25)>COLUMN(A:X)),1/C2:C25)-1%+1)
复制代码
写成
  1. CEILING(MMULT(N(ROW(2:25)>COLUMN(A:X)),1/C2:C25),1)
复制代码
好点,看起来舒服点,就是按家庭排序,生成
  1. {1;1;1;1;2;2;2;2;2;3;3;3;3;3;3;4;4;4;5;5;5;6;6;6}
复制代码
这种序列,第一个家庭的都是1,第2个家庭是2,以此类推。
然后就是加权,排序就行了
在这里如果是要进行户主,配偶排序,那么(D2:D25="户主")
改为=MMULT(N(D2:D25={"户主","配偶"}),{2;1})
就行了,扩展性很强。

、三秋之叶老师
  1. =INDEX(A:I,MOD(SMALL(IF(D2:D25="户主",SUMIF(OFFSET(D1,,,ROW(1:24)),"户主",C1),ROW(1:24))*100+ROW(2:25),ROW()-1),100),COLUMN()-10)
复制代码

优点:简单明了
缺点:扩展性不强
思路是:判断户主前面的家庭人口数,然后是户主的话就返回这个总人口数(紧跟排序),不是户主的话就返回第几个人的序数号。
   最后,衷心的感谢三位老师以及其他支持的伙伴们,谢谢各位,以下是附件。
【参考答案】户主排序.zip (20.29 KB, 下载次数: 7)
谢谢1.png






评分

3

查看全部评分

TA的精华主题

TA的得分主题

发表于 2023-6-16 06:14 来自手机 | 显示全部楼层
本帖最后由 shaowu459 于 2023-6-16 06:18 编辑

之前做过一个一样的不过没特别抠字符,排序部分取巧了。我把这个当365函数例题放在论坛最近要出的书里了,虽然简单,但是确实又比较有趣
Screenshot_20230616_060353_edit_84183398861171.jpg

评分

4

查看全部评分

TA的精华主题

TA的得分主题

发表于 2023-6-16 08:33 | 显示全部楼层
本帖最后由 tchh666 于 2023-6-16 08:34 编辑
  1. =INDEX(A:I,RIGHT(SMALL(INT(MMULT(N(ROW(2:25)>COLUMN(A:X)),1/C2:C25)-1%+1)/1%%-(D2:D25="户主")/1%+ROW(),ROW()-1),2),COLUMN(A:J))
复制代码

区域数组

image.jpg

评分

7

查看全部评分

TA的精华主题

TA的得分主题

发表于 2023-6-16 08:34 | 显示全部楼层
本帖最后由 tchh666 于 2023-6-16 10:13 编辑
  1. =SORTBY(A2:I25,INT(SCAN(-1%,C2:C25,LAMBDA(X,Y,X+1/Y))),,-(D2:D25="户主"),)
复制代码
  1. =SORTBY(A2:I25,INT(SCAN(-1%,C2:C25,LAMBDA(X,Y,X+1/Y)))-(D2:D25="户主"))
复制代码


365版本。。

image.jpg

评分

11

查看全部评分

TA的精华主题

TA的得分主题

发表于 2023-6-17 22:18 来自手机 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
365解这种题还是有优势的。户主或家庭的题目,scan编号是比较通用的套路。如果不是排序,用reduce函数能解决更广泛一点的问题,循环的y值取序号、户主、人口数等不同列,都有可能构造出不同的精彩解法。

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2023-6-19 10:40 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
哈哈,终于做出来了
=INDEX(A1:I25,IF(SUMIF($N$1:$N1,"户主",$M$1:$M1)<ROW($A1),MATCH("户主",$D2:$D25,0)+1,1+(COUNTIF($N$1:$N1,"户主")=COUNTIF($D$1:$D1,"户主"))),1)

评分

2

查看全部评分

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

本版积分规则

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

GMT+8, 2024-11-16 23:47 , Processed in 0.040490 second(s), 22 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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