今天分享一个公式练习题的解析,题目很简单,就是要获取最大值所在的单元格地址。
关于这个题目,有两个思路,下面先来介绍第一个思路。
第一种思路的公式为:
← 左右滑动查看完整公式 →
这个公式涉及的知识点有:ADDRESS函数用法、MAX函数用法、以及数组的逻辑。
重点是对ADDRESS函数的掌握。
ADDRESS函数的基本功能是可以得到一个以文本方式对工作薄中某一单元格的引用。
语法:=ADDRESS(行号,列号,引用类型,引用样式,工作表名文本)
在本例中只用到3个参数,也就是=ADDRESS(行号,列号,引用类型)
因此,要解决问题就得知道最大值所在的行号和列号,再将结果套入ADDRESS函数即可。
公式中的MAX(((A1:H20=MAX(A1:H20))*ROW(1:20)))就可以确定出最大值所在的行号,
首先做一个比较运算(A1:H20=MAX(A1:H20)),等于最大值的位置会得到TRUE,其他位置都是FALSE。
用这一组逻辑值乘ROW(1:20),只有TRUE对应的会返回对应的行号,其他都是0。
最后利用MAX函数得到这组结果中的最大值,也就是最大的数字所在的行号。
公式中的MAX(((A1:H20=MAX(A1:H20))*COLUMN(A:H)))可以得到最大值所在的列号,原理与行号完全一致,就不赘述了。
在这个过程中就涉及到数组的一些基础知识,如果对于数组运算不清楚的话,也可以在公众号以往的教程里搜一下。
总之,第一种思路比较常规,公式看起来比较长,但是相对容易理解,对于Excel版本也没太高的要求,用的都是基础函数。
如果不是365版本的话,公式需要按Ctrl、shift和回车键输入才行。
第二种思路完全不一样了,公式为:
=CONCAT(IF(MAX(A:H)=A1:H20,ADDRESS(ROW(1:20),COLUMN(A:H),4),""))
也可以改成:
=TEXTJOIN(,,IF(MAX(A:H)=A1:H20,ADDRESS(ROW(1:20),COLUMN(A:H),4),""))
两个公式的原理是一样的,都是利用了合并函数,下面以第一个公式为例进行解析。
这个思路涉及的知识点是IF、MAX、ADDRESS函数的基本用法,还有CONCAT(TEXTJOIN)合并函数的用法,这两个合并函数在2016以上的版本才能用。另外就是数组的知识和逻辑值的知识了,这些与第一个思路没太大区别。
公式的核心部分是IF,首先用MAX(A:H)=A1:H20判断最大值的位置。
说明:数据源使用了随机数,所以每次截图的时候结果是不一样的。
公式做这一步判断的时候,是直接判断位置,这与第一种思路分开判断行和列的位置不同。
IF的第二参数使用了ADDRESS(ROW(1:20),COLUMN(A:H),4),实际是就是把数据源的每个单元格的地址都列出来。
这个基本没什么逻辑性,不费脑子。
然后就是用IF的功能,判断结果为TRUE的位置返回单元格地址,判断结果为FALSE的位置返回空值。
有了这一堆结果,直接合并起来就是最大值所在的单元格位置了。
假如没有合并函数的话,即便用IF得到这一堆结果,也无法得到最终的结果。
因此思路二看似简单粗暴,最终还得借助新版本的函数才能实现。
以上是对这个题目的思路解析,不知道你收获了多少知识呢,欢迎留言分享你的心得。
有话要说...