ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[Excel 函数与公式] [第100期]按三角形面积的大小排列[已总结]

  [复制链接]

TA的精华主题

TA的得分主题

发表于 2013-11-5 16:52 | 显示全部楼层
本帖最后由 swyrlbq 于 2013-11-6 09:14 编辑

扩展源数据为30行。

公式一:基本架构,最笨的公式,256字符
           =IF({1,0},OFFSET(A1,MOD(LARGE(10^MMULT(LOG(SMALL(ROW(1:30)+TEXT(B2:E31,"0;;1")%,ROW(1:30)*4-{2,1})-ROW(1:30)),{1;1})*10^8-ROW(1:30)*99,ROW()-1),100),),LARGE(10^MMULT(LOG(MOD(SMALL(ROW(1:30)/1%+TEXT(B2:E31,"0;;1"),ROW(1:30)*4-{2,1}),100)),{1;1})/2,ROW()-1))


公式二,勾选迭代计算,173字符。

=IF({1,0},OFFSET(A1,101-RIGHT(K2:K23,4)%,),LARGE(INT(10^MMULT(LOG(MOD(SMALL(ROW(1:30)/1%+IF(B2:E31,B2:E31,1),ROW(1:30)*4-{2,1}),100)),{1;1}))/2-(ROW(1:30)-1%)%%%%%,ROW()-1))

点评

除非题目特别说明,一般不考虑迭代计算。  发表于 2013-11-25 18:31

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2013-11-5 19:05 | 显示全部楼层
本帖最后由 dengjq2000 于 2013-11-5 19:23 编辑

J2 =IF(COLUMN(A1)=1,INDEX(A:A,1/MOD(LARGE((SUBTOTAL(6,OFFSET(A$1,ROW($1:$22),,,5))/SUBTOTAL(4,OFFSET(A$1,ROW($1:$22),,,5))/SUBTOTAL(5,OFFSET(A$1,ROW($1:$22),,,5)))*10+1/ROW($2:$23),ROW(A1)),10)),PRODUCT(LARGE(OFFSET(A$1,MATCH(I2,$A:$A,)-1,,,4),ROW($2:$3)))/2)

公式确实有点长:256

本帖子中包含更多资源

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

x

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2013-11-5 20:45 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
本帖最后由 xgg2001 于 2013-11-12 09:04 编辑
  1. =INDEX(IF({1,0},A2:A23,RMB(10^MMULT(LOG(MOD(SMALL(ROW()+B2:E23%,ROW()*4-{6,5}),1)/1%),{1;1}))/2),MOD(LARGE(10^MMULT(LOG(MOD(SMALL(ROW()+B2:E23%,ROW()*4-{6,5}),1)/1%),{1;1})-ROW()%,ROW()-1),-1)/-1%-1,{1,2})
复制代码

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2013-11-6 13:07 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
=INDEX(IF({1,0},A2:A23,EXP(MMULT(LN(--RIGHT(SMALL(B2:E23+ROW(1:22)/1%%,4*ROW(1:22)-{2,1}),3)),{1;1}))/2),(RIGHT(SMALL(10000-2^(MMULT(LOG(--RIGHT(SMALL(B2:E23+ROW(1:22)/1%%,4*ROW(1:22)-{2,1}),3),2),{1;1}))+ROW(1:22)*10^-5+10^-6,ROW(1:22)),3)-1)/10,{1,2})

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2013-11-7 12:57 | 显示全部楼层

先交一个答案,太长了。

本帖最后由 wangyuhu 于 2013-11-19 17:40 编辑

=IF({1,0},INDEX(A:A,99-RIGHT(LARGE(B2:B23*C2:C23*D2:D23*E2:E23/SUBTOTAL(4,OFFSET(B1:E1,ROW(1:22),))/SUBTOTAL(5,OFFSET(B1:E1,ROW(1:22),))/1%-ROW(3:24),ROW(1:22)),2)),LARGE(10^MMULT(LOG(RIGHT(SMALL(B2:E23+ROW(1:22)/1%,{2,3}+ROW(1:22)*4-4),2)),{1;1}),ROW(1:22))/2)

=IF({1,0},INDEX(A:A,99-RIGHT(LARGE(RIGHT(SMALL(B2:E23+ROW(1:22)/1%%,ROW(1:22)*4-2)*SMALL(B2:E23+ROW(1:22)/1%%,ROW(1:22)*4-1),3)/1%-ROW(3:24),ROW(1:22)),2)),LARGE(10^MMULT(LOG(RIGHT(SMALL(B2:E23+ROW(1:22)/1%,{2,3}+ROW(1:22)*4-4),2)),{1;1}),ROW(1:22))/2)

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2013-11-13 22:13 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
本帖最后由 qy1219no2 于 2013-11-18 13:57 编辑

第一次参加竞赛,先搞了一个,可惜一看,字数305字,超过要求,先贴上来,再继续努力。。。。

进一步减少到301字,但思路没有改变,思路走入死胡同了?

实在想不出更好的办法了,只好少些$,字符终于迈进300以内:299字符

没有注意到第2个要求:多单元格数组公式。
选中:J2:K23,输入如下公式后按【CTRL+SHIFT+回车】,260字符
  1. =INDEX(IF({1,0},A2:A23,RIGHT(SMALL(B2:E23+ROW(1:22)/1%%,4*ROW(1:22)-2)*SMALL(B2:E23+ROW(1:22)/1%%,4*ROW(1:22)-1),4)/2),100-MOD(LARGE(RIGHT(SMALL(B2:E23+ROW(1:22)/1%%,4*ROW(1:22)-2)*SMALL(B2:E23+ROW(1:22)/1%%,4*ROW(1:22)-1),4)-ROW(1:22)%,ROW(1:22)),1)/1%,{1,2})
复制代码

补充内容 (2013-11-30 09:33):
看了大神们的作品,我这个就让大家见笑了。。。。

评分

3

查看全部评分

TA的精华主题

TA的得分主题

发表于 2013-11-16 20:04 | 显示全部楼层
本帖最后由 jsxjd 于 2013-11-16 20:31 编辑

感觉本题应该有木条长度的限制(100以内的整数),否则难于控制误差。
先规规矩矩上一个,100以内的整数不会有误差,郁闷的是这个公式中 Index 的列参数无法省略,而换成其他情况是可以的。
257 Chars
  1. =INDEX(IF({1,0},A2:A23,RIGHT(SMALL(ROW(1:22)/1%%+B2:E23,ROW(1:22)*4-2)*SMALL(ROW(1:22)/1%%+B2:E23,ROW(1:22)*4-1),4)/2),-MOD(LARGE(RIGHT(SMALL(ROW(1:22)/1%%+B2:E23,ROW(1:22)*4-2)*SMALL(ROW(1:22)/1%%+B2:E23,ROW(1:22)*4-1),4)/1%-ROW(1:22),ROW()-1),-100),{1,2})
复制代码
下面这个没考虑浮点运算引起的误差: 199 Chars
  1. =INDEX(IF({1,0},A2:A23,10^MMULT(LOG(SUBTOTAL({4,5,6},OFFSET(B1:E1,ROW(1:22),))),{-1;-1;1})/2),MOD(SMALL(ROW(1:22)-10^MMULT(LOG(SUBTOTAL({4,5,6},OFFSET(B1,ROW(1:22),,,4))),{-1;-1;1})/1%,ROW()-1),100))
复制代码
以下为了防止木条长度为整数时结果可能产生误差,加了一层 Round : 207 Chars
  1. =INDEX(IF({1,0},A2:A23,ROUND(10^MMULT(LOG(SUBTOTAL({4,5,6},OFFSET(B1:E1,ROW(1:22),))),{-1;-1;1}),)/2),MOD(SMALL(ROW(1:22)-10^MMULT(LOG(SUBTOTAL({4,5,6},OFFSET(B1,ROW(1:22),,,4))),{-1;-1;1})/1%,ROW()-1),100))
复制代码

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2013-11-19 17:58 | 显示全部楼层
本帖最后由 ldda 于 2013-11-19 18:17 编辑
  1. =IF({1,0},INDEX(A:A,MOD(SMALL(ROW(2:23)-10^MMULT(LOG(SMALL(B2:E23+ROW(2:23)/1%,4*ROW(1:22)-{2,1})-ROW(2:23)/1%),{1;1})/1%,ROW()-1),100)),LARGE(10^MMULT(LOG(SMALL(B2:E23+ROW(2:23)/1%,4*ROW(1:22)-{2,1})-ROW(2:23)/1%),{1;1}),ROW()-1)/2)
复制代码

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2013-11-24 19:33 | 显示全部楼层
将近两个月没来了,这一阶段终于忙过,上来看看两期竞赛(99,100)
下载研究两小时,感觉出结果不是太难,精简字符却需要时间,可惜留给我的时间不多了,赶快贴上,别让版主把贴开了,298字
  1. =IF({1,0},INDEX(A:A,MOD(-LARGE(SUBTOTAL(6,OFFSET(B1,ROW(1:22),,,4))/SUBTOTAL(4,OFFSET(B1,ROW(1:22),,,4))/SUBTOTAL(5,OFFSET(B1,ROW(1:22),,,4))/1%-ROW(2:23),ROW()-1),100)),LARGE(SUBTOTAL(6,OFFSET(B1,ROW(1:22),,,4))/SUBTOTAL(4,OFFSET(B1,ROW(1:22),,,4))/SUBTOTAL(5,OFFSET(B1,ROW(1:22),,,4)),ROW()-1)/2)
复制代码

点评

几个SUBTOTAL可以用MMULT+LOG来合并。  发表于 2013-11-25 10:22

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2013-11-25 09:32 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
本帖最后由 delete_007 于 2013-11-25 09:35 编辑

答题截止,先开贴。请以上楼层不要再修改答案,以免影响评分,谢谢。
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-3-29 15:45 , Processed in 0.054209 second(s), 20 queries , Gzip On, Redis On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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