ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

如何取出一列中次大数和次次大数 谢谢

[复制链接]

TA的精华主题

TA的得分主题

 楼主| 发表于 2006-4-25 10:22 | 显示全部楼层
本帖已被收录到知识树中,索引项:INDEX

能不能麻烦楼上的解释下思想?谢谢

另外 我按Shift+Ctrl+Enter没反应。。。

:(

TA的精华主题

TA的得分主题

发表于 2006-4-25 10:34 | 显示全部楼层

数组公式对我们来说确实太难了。再恳请山菊老师就本例中的参数一个一个的加以解释。

特别是MOD函数在这里的作用,LARGE(B$3:B$10*1000+1000-ROW(B$3:B$10),ROW(1:1))语句的作用。

不甚感激!!

[此贴子已经被作者于2006-4-25 10:36:40编辑过]

TA的精华主题

TA的得分主题

发表于 2006-4-25 11:51 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
公式的解释,重新编辑在18楼。
[此贴子已经被作者于2006-4-25 14:16:53编辑过]

TA的精华主题

TA的得分主题

 楼主| 发表于 2006-4-25 13:13 | 显示全部楼层

TA的精华主题

TA的得分主题

 楼主| 发表于 2006-4-25 13:31 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2006-4-25 13:35 | 显示全部楼层

1、公式中的绝对引用符$不能丢

2、注意数组公式的输入方法

TA的精华主题

TA的得分主题

 楼主| 发表于 2006-4-25 13:54 | 显示全部楼层

对了~~长见识了~~再次感谢山菊花

:)

TA的精华主题

TA的得分主题

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

不用恳请,跟着我做一遍就是:

1、贴上标签

在D3单元格输入公式,在编辑栏选取如下部分,并按F9:
=INDEX(A:A,MOD(LARGE(B$3:B$10*1000+ROW(B$3:B$10),ROW(1:1)),1000))
显示为:
=INDEX(A:A,MOD(LARGE({96003;98004;94005;97006;93007;95008;96009;98010},ROW(1:1)),1000))
目的:
成绩的后面加上行号,形成一组新的数值,相当于给每个成绩贴上了标签。

2、连根拨起


在上一步的基础上,按下面所示选取公式,并按F9:

=INDEX(A:A,MOD(LARGE({96003;98004;94005;97006;93007;95008;96009;98010},ROW(1:1)),1000))

显示为:

=INDEX(A:A,MOD({98010},1000)) ,它相当于:=INDEX(A:A,MOD(98010,1000))

这一步是取出这组数中第1大的数(因为第2个参数row(1:1)返回1)
这个第1大的数 98010 包含两个信息在里面:成绩是98,行号是10


3、撕下标签

接着前面的结果,继续运算下面选取部分:
=INDEX(A:A,MOD({98010},1000))
结果是:
=INDEX(A:A,{10})
第1大成绩所在行号是10,这正是我们要的东西。

4、对号入座

有了这个10,接下来就很好理解了,选取全部公式,按F9,结果自己看了:
=Index(A:A,{10})

至此告一段落。


5、变通

如果把这公式往下拉,你会发现所得的结果并不是预想中的结果,相同分数的人,从后面开始取。
为什么呢?因为后面加了行号。成绩不相同的,保持原来的位置,但行号也是参与排序的一个因素,按从大到小的排列方法,相同的分数,谁后面加的数大,谁就排在前面。
行号小的,如果要排在前面,我们可以用另一种方法:
加上(1000-Row()),行号小的,加的数大,行号大的,加的数反而小。
第2行加998,第3行加997
到后面用Mod()取得值后,再用1000-Mod()还原成行号。


6、实践

把公式改为如下,再重新观察每步的计算过程,从这里开始:

D3=INDEX(A:A,1000-MOD(LARGE(B$3:B$10*1000+1000-ROW(B$3:B$10),ROW(1:1)),1000))

按F9是计算选取的分步公式,计算后,可以接着再选取,也可按Esc退出,重新选择其它公式,如第二步,也可以是这样:

D3=INDEX(A:A,1000-MOD(LARGE(B$3:B$10*1000+1000-ROW(B$3:B$10),ROW(1:1)),1000))


TA的精华主题

TA的得分主题

发表于 2006-4-26 08:54 | 显示全部楼层
谢谢山菊老师!!在你的耐心指导下,我于明白了本题中数组公式是怎样分步计算的了。许久以来一直困扰我的这个问题一下得到了解决心情极为舒畅。再次感谢!!

TA的精华主题

TA的得分主题

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

恭喜你。数组公式在解题过程中常常有法力无边的神奇作用,得好好掌握它。凭这一个帖子对数组的认识是十分肤浅的,打开下面链接,多看看版主和其他高手对数组相关理论的阐述和应用示例:

http://club.excelhome.net/viewthread.php?tid=68777&px=0

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

本版积分规则

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

GMT+8, 2024-12-22 02:58 , Processed in 0.041998 second(s), 6 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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