电子表格:根据一列按另一列的值排序来创建列

电子表格:根据一列按另一列的值排序来创建列

我想根据一列按另一列排序的数据创建新列。

用一个例子来解释是最容易的。这实际上不是我在做的事情,但我认为它解释得很好。假设 A 列按字母顺序排列人名:
Adam
Betty
Colin
Debbie

B 列为出生年份:
1985
1973
1954
1973

我想创建一个 C 列,按出生年份列出人员姓名:
Colin
Betty
Debbie
Adam

这应该以不改变或排序列 A 或 B 的方式完成。
这应该以如果编辑 A 或 B 列则自动更新 C 列的方式完成。

谢谢!(如果有任何区别的话,我在 Windows 10 上使用 Excel 工作。)

答案1

Cx=INDIRECT(ADDRESS(COUNTIF(B:B,">=" & Bx),1))

出生年份值必须是唯一的。

如果数据从数字大于 1 的行开始 - 将适当的数字添加到 COUNTIF() 值。

答案2

如果列中的年份是唯一的,但我们可以调整重复的年份。D1进入:

=B1

以及D2进入:

=B2+COUNTIF(B$1:B1,B2)*0.001

并向下复制。列重复列重复项“去冲突”。这允许MATCH()函数检索所有值。最后,在C1进入:

=INDEX(A:A,MATCH(SMALL(D:D,ROWS($1:1)),D:D,0))

并向下复制:

在此处输入图片描述

答案3

@Garry's Student 出于某种原因,我之前没有找到我需要的公式。几天后我都无法回到此页面,经过进一步研究,我找到了 RANK 公式。(在最新的 Excel 中,RANK 已贬值,因此我改用了较新的 RANK.EQ。然后我想到 VLOOKUP,但经过进一步搜索,我发现 INDEX MATCH 似乎更好,而且您也使用了它。
所以,这就是我想到的方法以及我如何应对重复的年份: 按年份对姓名进行排名的电子表格

(由于标题的原因,我的公式从第 2 行开始)
C 列公式:

=RANK.EQ(B2,B$2:B$15,1)

了解排名的工作原理很重要。如果位置 5 处有三个项目,则它们都获得排名 5,并且不会有排名 6 或 7 的项目。下一个位置的排名是 8。D

列公式:
在第一个单元格中

=C2

并在随后的细胞中

=C3+COUNTIF(C$2:C2,C3)

这样可以消除重复排名。如果列表中的排名重复,则排名增加 1。因此,那些重复的数字 5 将被赋予排名 6 和 7。E

列只是连续数字的列表,很容易自动填充。F

列公式将所有内容整合在一起:

=INDEX($A$2:$A$15,MATCH(E2,$D$2:$D$15,0))

无论如何,我想分享我所拥有的,因为它有效并且略有不同。但 Garry's Student 的答案可能更好,因为它使用更少的列来实现目标。(也许我可以结合一些并使用更少的列来实现我的方法。)

相关内容