Excel 表格自动排序的两种方法
原文標題:《Excel 表格還能自動排序?這 2 種方法讓你豎起大拇指!》
你知道嗎?365 版 Excel 新增了一個神級函數,SORT!
它是一個專門用于排序的函數。
然而問題是,很多小伙伴所使用的的 Excel 并非 365 版,而是 19 版甚至更早期的版本。
沒有神級函數加持,能不能實現對數據的自動排序呢?
今天小花就分享兩個低版本 Excel 專用的排序公式給大家。
LOOKUP+RANK 法
LOOKUP 函數的兩分法幾乎能解決查詢相關的所有問題,而自動排序,可以認為是按排序值查詢,自然也不在話下!
=LOOKUP(1,0/(RANK($B$2:$B$8,$B$2:$B$8)=ROW()-1),$A$2:$A$8)
①公式說明:
RANK($B$2:$B$8,$B$2:$B$8)
顯然,這是一個數組公式,由于 LOOKUP 自帶數組運算屬性,所以無需按【Ctrl+Shift+Enter】來執行運算也可以使得排名函數 RANK 返回一組排名值。
RANK 函數的排序值和排序范圍參數都是 B2:B8,通過數組運算,返回表示 B2:B8 中的每一個值對應排序大小的序數值組 {2;3;1;5;4;6;7}。
② 公式說明:
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 函數才能正確查找。
③ 公式說明:
LOOKUP(1②,$A$2:$A$8)
LOOKUP 通過將查詢范圍②與查詢值 1 匹配,找到②中小于且最接近于查詢值的數值位置,返回結果范圍 A2:A8 對應位置的值,且過程中自動忽略②中的錯誤值。
由于②中僅有第三個值為 0,其余均為錯誤值#DIV / 0!,所以 LOOKUP 返回 A2:A8 中的第三個值,即 A4 單元格「陶海波」。
LOOKUP+RANK 法中的核心是查詢范圍(公式片段②)的構建,使用 RANK 函數生成一組排名值,再套用 LOOKUP 的兩分法來完成查詢計算,你學會了嗎?
INDEX+LARGE 法
使用 LOOKUP+RANK 法進行自動排序,有一個明顯的漏洞,那就是當出現相同排名時,公式結果就會出錯。
這時候,我們可以用 INDEX+LARGE 函數來構建另一個數組公式。
PS. 數組公式輸入后,需按【Ctrl+Shift+Enter】才能正確計算。
{=INDEX($A$2:$A$8,MOD(LARGE($B$2:$B$8+ROW($1:$7)%,ROW()-1),1)*100)}
①公式說明:
$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. 事實上,只需保證所加的尾數始終小于需要排序數值的有效數位,就能避免數值相等導致公式錯誤。
② 公式說明:
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 大的數值。
③ 公式說明:
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 個數即可。
我們知道,第二個數 B3 和第三個數 B4 都是 74,都最大。
但由于 ROW ($1:$7)% 為二者所加上的尾數分別為 0.02 和 0.03,于是 B3 作為最大的數排列在 E2 單元格,B4 被處理為第 2 大的數排列在 E3 單元格中。
由此解決了數值相等無法依次排序的問題,這就是 INDEX+LARGE 法的秘訣,你學會了嗎?
以上,就是小花分享的兩個低版本 Excel 專用排序公式,要點如下:
? 通過 RANK 函數的數組運算生成一組排名值,再構建 LOOKUP 的 1/0 查詢結構,實現對數據的自動排序;
? 通過 ROW% 來為原數據添加表示其序數的尾數,使數據彼此不等,然后用 LARGE 取指定位次的數值,再用 MOD 函數取余 * 100 還原序數值,最后用 INDEX 實現排序。
以上公式雖略顯復雜,但經過小花詳細解析,相信小伙伴們一定能理清吃透,收入囊中。
本文來自微信公眾號:秋葉 Excel (ID:excel100),作者:小花
總結
以上是生活随笔為你收集整理的Excel 表格自动排序的两种方法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 个人博客域名迁移说明 www.painc
- 下一篇: NVIDIA史上最鸡肋、还特长寿的显卡: