今天分享一個公式練習題的解析,題目很簡單,就是要獲取最大值所在的單元格地址。
關于這個題目,有兩個思路,下面先來介紹第一個思路。
第一種思路的公式為:
← 左右滑動查看完整公式 →
這個公式涉及的知識點有: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得到這一堆結果,也無法得到最終的結果。
因此思路二看似簡單粗暴,最終還得借助新版本的函數才能實現。
以上是對這個題目的思路解析,不知道你收獲了多少知識呢,歡迎留言分享你的心得。
有話要說...