天天看點

excel兩種沒有神級函數加持,也能實作自動排序的方法

作者:動向科技

沒有神級函數加持,能不能實作對資料的自動排序呢?

excel兩種沒有神級函數加持,也能實作自動排序的方法

今天小花就分享兩個低版本 Excel 專用的排序公式給大家。

1.LOOKUP+RANK 法

LOOKUP 函數的兩分法幾乎能解決查詢相關的所有問題,而自動排序,可以認為是按排序值查詢,自然也不在話下!

=LOOKUP(1,0/(RANK($B$2:$B$8,$B$2:$B$8)=ROW()-1),$A$2:$A$8)           
excel兩種沒有神級函數加持,也能實作自動排序的方法

① 公式說明:

RANK($B$2:$B$8,$B$2:$B$8)           

顯然,這是一個數組公式,由于 LOOKUP 自帶數組運算屬性,是以無需按【Ctrl+Shift+Enter】來執行運算也可以使得排名函數 RANK 傳回一組排名值。

excel兩種沒有神級函數加持,也能實作自動排序的方法

RANK 函數的排序值和排序範圍參數都是 B2:B8,通過數組運算,傳回表示 B2:B8 中的每一個值對應排序大小的序數值組 {2;3;1;5;4;6;7}。

excel兩種沒有神級函數加持,也能實作自動排序的方法

② 公式說明:

0/(①=ROW()-1)           

ROW-1 表示目前行号-1,從 E2 到 E8 依次為 1-7,即 E2 所要查找的排名值為 1。

将①中結果 {2;3;1;5;4;6;7} 與之比對,相等傳回 TRUE,不相等傳回 FALSE,即:

{FALSE;FALSE;TRUE;FALSE;FALSE;FALSE;FALSE};           

再使用 0 除以這組數,除法運算中,TRUE=1,FALSE=0,即得出:

0/{0;0;1;0;0;0;0},           

由于 0 不能作為除數,進一步得到:

{#DIV/0!;#DIV/0!;0;#DIV/0!;#DIV/0!;#DIV/0!;#DIV/0!}。           

注意:該數組僅在目前所要查找的排名值 1 所對應位置處為 0,其餘均為錯誤值。

這是我們建構 0/(①=ROW ()-1) 這一查詢範圍的核心目的,隻有這樣,LOOKUP 函數才能正确查找。

excel兩種沒有神級函數加持,也能實作自動排序的方法

③ 公式說明:

LOOKUP(1②,$A$2:$A$8)           

LOOKUP 通過将查詢範圍②與查詢值 1 比對,找到②中小于且最接近于查詢值的數值位置,傳回結果範圍 A2:A8 對應位置的值,且過程中自動忽略②中的錯誤值。

由于②中僅有第三個值為 0,其餘均為錯誤值#DIV / 0!,是以 LOOKUP 傳回 A2:A8 中的第三個值,即 A4 單元格「陶海波」。

excel兩種沒有神級函數加持,也能實作自動排序的方法

LOOKUP+RANK 法中的核心是查詢範圍(公式片段②)的建構,使用 RANK 函數生成一組排名值,再套用 LOOKUP 的兩分法來完成查詢計算,你學會了嗎?

2.INDEX+LARGE 法

使用 LOOKUP+RANK 法進行自動排序,有一個明顯的漏洞,那就是當出現相同排名時,公式結果就會出錯。

excel兩種沒有神級函數加持,也能實作自動排序的方法

這時候,我們可以用 INDEX+LARGE 函數來建構另一個數組公式。

PS. 數組公式輸入後,需按【Ctrl+Shift+Enter】才能正确計算。

{=INDEX($A$2:$A$8,MOD(LARGE($B$2:$B$8+ROW($1:$7)%,ROW()-1),1)*100)}           
excel兩種沒有神級函數加持,也能實作自動排序的方法

① 公式說明:

$B$2:$B$8+ROW($1:$7)%           

ROW ($1:$7) 傳回一組 1 到 7 的有序數組,表示每一個數值的序号,該序号值最終還将作為 INDEX 的索引值。

「%」是 "/100" 的簡寫,于是 $B$2:$B$8+ROW ($1:$7)% 相當于給 B2:B8 的每個數以此加上尾數 0.01-0.07,得到:

{64.01;74.02;74.03;37.04;46.05;19.06;2.07}           

由于案例中的數值都為整數,加上不同的尾數可以確定這些數值彼此不等。

PS. 事實上,隻需保證所加的尾數始終小于需要排序數值的有效數位,就能避免數值相等導緻公式錯誤。

excel兩種沒有神級函數加持,也能實作自動排序的方法

② 公式說明:

LARGE①,ROW()-1)           

LARGE 函數用于傳回資料組從大到小排列中指定位次的數值。

E2 單元格公式中的 ROW ()-1 傳回目前行号減 1,即為 1,表示通過 LARGE 函數傳回 {64.01;74.02;74.03;37.04;46.05;19.06;2.07} 中第 1 大的數值 74.03,E3:E8 單元格則以此類推,取第 2 到第 7 大的數值。

excel兩種沒有神級函數加持,也能實作自動排序的方法

③ 公式說明:

INDEX($A$2:$A$8,MOD②1)*100           

MOD 函數為取餘函數,MOD (②,1),即對②除以 1 取餘數,得到我們在片段①中通過 ROW ($1:$7)% 給 B2:B8 加上的尾數,将這個尾數乘以 100,可還原為 ROW ($1:$7) 本身,它表示 B2:B8 中每一個數值的序号。

E2 單元格中,對 74.03 除以 1 取餘數為 0.03,乘以 100,得到 3,它表示最大的數是 B2:B8 的第 3 個數。

此時再用 INDEX 提取 A2:A8 的第 3 個數即可。

excel兩種沒有神級函數加持,也能實作自動排序的方法

我們知道,第二個數 B3 和第三個數 B4 都是 74,都最大。

但由于 ROW ($1:$7)% 為二者所加上的尾數分别為 0.02 和 0.03,于是 B3 作為最大的數排列在 E2 單元格,B4 被處理為第 2 大的數排列在 E3 單元格中。

由此解決了數值相等無法依次排序的問題,這就是 INDEX+LARGE 法的秘訣,你學會了嗎?

excel兩種沒有神級函數加持,也能實作自動排序的方法

以上,就是小花分享的兩個低版本 Excel 專用排序公式,要點如下:

❶ 通過 RANK 函數的數組運算生成一組排名值,再建構 LOOKUP 的 1/0 查詢結構,實作對資料的自動排序;

❷ 通過 ROW% 來為原資料添加表示其序數的尾數,使資料彼此不等,然後用 LARGE 取指定位次的數值,再用 MOD 函數取餘 * 100 還原序數值,最後用 INDEX 實作排序。

繼續閱讀