如何仅使用函数/方程对表进行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)
=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))
=HLOOKUP(COLUMN(),$A$2:$E$4,2,FALSE)
=HLOOKUP(COLUMN(),$A$2:$E$4,3,FALSE)
好的,下面是“一个公式无所不能”的解决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数组公式,即按Ctrl – Shift – Enter 。 然后将其复制到相邻的列。
为了得到数字,在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)+1
replaceCOLUMN()
,其中$A$2
必须是对单元本身的引用。
这个公式会返回你的范围内的最小数字 – 如果你复制下面的4列,你会得到你的数字的订单列表。
要将其转换回列号,我们需要执行2个步骤:
- 找出列号:
这可以用这个公式完成:= 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。 - 将列号转换为一个字母:
假设步骤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:
列函数只是一个从5到1的简单方法,但辅助列可能更容易。
您也可以使用“小”function得到类似的答案。