ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

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

  [复制链接]

TA的精华主题

TA的得分主题

发表于 2013-9-26 12:57 | 显示全部楼层 |阅读模式
本帖最后由 delete_007 于 2013-11-27 19:56 编辑

本题已总结,见28楼

题目:
     班上有22名学生(A2:A23,可能更多),每人找回4根长短不一的木条,选择长度为中间2根
木条,如学生风清扬,选择木条2和木条4,长度分别为7和8,组成直角三角形的的两条直角边,
这样组成的三角形面积为28.按每人的三角形面积大小从大到小排列,如模拟答案G2:H23,
如果面积相同,则按A2:A23名单的先后次序排列.
答题要求:
1.不修改原数据,不使用辅助列,定义名称,VBA等.
2.在J2:K23输入多单元数组公式得出结果.
3.除输入在答题区输入公式外不得进行任何形式的其他操作.
4.2003版excel能通过
评分:
1.结果正确,公式长度(含=)小于300个字符,得1分.
2.公式长度(含=)小于215个字符,得2分.
3.公式长度(含=)小于180个字符,得3分.

竞赛开始日期:20131026,截止日期:20131125。
覅多占楼层,否则取消评分



本帖子中包含更多资源

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

x

评分

5

查看全部评分

TA的精华主题

TA的得分主题

发表于 2013-10-31 09:31 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
  1. =INDEX(IF({1,0},A1:A999,ROW(1:999)/2),MID(10^9+LARGE((1+10^MMULT(LOG(MOD(SMALL(B2:E23+ROW()/1%,ROW()*4-{6,5}),100)),{1;1}))/1%%%-ROW()*99,ROW()-1),{9,2},3),{1,2})
复制代码
162字符。

点评

版主武功盖世,各种招式使出,别说接招,就是看,也晕了!唉,我辈只能望其项背啊  发表于 2013-11-26 10:14
思路非凡,但 999 似乎不能容纳 4 木条 为 1、99、99、99 的情况  发表于 2013-11-25 21:50

评分

6

查看全部评分

TA的精华主题

TA的得分主题

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

正常233字符:
  1. =IF({1,0},INDEX(A:A,MOD(SMALL(ROW(2:23)-10^MMULT(LOG(SMALL(B2:E23+ROW(2:23)/1%,ROW(1:22)*4-{2,1})-ROW(2:23)/1%),{1;1})/1%,ROW()-1),100)),LARGE(10^MMULT(LOG(SMALL(B2:E23+ROW(2:23)/1%,ROW(1:22)*4-{2,1})-ROW(2:23)/1%),{1;1}),ROW()-1)/2)
复制代码
借用上期思路,用INDIRECT的R1C1相对引用,205字符:
  1. =IF({1,0},INDEX(A:A,MOD(SMALL(ROW(2:23)-10^MMULT(LOG(SMALL(B2:E23+ROW(2:23)/1%,ROW(1:22)*4-{2,1})-ROW(2:23)/1%),{1;1})/1%,ROW()-1),100)),PRODUCT(SMALL(VLOOKUP(INDIRECT("RC[-1]",),A:E,{2,3,4,5},),{2,3}))/2)
复制代码
有空再想想吧
启用迭代运算1次后,190字符:
  1. =IF({1,0},INDEX(A:A,MOD(SMALL(ROW(2:23)%-10^MMULT(LOG(SMALL(B2:E23%+ROW(2:23),ROW(1:22)*4-{2,1})-ROW(2:23)),{1;1})/1%%,ROW()-1),1)/1%),PRODUCT(SMALL(VLOOKUP(J2:J23,A:E,{2,3,4,5},),{2,3}))/2)
复制代码
把IF({1,0})放在INDEX内部175字符,为什么不行,{:soso_e118:}{:soso_e118:}{:soso_e118:}
  1. =INDEX(IF({1,0},A:A,PRODUCT(SMALL(VLOOKUP(J2:J23,A:E,{2,3,4,5},),{2,3}))/2),MOD(SMALL(ROW()%-10^MMULT(LOG(SMALL(B2:E23%+ROW(),ROW()*4-{6,5})-ROW()),{1;1})/1%%,ROW()-1),1)/1%,)
复制代码



补充内容 (2013-11-25 10:04):
188 字符=IF({1,0},INDEX(A:A,MOD(SMALL(ROW(2:23)%-10^MMULT(2+LOG(SMALL(B2:E23%+ROW(2:23),ROW(1:22)*4-{2,1})-ROW(2:23)),{1;1}),ROW()-1),1)/1%),PRODUCT(SMALL(VLOOKUP(J2:J23,A:E,{2,3,4,5},),{2,3}))/2)

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2013-11-1 15:30 | 显示全部楼层
本帖最后由 delete_007 于 2013-11-16 17:33 编辑
  1. =IF({1,0},INDEX(A:A,100-RIGHT(LARGE(SUBTOTAL(6,OFFSET(B1:E1,ROW(1:22),))/SUBTOTAL(4,OFFSET(B1:E1,ROW(1:22),))/SUBTOTAL(5,OFFSET(B1:E1,ROW(1:22),))/1%%-ROW(2:23),ROW(1:22)),2)),EXP(LARGE(MMULT(LN(SUBTOTAL({6,4,5},OFFSET(B1:E1,ROW(1:22),))),{1;-1;-1}),ROW(1:22)))/2)
复制代码
很长时间没有参加竞赛了,占个位吧,慢慢简化,264
又想到了一种方法:
  1. =IF({1,0},INDEX(A:A,MMULT(LARGE(10^MMULT(LOG10(SMALL(ROW(1:22)/1%+B2:E23,ROW(1:22)*4-{1,2})-ROW(1:22)/1%),{1;1})/1%%-ROW(2:23)/1%+ROW(2:23)*{0,1},ROW(1:22)*2-{0,1}),{-1;1})),EXP(LARGE(MMULT(LN(SUBTOTAL({6,4,5},OFFSET(B1:E1,ROW(1:22),))),{1;-1;-1}),ROW(1:22)))/2)
复制代码
262字节

  1. =IF({1,0},INDEX(A:A,MMULT(LARGE(10^MMULT(LOG10(SMALL(ROW(1:22)/1%+B2:E23,ROW(1:22)*4-{1,2})-ROW(1:22)/1%),{1;1})/1%%-{99,100}*ROW(2:23),ROW(1:22)*2-{1,0}),{1;-1})),EXP(LARGE(MMULT(LN(SUBTOTAL({6,4,5},OFFSET(B1:E1,ROW(1:22),))),{1;-1;-1}),ROW(1:22)))/2)
复制代码
当然可以简化为以上的公式 252字节
208字:
  1. =INDEX(IF({1,0},A2:A23,EXP(MMULT(LN(SUBTOTAL({6,4,5},OFFSET(B1:E1,ROW(1:22),))),{1;-1;-1}))/2),MOD(LARGE(10^MMULT(LOG10(SUBTOTAL({6,4,5},OFFSET(B1:E1,ROW(1:22),))),{1;-1;-1})/1%%-99*ROW(1:22),ROW(1:22)),100))
复制代码

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2013-11-1 23:16 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
J2:J23{=INDEX(A2:A23,23-MOD(100*LARGE(RIGHT(LARGE(B2:E23+(23-ROW(1:22))*1000,2+(ROW(1:22)-1)*4)*LARGE(B2:E23+(23-ROW(1:22))*1000,3+(ROW(1:22)-1)*4),3)+(23-ROW(1:22))%,ROW(1:22)),100))}
                                                
175个字符

K2:K23{=INT(LARGE(RIGHT(LARGE(B2:E23+(23-ROW(1:22))*1000,2+(ROW(1:22)-1)*4)*LARGE(B2:E23+(23-ROW(1:22))*1000,3+(ROW(1:22)-1)*4),3)+(23-ROW(1:22))%,ROW(1:22)))/2}

152个字符








本帖子中包含更多资源

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

x

点评

贴公式的时候请不要把大括号贴进来。  发表于 2013-11-25 10:34

评分

1

查看全部评分

TA的精华主题

TA的得分主题

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

刚从函数与公式1班毕业,来实践下{:soso_e121:}263个字符
J2:K23
  1. =INDEX(IF({1,0},EXP(MMULT(LN(RIGHT(SMALL(B2:E23+ROW(1:22)*1000,ROW(1:22)*4-{2,1}),2)),{1;1}))/2,A2:A23),22-RIGHT(TEXT(LARGE(RIGHT(SMALL(B2:E23+ROW(1:22)*1000,ROW(1:22)*4-2)*SMALL(B2:E23+ROW(1:22)*1000,ROW(1:22)*4-1),3)+(22-ROW(1:22))*0.01,ROW()-1),".00"),2),{2,1})
复制代码

点评

这也太夸张了,培训中心的骄傲啊~~~  发表于 2013-11-26 11:16

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2013-11-3 14:51 | 显示全部楼层
本帖最后由 kuangben8 于 2013-11-15 17:17 编辑

含=号:227字符。不完全符合题意的!有个关键的技术难点不知道怎么突破!先交答案,然后学习。J2:K23输入多单元数组公式
  1. =IF({1,0},INDIRECT("A"&RIGHT(INT(LARGE(10^MMULT(LOG10(SUBTOTAL({6,4,5},OFFSET(B1:E1,ROW(1:22),))),{1;-1;-1})/2%%+ROW(2:23),ROW(1:22))),2)),LARGE(EXP(MMULT(LN(SUBTOTAL({6,4,5},OFFSET(B1:E1,ROW(1:22),))),{1;-1;-1}))/2,ROW(1:22)))
复制代码
今天发现了一个可以实现要求排序的方法,但是公式好长。。。。。。。。。。。。。。。。。含=号:333字符。
  1. =IF({1,0},OFFSET(A1,MOD(SMALL(MMULT(N(TRANSPOSE(INT(10^MMULT(LOG10(SUBTOTAL({6,4,5},OFFSET(B1:E1,ROW(1:22),))),{1;-1;-1})))>INT(10^MMULT(LOG10(SUBTOTAL({6,4,5},OFFSET(B1:E1,ROW(1:22),))),{1;-1;-1}))),ROW(1:22)^0)*100+ROW(1:22),ROW(1:22)),100),),LARGE(EXP(MMULT(LN(SUBTOTAL({6,4,5},OFFSET(B1:E1,ROW(1:22),))),{1;-1;-1}))/2,ROW(1:22)))
复制代码
含=号,321字符,也许我需要换个什么。。。。
  1. =IF({1,0},OFFSET(A1,MOD(SMALL(MMULT(N(TRANSPOSE(2^MMULT(LOG(SUBTOTAL({6,4,5},OFFSET(B1:E1,ROW(1:22),)),2),{1;-1;-1}))>2^MMULT(LOG(SUBTOTAL({6,4,5},OFFSET(B1:E1,ROW(1:22),)),2),{1;-1;-1})),ROW(1:22)^0)*100+ROW(1:22),ROW(1:22)),100),),LARGE(EXP(MMULT(LN(SUBTOTAL({6,4,5},OFFSET(B1:E1,ROW(1:22),))),{1;-1;-1}))/2,ROW(1:22)))
复制代码





点评

欢迎参赛。  发表于 2013-11-4 22:08

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2013-11-4 09:50 | 显示全部楼层
本帖最后由 cleverzhzhf 于 2013-11-4 09:52 编辑

总算碰到一道会做的了,解答过程就是一部人类进化史呀:
第一版,470字符,就是按照正常思路,一步步的凑出来的:


  1. =IF(COLUMN()=10,INDEX(A2:A23,MATCH(LARGE((SMALL(B2:E23+ROW(2:23)*100,ROW(2:23)*4-6)-ROW(2:23)*100)*(SMALL(B2:E23+ROW(2:23)*100,ROW(2:23)*4-5)-ROW(2:23)*100)/2+1%/ROW(2:23),ROW()-1),(SMALL(B2:E23+ROW(2:23)*100,ROW(2:23)*4-6)-ROW(2:23)*100)*(SMALL(B2:E23+ROW(2:23)*100,ROW(2:23)*4-5)-ROW(2:23)*100)/2+1%/ROW(2:23),)),ROUND(LARGE((SMALL(B2:E23+ROW(2:23)*100,ROW(2:23)*4-6)-ROW(2:23)*100)*(SMALL(B2:E23+ROW(2:23)*100,ROW(2:23)*4-5)-ROW(2:23)*100)/2+1%/ROW(2:23),ROW()-1),1))
复制代码

第二版,346字符,用数据扩大倍数加行号的数字匹配大小,之后用Right取得行号:


  1. =IF(COLUMN()=10,INDEX(A2:A23,23-RIGHT(LARGE((SMALL(B2:E23+ROW(2:23)*100,ROW(2:23)*4-6)-ROW(2:23)*100)*(SMALL(B2:E23+ROW(2:23)*100,ROW(2:23)*4-5)-ROW(2:23)*100)*500+24-ROW(2:23),ROW()-1),2)),ROUND(LARGE((SMALL(B2:E23+ROW(2:23)*100,ROW(2:23)*4-6)-ROW(2:23)*100)*(SMALL(B2:E23+ROW(2:23)*100,ROW(2:23)*4-5)-ROW(2:23)*100)/2+1%/ROW(2:23),ROW()-1),1))
复制代码

第三版,299字符,源数据缩小万倍加行号的和相乘,再提取小数最尾4位,同样得到面积大小。同时缩减了部分可以省略的2:23:


  1. =IF(COLUMN()=10,INDEX(A2:A23,99-RIGHT(LARGE(RIGHT(SMALL(B2:E23%%+ROW(2:23),ROW(2:23)*4-6)*SMALL(B2:E23%%+ROW(2:23),ROW(2:23)*4-5)*10^8,4)/1%-ROW(2:23),ROW()-1),2)),INT(LARGE(RIGHT(SMALL(B2:E23%%+ROW(2:23),ROW(2:23)*4-6)*SMALL(B2:E23%%+ROW(2:23),ROW(2:23)*4-5)*10^8,4)/1%-ROW(2:23),ROW()-1)/100+1)/2)
复制代码

先捞一分,以后再想想怎样可以把那部分重复的,缩减掉。

点评

人类进化史——笑死  发表于 2013-11-26 11:17

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2013-11-5 14:20 | 显示全部楼层
本帖最后由 袁勇 于 2013-11-5 17:24 编辑

J2:K23区域数组:
=CHOOSE(COLUMN(A1:B1),INDEX(A1:A23,RIGHT(LARGE(MOD(SMALL(ROW(1:22)/1%+B2:E23,ROW(1:22)*4-1),100)*MOD(SMALL(ROW(1:22)/1%+B2:E23,ROW(1:22)*4-2),100)*10^9+(24-ROW(2:23))*10000+ROW(2:23),ROW(1:22)),2)),LARGE(MOD(SMALL(ROW(1:22)/1%+B2:E23,ROW(1:22)*4-1),100)*MOD(SMALL(ROW(1:22)/1%+B2:E23,ROW(1:22)*4-2),100),ROW(1:22))/2)
分开写:
J2:J23区域数组:
=INDEX(A1:A23,RIGHT(LARGE(MOD(SMALL(ROW(1:22)/1%+B2:E23,ROW(1:22)*4-1),100)*MOD(SMALL(ROW(1:22)/1%+B2:E23,ROW(1:22)*4-2),100)*10^9+(24-ROW(2:23))*10000+ROW(2:23),ROW(1:22)),2))

K2:K23区域数组:
LARGE(MOD(SMALL(ROW(1:22)/1%+B2:E23,ROW(1:22)*4-1),100)*MOD(SMALL(ROW(1:22)/1%+B2:E23,ROW(1:22)*4-2),100),ROW(1:22))/2

本帖子中包含更多资源

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

x

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2013-11-5 14:24 | 显示全部楼层

94

本帖最后由 476363814 于 2013-11-5 14:47 编辑

294个字符:
  1. =IF({1,0},INDEX(A2:A23,LEFT(RIGHT(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%%-99*ROW(1:22)/100+0.001,ROW(1:22)),3),2)),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)/2,ROW(1:22)))
复制代码

补充内容 (2013-11-24 19:27):
其实有想到用:LOG10 ab=LOG10 a+LOG10 b公式,但是不知道怎么去简化了。。。我觉得LOG10会简单很多吧,

评分

1

查看全部评分

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

本版积分规则

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

GMT+8, 2024-11-21 18:55 , Processed in 0.050708 second(s), 23 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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