EXCEL的用法疑问

看下面的图片里的内容,问题的要求是这样的:
如果C1中包含A列的任意一个水果的名字,那么把B列中水果的相应价格返回到D1单元格。

这个高手在D1里输入了这么一个函数
=INDEX(B:B,MAX(IF(COUNTIF(C1,"*"&A$1:A$11&"*"),ROW($1:$11),)))
之后再ctrl+shift+enter
再下拉到D2,D3。事实证明这个组合函数确实是可行的。能达到预期效果。

我的问题是:现在我还看不明白这个公式是怎么回事。
我个人的初步理解是这样的:

COUNTIF(C1,"*"&A$1:A$11&"*")用来判断C1单元格是否含有A1到A11中的内容,我都不知道COUNTIF还可以这么用,也就是查找值可以填的不仅仅是一个值,还可以是一个范围,百度也没搜到这种用法。
但这个高手的实际行动和这个EXCEL文件的事实证明是可以这么做的。我们要做的就是去理解为什么这么做是对的。

ROW($1:$11)用来返回一个区域的第一行行号,但这么引用,究竟返回的是哪一行的行号我也不清楚。

所以,IF(COUNTIF(C1,"*"&A$1:A$11&"*"),ROW($1:$11),)我只能是做如下猜测:

先判断C1中是否含有A1,如果含A1,那么返回A1的行号
再判断C1中是否含有A2,如果含A2,那么返回A2的行号
再判断C1中是否含有A3,如果含A3,那么返回A3的行号
。。。。。。
最后判断C1中是否含有A11,如果含A11,那么返回A11的行号

我不知道countif有没有这种循环的功能,但是因为下面有个max函数,max函数求的是一组数的最大值,如果不是一组,就用不到这个函数了。所以我只能这么理解
IF(COUNTIF(C1,"*"&A$1:A$11&"*"),ROW($1:$11),)返回了多个行号(如果C1中包含多个A列的值),可以看成一个数组,然后MAX就是求的这个行号的最大值。就是最靠下部的一个行的行号值,我不知道为什么会这么做,大概是为了保证结果的唯一性
所以整个公式就简化为:=INDEX(B:B,行号) ,求B列的某一行,也就是价格。因为用到了index函数,所以要 ctrl+shift+enter
以上就是我对整个公式的理解方式,但是我自己都觉得这些理解非常牵强。
尤其是对countif 的循环 和 row 函数的理解。

然后在D15单元格随便做了一个 =MAX(IF(COUNTIF(C1,"*"&A$1:A$11&"*"),ROW($1:$11),))
然后ctrl+shift+enter
确实显示是2.
但是如果设置为 =MIN(IF(COUNTIF(C1,"*"&A$1:A$11&"*"),ROW($1:$11),))
就像第二张图那样,却直接显示对应行的价格。
说明我的理解方式是错的。

请高手帮忙指点下,这个公式到底应该怎么分析?

十分感谢,200分送上

你的数组公式多了后面一个逗号,因此显示出了不同的结果。

=INDEX(B:B,MIN(IF(COUNTIF(C1,"*"&A$1:A$11&"*"),ROW($1:$11))))

 

而如果是你的公式

=INDEX(B:B,MIN(IF(COUNTIF(C1,"*"&A$1:A$11&"*"),ROW($1:$11),)))

MIN从符合条件的数组中,找到最小值是0,因此结果为价格。

追问

为什么=INDEX(B:B,0) 会显示B1的东西呢?

温馨提示:答案为网友推荐,仅供参考

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网