如何仅使用函数/方程对表进行sorting

我怎样才能sorting表1中的表

ABCDE 3 7 3 6 5 

到表2中的另一个表中

 ACEDB 3 3 5 6 7 

只使用function?

一个非常简单的方法就是只有一个等级索引,然后使用HLOOKUP来查找相应的值:

 =RANK(A4,$A$4:$E$4,1) 

例1

 =IF(COUNTIF($A$1:A$1,A1)>1,RANK(A4,$A$4:$E$4,1)+COUNTIF($A$1:A$1,A1)-1,RANK(A4,$A$4:$E$4,1)) 

例2

 =HLOOKUP(COLUMN(),$A$2:$E$4,2,FALSE) 

例3

 =HLOOKUP(COLUMN(),$A$2:$E$4,3,FALSE) 

例4

好的,下面是“一个公式无所不能”的解决scheme,没有额外的临时列:

在这里输入图像描述

A6中的公式:

 = INDEX($ A $ 2:$ E $ 2,MATCH(SMALL($ A $ 3:$ E $ 3 + COLUMN($ A $ 3:$ E $ 3)/亿,COLUMN()),$ A $ 3:$ E $ 3 + COLUMN ($ A $ 3:$ E $ 3)/ 100000000,0))

input数组公式,即按CtrlShiftEnter 。 然后将其复制到相邻的列。

为了得到数字,在A7中使用这个公式(再次作为数组公式):

 = ROUND(SMALL($ A $ 3:$ E $ 3 + COLUMN($ A $ 3:$ E $ 3)/亿,COLUMN()),6)

这两个公式都有点臃肿,因为他们还必须处理潜在的重复。 解决的方法是在应用sorting(小函数)之前简单地添加一小部分列,然后再将其删除。

尽pipe我已经使用了“添加一些小技巧”,但我认为这对帮助者行/列是最优雅的:

 =RANK(B4,$B$4:$F$4,0) + COUNTIF($B$4:$F$4,B4)-1 

(在行列中复制)RANK让您closures,COUNTIF部分通过计算该单元格重复的次数来处理重复项。 由于总是匹配(本身),所以你减去最后一个等级的1。 这按照它们出现的顺序“sorting”。 请注意,一个空单元格将生成#N / A和字符数据作为#Values。

这是可行的! 🙂

这是示例文件 。

说明

我假设你的数据在Sheet1的第1行,并且你希望数据从另一个表的第1列开始sorting – 如果没有,就相应地进行调整。

将此公式放在目标工作表的第1列中,比如第2行:

 = ROUND(SMALL(Sheet 1中$ A $ 1:$ E $ 1 + COLUMN(Sheet 1中$ A $ 1:$ E $ 1)/亿,COLUMN()),6)

您需要input公式作为数组公式,即按Ctrl-Shift-Enter。

如果你把它放在另一列而不是第一列,你需要用COLUMN()-COLUMN($A$2)+1replaceCOLUMN() ,其中$A$2必须是对单元本身的引用。

这个公式会返回你的范围内的最小数字 – 如果你复制下面的4列,你会得到你的数字的订单列表。

要将其转换回列号,我们需要执行2个步骤:

  1. 找出列号:
    这可以用这个公式完成:
     = MATCH(SMALL(Sheet 1中$ A $ 1:$ E $ 1 + COLUMN(Sheet 1中$ A $ 1:$ E $ 1)/亿,COLUMN()),工作表Sheet $ A $ 1:!$ E $ 1 + COLUMN(Sheet 1中$ A $ 1:$ E $ 1)/ 100000000,0)
    

    – 再次input数组公式。 如果源数据没有在列A中开始,则需要添加+COLUMN(Sheet1!$A$1)-1 ,其中$ A $ 1需要用源数据的最左边的单元格replace。

  2. 将列号转换为一个字母:
    假设步骤1中的列号位于单元格A6中,则此公式将执行此工作:
 = LEFT(ADDRESS(1,A6,2),SEARCH( “$”,地址(1,A6,2)) -  1)

当然,你也可以结合步骤1和2,这将导致这个megaformula:

 = LEFT(
    地址(
         1,
        比赛(
             SMALL(工作表Sheet1 $ A $ 1:$ E $ 1 + COLUMN(工作表Sheet1 $ A $ 1:$ E $ 1)/亿,COLUMN()),
            工作表Sheet1 $ A $ 1:$ E $ 1 + COLUMN(!工作表Sheet1!$ A $ 1:$ E $ 1)/亿,
             0),
         2),
    search(
         “$”,
         地址(
              1,
             比赛(
                  SMALL(工作表Sheet1 $ A $ 1:$ E $ 1 + COLUMN(工作表Sheet1 $ A $ 1:$ E $ 1)/亿,COLUMN()),
                 工作表Sheet1 $ A $ 1:$ E $ 1 + COLUMN(!工作表Sheet1!$ A $ 1:$ E $ 1)/ 100000000,0)
              2)
      )-1
 )

再次input数组公式。

我认为更简单的解决scheme是使用“大”function: excel截图

列函数只是一个从5到1的简单方法,但辅助列可能更容易。

您也可以使用“小”function得到类似的答案。