筆者認為無論對原數據清單進行排序或篩選最好不要破壞原清單的原貌。EXCEL的函數十分豐富,不用宏,用函數也能解決數值自動排名。方法如下。
如第一行為表頭,A列(例如A2:A101,下同)為姓名,B列數據,在C2單元格輸入公式“=IF(A2=0,0,INT(CONCATENATE(INT(B2),200-ROW(A1))))”。公式中ROW(A1)為A1單元格所在的行數即為1,(該公式下拉時依次為2、3、4.....),用200來減是為了CONCATENATE函數中的第2個參數保持3位數,CONCATENATE函數是一個拼合函數這里把B列的數據和它所在的行數拼合成一個數據。這樣在對它進行排序后該數據包含了它所在行數的信息。CONCATENATE函數INT函數套用是為了把原來的文本變為數字。
在D2單元格輸入公式“=LARGE(C:C,ROW(A1))”即對B列數值(包含所在行的信息)按大小排列。
在F2單元格(為了與原始清單分開中間空了一列)輸入公式“=IF(D2=0,0,200-RIGHT(D2,3))”,函數 RIGHT(D2,3)即為D2單元格數據的后3位數,用200來減即為此數據所在的行數。
在G2單元格輸入公式“=IF($F2=0,0,INDEX($A$2:$B$15,$F2,COLUMN(A1)))”,并拖到H2單元格。INDEX函數為引用函數,即根據F2單元格所標明的行數在$A$2:$B$15單元格矩陣中引用姓名及得分。
在I2單元格輸入公式“=IF(H2=0,0,IF(H2=H1,I1,ROW(A1)))”,本來G、H列就是按得分大小排列的,但可能有平列名次,所以選用上述公式。
最后把C2到I2單元格的公式下拉,程序就完成了。