如何对表格 1 中的表格进行排序,例如
A B C D E
3 7 3 6 5
进入工作表 2 中的另一个表
A C E D B
3 3 5 6 7
仅使用功能?
一种非常简单的方法是只使用排名索引,然后使用 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)
好的,这是“一个公式完成所有工作”的解决方案,没有额外的临时列:
A6 中的公式:
=INDEX($A$2:$E$2,MATCH(SMALL($A$3:$E$3+COLUMN($A$3:$E$3)/100000000,COLUMN()),$A$3:$E$3+COLUMN ($A$3:$E$3)/100000000,0))
将其作为数组公式输入,即按Ctrl- Shift- Enter。然后将其复制到相邻的列。
要获得数字,请在 A7 中使用此公式(再次作为数组公式):
=ROUND(小($A$3:$E$3+栏($A$3:$E$3)/100000000,COLUMN()),6)
这两个公式都有些臃肿,因为它们还必须处理潜在的重复项。解决方案是在应用排序(SMALL 函数)之前简单地添加一小部分列 - 然后再次将其删除......
虽然我使用了“添加小数技术”,但我认为这对于辅助行/列来说是最优雅的:
=RANK(B4,$B$4:$F$4,0) + COUNTIF($B$4:$F$4,B4)-1
(跨行列复制) RANK 让您关闭,并且 COUNTIF 部分通过计算单元格的重复次数到该点来处理重复项。由于总是有匹配(本身),因此您为最终排名减去 1。这种“排序”关系按照它们出现的顺序。请注意,空单元格将生成#N/A 和字符数据作为#Values。
这是可行的!:-)
这是示例文件。
解释
我假设您的数据位于 Sheet1 的第 1 行,并且您希望数据从另一张表的第 1 列开始排序 - 如果不是,请进行相应调整。
将此公式放在目标工作表的第 1 列,例如第 2 行:
=ROUND(小(Sheet1!$A$1:$E$1+COLUMN(Sheet1!$A$1:$E$1)/100000000,COLUMN()),6)
您需要将公式作为数组公式输入,即按Ctrl-Shift-Enter。
如果您将其放置在第一列之外的另一列中,则需要替换COLUMN()
为必须是对单元格本身的引用的COLUMN()-COLUMN($A$2)+1
位置。$A$2
此公式将返回您范围内的最小数字 - 如果您将其复制到接下来的 4 列,您将获得数字订单列表。
要将其转换回列号,我们需要执行 2 个步骤:
=MATCH(小(Sheet1!$A$1:$E$1+COLUMN(Sheet1!$A$1:$E$1)/100000000,COLUMN()),Sheet1!$A$1:$E$1+COLUMN(Sheet1!$ A$1:$E$1)/100000000,0)- 再次,作为数组公式输入。如果源数据不是从 A 列开始,则需要在需要将
+COLUMN(Sheet1!$A$1)-1
$A$1 替换为源数据最左侧单元格的位置添加。=LEFT(地址(1,A6,2),搜索("$",地址(1,A6,2))-1)
当然,您也可以将第 1 步和第 2 步结合起来,这将得到这个大公式:
=左( 地址( 1、 匹配( 小(Sheet1!$A$1:$E$1+COLUMN(Sheet1!$A$1:$E$1)/100000000,COLUMN()), Sheet1!$A$1:$E$1+COLUMN(Sheet1!$A$1:$E$1)/100000000, 0), 2), 搜索( "$", 地址( 1、 匹配( 小(Sheet1!$A$1:$E$1+COLUMN(Sheet1!$A$1:$E$1)/100000000,COLUMN()), Sheet1!$A$1:$E$1+COLUMN(Sheet1!$A$1:$E$1)/100000000,0), 2) )-1 )再次,作为数组公式输入。