excel:根据另一列中的顺序对十进制值列表进行排序
Posted
技术标签:
【中文标题】excel:根据另一列中的顺序对十进制值列表进行排序【英文标题】:excel: sort a list of decimal values based on the order in another column 【发布时间】:2022-01-03 19:38:24 【问题描述】:ID-A | Val-A |
---|---|
22 | 17.1 |
4 | 16.0 |
7 | 16.5 |
ID-B | Val-B |
---|---|
9 | 15.5 |
2 | 19.5 |
45 | 17.5 |
这些表(Excel 中的 4 列)是我的输入(这里简化为一个最小的工作示例)。 Val-A 列中值的顺序(这里:最大、最小、中间)是 Val-B 应该排序的顺序。 也就是说,第二个表应该是这样的:
ID-B | Val-B |
---|---|
2 | 19.5 |
9 | 15.5 |
45 | 17.5 |
输入列 Val-A 和 Val-B 中值的顺序以及 ID-A 和 ID-B 中的 ID 是任意的。 同样重要的是要注意 Val-A 和 Val-B 中的值永远不会相等,即 Val-A 中的值都不会是 Val-B 中的值。
如何在 Excel 中实现这一点?
【问题讨论】:
你是说Val-B的排列顺序应该和Val-B的排列顺序一致(这里是3,1,2,其中3最大秩)?如果您有 Excel 365,则可以使用 Sortby 来完成。 【参考方案1】:我建议您对第一个表中的值进行排名,然后将第二个表中的排名与这些排名相匹配,以获得您需要的排序顺序。
使用范围:
=SORTBY(D2:E4,XLOOKUP(RANK(E2:E4,E2:E4),RANK(B2:B4,B2:B4),SEQUENCE(3)))
或使用结构化引用:
=SORTBY(Table2,XLOOKUP(RANK(Table2[Val-B],Table2[Val-B]),RANK(Table1[Val-A],Table1[Val-A]),SEQUENCE(ROWS(Table2))))
编辑
第二个表的行数比第一个表多的情况。
在这方面有点拖延时间,所以没有完全检查。我无法让 Rank 与过滤器一起使用,尽管文档建议它应该可以工作,但 index.js 可以。为避免大量重复,我将其放在 Let 语句中,如下所示:
=LET(FilValB,INDEX(TableB[Val-B],1):INDEX(TableB[Val-B],ROWS(TableA)),
FilTableB,INDEX(TableB,1,1):INDEX(TableB[Val-B],ROWS(TableA)),
SORTBY(FilTableB,XLOOKUP(RANK(FilValB,FilValB),RANK(TableA[Val-A],TableA[Val-A]),SEQUENCE(ROWS(FilTableB)))))
【讨论】:
非常感谢,这正是我想要的。但是,仍然存在一个问题:“ID-A”和“Val-A”的行数小于“ID-B”和“Val-B”的行数。例如,如果 A 包含 10 行,B 包含 15 行,那么我想按照您在答案中的描述对 B 的 10 行进行排序,剩余的 5 行可以从排序数组中删除或附加到 10 个排序行之后.因此,重要的是 B 的前 10 个值的顺序与 A 的 10 个值的顺序相匹配...有没有一种简单的方法可以将其合并到您的代码 sn-p 中? 我认为您必须逐行过滤第二个表。早上去看看。 谢谢。我期待着你的帖子。 :) 我也想出了一个解决方案:在中间步骤中,我过滤了 B-Matrix --- =FILTER(D2:E5;RANG(E2:E4;E2:E4)以上是关于excel:根据另一列中的顺序对十进制值列表进行排序的主要内容,如果未能解决你的问题,请参考以下文章
如何按顺序提取EXCEL里其中一列数据(符合指定条件的)依次显示在另一列里