ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[Excel 函数与公式] [53期]一道排序函数练习题供大家练练手 -------已结

[复制链接]

TA的精华主题

TA的得分主题

发表于 2009-9-29 10:18 | 显示全部楼层 |阅读模式
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
一道函数练习题,改编自rongjun老师的一道题,供有兴趣的家人练习一下。具体要求见附件。

。。。。。。。。。。。。。。。。。。。。。。。。。


国庆期间一直没有看题,对答题的朋友和将要答题的朋友,补充几点说明
1。为了公平起见现改为一个下拉公式。
2。答题区域只是一个范围,实际要求是公式下拉也不能出错,请大家注意排错。
3。公式就按题目里面的字符处理,但不能使用code和char函数。
4。只要能做出来就有1分,公式包括等号要求为少于等于320个字符的加2分,少于等于265字符加3分,精彩答案再额外加分。


本人第一次出题,有很多不足之处,望大家见谅
本帖将于10月22日结题


[ 本帖最后由 冻豆腐 于 2009-10-21 09:56 编辑 ]

本帖子中包含更多资源

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

x

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2009-9-29 19:49 | 显示全部楼层

回复 1楼 冻豆腐 的帖子

用if{{1,0}构造数组,排错只到C40
244
=INDEX(A:A,MOD(LARGE(IF({1,0},MMULT(COUNTIF(A$1:A$20,{">","="}&A$1:A$20),{1;100}/1%%)+ROW($1:$20)*101,IF((COUNTIF(OFFSET(A$1,,,ROW($1:$20)),A$1:A$20)<3)*ROW($1:$20),MMULT(COUNTIF(A$1:A$20,{">","="}&A$1:A$20),{1;100}/1%%)+21,21)),ROW()),100))&""(速度较快)
234
=INDEX(A:A,MOD(LARGE(IF({1,0},MMULT(COUNTIF(A:A,{">","="}&A$1:A$20),{1;100}/1%%)+ROW($1:$20)*101,IF((COUNTIF(OFFSET(A$1,,,ROW($1:$20)),A$1:A$20)<3)*ROW($1:$20),MMULT(COUNTIF(A:A,{">","="}&A$1:A$20),{1;100}/1%%)+21,21)),ROW()),100))&""(速度太慢)

[ 本帖最后由 lzzgzby 于 2009-10-16 14:18 编辑 ]

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2009-9-30 10:02 | 显示全部楼层
国庆假期一直没空,今天花了不少功夫,勉强凑一个,305字符。再次修改256、257个字符。
=INDEX(A:A,MOD(SMALL(IF(MATCH(A$1:A$20,A:A,)=ROW($1:$20),IF(COUNTIF(A:A,A$1:A$20)>COLUMN(A:G)-2-(COUNTIF(A:A,A$1:A$20)>1),(9-COUNTIF(A:A,A$1:A$20))*100+COUNTIF(A:A,"<="&$A$1:$A$20)+ROW($1:$20)*1%+0.5*(COUNTIF(A:A,A$1:A$20)<COLUMN(A:G)))),ROW(A1)),1)/1%)&""

=INDEX(A:A,MOD(SMALL(IF(MATCH(A$1:A$20,A:A,)=ROW($1:$20),(9-COUNTIF(A:A,A$1:A$20)+10*(COUNTIF(A:A,A$1:A$20)<COLUMN(A:G)-1-(COUNTIF(A:A,A$1:A$20)>1)))*100+COUNTIF(A:A,"<="&A$1:A$20)+IF(COUNTIF(A:A,A$1:A$20)>=COLUMN(A:G),ROW($1:$20),90)*1%),ROW(A1)),1)/1%)&""
==============================================
在A1:A20都是一个字母时会出错,不得分
                                                       ====wshcw===
==============================================

[ 本帖最后由 wshcw 于 2009-10-21 11:04 编辑 ]

本帖子中包含更多资源

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

x

TA的精华主题

TA的得分主题

发表于 2009-10-4 08:07 | 显示全部楼层
含等号共247字符
=INDEX(A:A,MOD(LARGE(ABS((MATCH(1&A$1:A99,1&A$1:A99,)=ROW($1:99))*(COUNTIF(A:A,A$1:A99)*10^6+COUNTIF(A:A,">"&A$1:A99)*10^3+ROW($1:99))*((2+TEXT(COUNTIF(A:A,A$1:A99),"[>1]0;!0"))>=COLUMN(1:1))-99*(COUNTIF(A:A,A$1:A99)<COLUMN(1:1))),ROW()),1000))&""

含等号共215字符
=INDEX(A:A,RIGHT(LARGE(COUNTIF(A:A,A$1:A99)*10^4+COUNTIF(A:A,">"&A$1:A99)/1%+IF({1,0,0},ROW($1:99),IF(MATCH(1&A$1:A99,1&A$1:A99,)=ROW($1:99),IF({0,1,0},-1,IF(COUNTIF(A:A,A$1:A99)>1,-1,1-10^5)),1-10^5)),ROW()),2))&""

[ 本帖最后由 wjh619993018 于 2009-10-18 15:52 编辑 ]

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2009-10-7 23:41 | 显示全部楼层

219字符,刚刚能达到要求
如果是要一个公式下拉的话把我的公式加个绝对引用就好了。
  1. =INDEX(A:A,RIGHT(LARGE(COUNTIF(A$1:A$20,A$1:A$20)*10^4+COUNTIF(A$1:A$20,">="&A$1:A$20)/1%+IF({1,0,0},ROW($1:$20),IF(MATCH(A$1:A$20,A$1:A$20,)=ROW($1:$20),IF(COUNTIF(A$1:A$20,A$1:A$20)>1,{0,0.99,0.99},{0,0.99,-99999}),-99999)),ROW()),2))&""
复制代码



=============================================
在A1:A20都是一个字母时会重复,不得分
                                                  ===wshcw==
=============================================

[ 本帖最后由 wshcw 于 2009-10-21 11:05 编辑 ]

本帖子中包含更多资源

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

x

TA的精华主题

TA的得分主题

发表于 2009-10-9 14:28 | 显示全部楼层
凑个热闹
多单元格数组:
=INDEX(A:A,MOD(LARGE(COUNTIF(A1:A20,A1:A20)/1%%+COUNTIF(A1:A20,">"&A1:A20)/1%+IF({1,0},-(COUNTIF(OFFSET(A1,,,ROW(1:20)),A1:A20)>2)*10^6-1,ROW(1:20)),ROW()),100))&""

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2009-10-9 15:35 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
189字符
数组公式
已发短消息


xcd版主答案,贴出来分享
C1,数组公式下拉,189字
=INDEX(A:A,RIGHT(LARGE(IF({1,0,0},1,MATCH(A$1:A$20,A:A,)=ROW($1:$20))*(COUNTIF(A:A,A$1:A$20)>{0,0,1})*MMULT(COUNTIF(A:A,{"",">"}&A$1:A$20)*10^{4,2},{1;1})+ROW($1:$20)-{0,1,1}%,ROW()),2))&""

[ 本帖最后由 wshcw 于 2009-10-21 11:16 编辑 ]

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2009-10-13 16:26 | 显示全部楼层
不知是否正确,请冻大师指教了,
假设数据区域不存在空白单元格;
因为结果区域行数最大范围不可能超过源区域行数的2倍,假设公式只在数据区域行数的2倍内下拉;
189字符
=INDEX(A:A,RIGHT(LARGE(MMULT(COUNTIF(A:A,{"=",">="}&A$1:A$20)*10^{9,7},{1;1})+IF({1,0},9*10^5+ROW($1:$20),IF(COUNTIF(OFFSET(A$1,,,ROW($1:$20)),A$1:A$20)<3,4^8,-(10^12+4^8))),ROW(A1)),5))&""
193字符
=INDEX(A:A,RIGHT(LARGE(COUNTIF(A:A,A$1:A$20)*10^9+COUNTIF(A:A,">="&A$1:A$20)*10^7+IF({1,0},9*10^5+ROW($1:$20),IF(COUNTIF(OFFSET(A$1,,,ROW($1:$20)),A$1:A$20)<3,4^8,-(10^12+4^8))),ROW(A1)),5))&""
数组公式
上述公式不适合数据列中同时包含数字与字符单元格的情况,COUNTIF(A:A,">="&A$1:A$20)不能正确判别数值与字符的大小,且运算效率低下,改进一下:
226字符
=INDEX(A:A,RIGHT(LARGE(COUNTIF(A$1:A$20,A$1:A$20)*10^9+MMULT(N(A$1:A$20<=TRANSPOSE(A$1:A$20)),ROW($1:$20)^0)*10^7+IF({1,0},9*10^5+ROW($1:$20),IF(COUNTIF(OFFSET(A$1,,,ROW($1:$20)),A$1:A$20)<=2,4^8,-(10^12+4^8))),ROW(A1)),5))&""
注:上面2个公式虽然较短,但有不足,缺点是不能下拉到源数据行数2倍以外的地方,拉到41行时会出错(实际上41行开始不会有结果了);
以下公式可继续下拉;
比较通用一点的公式,246字符
=IF(ROW()>2*COUNTA(A:A),"",INDEX(A:A,RIGHT(LARGE(COUNTIF(A$1:A$20,A$1:A$20)*10^9+MMULT(N(A$1:A$20<=TRANSPOSE(A$1:A$20)),ROW($1:$20)^0)*10^7+IF({1,0},9*10^5+ROW($1:$20),(COUNTIF(OFFSET(A$1,,,ROW($1:$20)),A$1:A$20)>2)*-(10^12)+4^8),ROW(A1)),5)))&""
注:此公式源数据多于17232个时可能不会正确插入空行;
不太可能出错的公式,318字符
=IF(ROW()>=COUNTA(A:A)+2*SUM(1/COUNTIF(A$1:A$20,A$1:A$20))-SUM(N(COUNTIF(A$1:A$20,A$1:A$20)=1)),"",INDEX(A:A,RIGHT(LARGE(COUNTIF(A$1:A$20,A$1:A$20)*10^9+MMULT(N(A$1:A$20<=TRANSPOSE(A$1:A$20)),ROW($1:$20)^0)*10^7+IF({1,0},9*10^5+ROW($1:$20),(COUNTIF(OFFSET(A$1,,,ROW($1:$20)),A$1:A$20)>2)*-(10^12)+4^8),ROW(A1)),5)))&""
题后有感:
      花了三天时间,很不轻松地做了几个答案,也不知道是否能够弄上1分,此题对我来说难度虽然较高,但实用性强,富有创意,能激发他人思维,在此对冻大师的辛勤劳作深表感谢,虽然初次出题,已经可见冻大师的精湛技艺,相信此题仅是冻大师高超技术的冰山之一角,如果能在出题时把所有情况考虑周全些,把答题要求说明更详细点,将会有更多坛友积极响应,踊跃参与的。

[ 本帖最后由 jyhxr 于 2009-10-18 15:11 编辑 ]

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2009-10-15 21:03 | 显示全部楼层
做了两个解法,一个254字符,一个196字符,应该还能简化。

本帖子中包含更多资源

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

x

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2009-10-17 10:12 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
只是出于一股子热情,斗胆也试了一下,最后搞得自己挣扎了四五天,没日没夜脑子里都是这个问题,基本上算是完成了一半的要求
{=LOOKUP((--RIGHT(LARGE(--(COUNTIF(OFFSET($A$1,,,COUNTA($A:$A)),OFFSET($A$1,,,COUNTA($A:$A)))&LOOKUP(OFFSET($A$1,,,COUNTA($A:$A)),{"A","B","C","D","E","F","G","H";26,25,24,23,22,21,20,19})),ROW()),2)),{19;20;21;22;23;24;25;26},{"H";"G";"F";"E";"D";"C";"B";"A"})}
呵呵,剩下的,不是在我能力所能解决的范围之内了!


得,该回“家”学习了!



============================================
结果不正确,不得分,谢谢参与.
                                                     ===wshcw===
=============================================

[ 本帖最后由 wshcw 于 2009-10-21 11:09 编辑 ]
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-21 18:31 , Processed in 0.042043 second(s), 19 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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