ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[函数用法讨论系列24] 关于RANK的第二参数

[复制链接]

TA的精华主题

TA的得分主题

发表于 2006-5-7 08:41 | 显示全部楼层 |阅读模式
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
RANK的帮助中指出:其第二参数应该是一个REF(引用)。 但下面的公式却能得出正确结果:RANK(A1,IF(A1:A10<100,A1:A10,"")) 显然公式中的IF()不是一个引用。因为:ISREF(IF(A1:A10<100,A1:A10,"")) =FALSE 我的第一个问题:RANK的第二参数可以不是引用吗? 第二个问题是:帮助还指出,第二参数可以是“数字列表数组”,什么叫“数字列表数组”? 第三个问题:上面的公式再加一个条件就不行了:RANK(A1,IF((A1:A10<100)*(A1:A10>90),A1:A10,"")) 这又是为什么?
[此贴子已经被apolloh于2006-5-8 8:11:30编辑过]

TA的精华主题

TA的得分主题

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

作为普通公式,IF(A1:A10<100,A1:A10,"")相当于IF(A1<100,A1:A10,""),当条件为真时,结果为一个引用,当条件为假时,结果是一个空字符串。Isref()返回值也是两种结果。

后面一个公式,同样以A1为充分条件返回结果,结果也是两值之一。

如果作为数组公式,返回的值是一个数组,不是引用。

第二个问题不明白。

TA的精华主题

TA的得分主题

发表于 2006-5-7 11:08 | 显示全部楼层
补充一点:
以下是引用[I]山菊花[/I]在2006-5-7 9:02:53的发言:

作为普通公式,IF(A1:A10<100,A1:A10,"")相当于IF(A1<100,A1:A10,""),……

作为普通公式就有隐含交叉的因素在里面了。比如公式在B1,则相当于=if(A1<100,A1:A10,""),此时如果A1>=100,则rank公式返回#VALUE!错误;而当公式在B2单元格,则相当于if(A2<100,A1:A10,"")了,能否返回A1:A10这个引用,还得仰仗于A2的值。 作为数组公式,if(A1:A10<100,A1:A10,""),返回的不是引用,所以rank公式返回#VALUE!错误。 数字列表:我猜可能是指“数字组成的Excel表格”,不太确切,也希望得到答案。
[此贴子已经被作者于2006-5-7 11:10:35编辑过]

TA的精华主题

TA的得分主题

发表于 2006-5-7 12:00 | 显示全部楼层
正确,谢谢gouweicao78指正。

TA的精华主题

TA的得分主题

发表于 2006-5-7 15:29 | 显示全部楼层

数字列表数组指的是 数组的元素为数字,相对于非数字而言。

但,事实上rank的第二个参数ref并不支持数组。

ref参数一般表示同时支持range(单个或连续区域引用)和合并区域(两个以上不连续区域引用的合集)为参数,这两种参数的都是引用类型,可以用isref函数测试。

但是有个特例,rank中的ref参数还支持连续跨多表的“三维引用”,如sheet1:sheet3!a1:a10.其他函数比如subtotal中的ref则并不支持连续跨多表的“三维引用”。应该特别指出的是,这个被我们习惯称为“三维引用”的东西,实际上并不是引用类型。可以用isref进行测试。真正的三维引用只有offset、indirect等引用函数才能够产生。

TA的精华主题

TA的得分主题

 楼主| 发表于 2006-5-7 16:26 | 显示全部楼层

六窍通应该改为八窍通——比别人多一窍!——开个玩笑。

事实上,我一开始写的公式RANK(A1,IF(A1:A10<100,A1:A10,"")) ,其本意真是把IF()作为一个数组,所以才有了后面的公式:RANK(A1,IF((A1:A10<100)*(A1:A10>90),A1:A10,""))

发现行不通后,才知道是我搞错了:RANK的第二参数不支持数组,而第一个公式之所以能得出结果,就像山菊花和gouweicao78说的,是隐含交叉了。

但,六窍通的这句话:

数字列表数组指的是 数组的元素为数字,相对于非数字而言

我还不大理解。

1,数字列表数组是数组吗?当然不应该是。如果真的不是,又为什么叫数组?要知道,excel的帮助文件写得是很严谨的,概念的界限是非常清楚的。

2,如果数组元素为非数字,就叫数字列表数组,那类似情况为什么不这样叫?如FREQUENCY。 它和RANK一样可以容忍及忽略非数字元素。【比如A1:A4={5,4,6,"A"},则RANK(4,A1:A4)=3】

TA的精华主题

TA的得分主题

发表于 2006-5-7 19:01 | 显示全部楼层

呵呵,不能太迷信Excel的帮助文件了。帮助文件中的错误也是不少的。

TA的精华主题

TA的得分主题

发表于 2006-5-7 19:30 | 显示全部楼层

Rank 帮助:

【Ref 为数字列表数组或对数字列表的引用。Ref 中的非数值型参数将被忽略。】

【Ref is an arry of,or a reference to,a list of numbers.Nonnumeric values are ignored.】

英文2007版的也是这句话。an arry of a list of numbers or a reference to a list of numbers.

——三个关键词:list,number,ignored。即列表,数字,忽略。(不同于数据〉列表功能的列表,那个是Table)

帮助文件也有错误的。

TA的精华主题

TA的得分主题

发表于 2006-6-12 17:29 | 显示全部楼层

函数参数用ref表示,应该就是指单元格区域引用,经试验,第2参数必须为引用,RANK函数的帮助对第2个参数的描述在所有的语言版本中均有错!
IF函数可以返回区域引用(无论是数组公式方式还是普通公式中),前提是看逻辑判断要是一个单值(隐含交叉就是一个单值),并且这个逻辑单值所对应的IF函数的返回参数是一个引用)。

TA的精华主题

TA的得分主题

发表于 2006-7-21 11:08 | 显示全部楼层

各位好!初进入,各位多多帮助!

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

本版积分规则

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

GMT+8, 2024-11-22 00:47 , Processed in 0.038800 second(s), 13 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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