如第一行为表头,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单元格的公式下拉,程序就完成了。