自动排序生成新表格 - 图1

    点击预览:
    公式生成自动排序表.xlsx

    点击下载附件:
    公式生成自动排序表.xlsx

    这个的目的在于,不改变原有表格的前提下,利用一个公式,自动在其他地方按照排名顺序生成一个新表格。

    Snipaste_2021-09-10_14-05-51.png

    点击预览:
    公式生成自动排序表.xlsx

    点击下载附件:
    公式生成自动排序表.xlsx

    整体公式理解需从内往外:
    首先内层small函数,它可以得到一个数组中指定第几小的数值,在本案例中,即找到【排序】字段中第几小的数据,于是就有了

    SMALL($C$2:$C$15,ROW($A1))

    这样第一个公式获取的是第ROW($A1)=1小的数,第二个公式获取的是第ROW($2)=2小的数,以此类推。

    但是它只是得到的第几小的数值,没有得到该数值所在的行数,于是可以将排序本身的数值作为个位数,再与行数的0.001倍相加即可,当然这里也可以根据实际情况乘以0.00001或者更小的小数。

    那么到这里就得到了一个数,它是个位数为排序值,小数点后千分位(当行数超过10行时,则为千分位和百分位两位数共同)代表行数的数值,
    比如:品名A的辅助数值是5.002,代表A排名第5,在第2行;而品名N的辅助数值是9.015,代表品名N排名第9,在第15行。

    这样就理解清楚了如何获取行数,那么接下来将其转化为Excel能实际操作的步骤:

    要单独获取这个千分位(包含百分位,或者可能还包含十分位)的行数,用right函数之前需要将小数点统一干掉,于是先乘以1000以去掉小数点,比如9.015,乘以1000得到9015,再用right函数取最后的三位数,这个三位数015就是代表的行数了。

    当然,举例来说,在品名N中,right函数提取出来的015,只是文本形式存储的,如果有些版本中提示错误,可能是由于这种文本形式数字不能直接用于index函数中的行数参数,可以用负负得正,前面加上“—”转换成为数值15即可参与计算。

    最后,要获取index第一个参数$A:$C三列中的哪一列呢?可以根据match函数匹配所在的列数,得到:

    MATCH(G$1,$A$1:$C$1,0)

    于是整体公式可以写为:

    =INDEX($A:$C,RIGHT(SMALL($C$2:$C$15+0.001ROW($C$2:$C$15),ROW($A1))1000,3),MATCH(G$1,$A$1:$C$1,0))

    然后直接右拉下拉即可自动按照顺序获取数据。

    石墨链接:https://shimo.im/docs/FGZ9YMA57awt3xUt