首頁>Club>
條件 1.一列數字,比如A1:A50中,隨機包含50個數字,有正有負,無序排列,也有重複的數值,比如A3=16,A14=16; 2.參照對標的目標值,比如B1=25 要求 在A1到A50中,找出第一個(最後一個)等於/大於/小於B1的數值的行數 找了很多陣列函式教學,好像都沒有解決,望高手賜教,謝謝。
22
回覆列表
  • 1 # Excel大白

    我分析了一下你的提問,發現有以下幾個問題需要解決:

    問題一:如何存放一組數與一個數進行比較的返回值

    問題二:你需要最終的結果是返回對應的行數,這就需要獲取對應的行數

    問題三:找出第一個符合條件的數

    好了,找到了問題,我們只需要一一地解決問題就行了,我想到了兩種方法:一種是用輔助列的方法,一種是用陣列的方法。

    輔助列法:

    顧名思義,我們需要一列輔助列來存放計算過程中得到的資料,如下圖:

    我們在輔助列的B1單元格里輸入公式:=IF(A1>$C$1,ROW(A1),""),後向下填充。

    因為用了輔助列,很輕易地就搞定了問題一,接著用ROW函式的返回值作為IF函式的返回值搞定了問題二,現在就只剩下問題三了。

    需要注意的是,作為比較條件的C1單元格一定要用絕對引用,即寫成$C$1或者$C1

    問題三就更簡單了,分析問題三後可知,我們需要第一個符合條件的數所在行的行號,也就是說這個行號在所有符合條件的行號中肯定就是最小的嘛。所以,我們可以用MIN函式來搞定,如下圖:

    在D1單元格里輸入公式:=MIN(B1:B20),獲取輔助列中的最小值即可。

    怎麼樣,是不是很簡單。

    陣列法

    如果你不喜歡在源資料表裡插入輔助列,那我們還可以使用陣列的方法來解決這個問題。

    從上面的方法中,我們發現只要解決了IF函式返回值的存放問題,就可以不需要輔助列了,這就需要用到陣列了,看下圖:

    我們直接在D1單元格里輸入公式:=MIN(IF(A1:A20>C1,ROW(A1:A20),""))後使用Ctrl + Shift + Enter 的組合鍵結束輸入,最終在編輯欄裡顯示的效果是這樣的:{=MIN(IF(A1:A20>C1,ROW(A1:A20),""))},整個公式是被一對花括號包起來的。

    在這個公式中,我們仍然是用的IF、ROW、MIN這三個函式,我們來一步一步地解析一下這個公式:

    首先是IF函式,我們把A1:A20>C1作為IF函式的第一引數,這樣就可以一次性的把A1:A20與C1比較後的返回值作為一個數組存放在記憶體中。

    然後用ROW(A1:A20)一次性獲取所有的行號。

    這樣巢狀後,如果A1:A20與C1的比較值為TRUE則返回ROW(A1:A20)對應的行號,否則返回空值。

    這樣IF函式得到的返回結果其實就是輔助列法中的B1:B20的值,但是在這裡這個結果是存放在記憶體中的。

    最後我們再把這個結果作為引數巢狀進MIN函式中,就可以得到我們想要的結果了。

  • 中秋節和大豐收的關聯?
  • 木棉花什麼時候開花?