在 Excel 中,如何对列表中项目的出现次数进行编号?

在 Excel 中,如何对列表中项目的出现次数进行编号?

我有一个项目列表,这些项目的重复次数各不相同,但所有出现的情况都分组在一起(不必担心 20 行以下出现另一个“苹果”)。我需要使用数组公式对项目的每个出现进行编号:

物品 发生
苹果 1
苹果 2
苹果 3
苹果 4
橙子 1
橙子 2
橙子 3
葡萄 1
葡萄 2
葡萄 3
葡萄 4

此工作表将与其他人共享,并且可能有数十到数百个不同的项目,并且每个项目可能有 1 到数百个出现。我需要在 Windows/Mac/Web 上运行的解决方案,因此 VBA 不是一个选项。在 Google 表格中,我找到了以下有效的公式:

=ArrayFormula(SORT(ROW(A2:A),SORT(ROW(A2:A),A2:A,1),1)-MATCH(A2:A,SORT(A2:A),0)-ROW()+1)

我需要在 Excel 中做同样的事情,因此我尝试将 ARRAYFORMULA 转换为 LAMBDA,因为我很幸运它们可以跨平台工作(尽管我对 LAMBDA 还很陌生):

=BYROW(A2:A,LAMBDA(item,SORT(ROW(item),SORT(ROW(item),item,1),1)-MATCH(item,SORT(item),0)-ROW()+1))

但是这个公式在 Google 表格中给出了一个错误:

“函数 SORT 参数 2 需要数字值。但‘Apples’是文本,无法强制转换为数字。”

Excel 中出现以下错误:

“公式中使用的值的数据类型错误。”

我很难理解我为 Google Sheets 找到的公式实际上是如何工作的,因此对其 LAMBDA 等效项进行故障排除对我来说不起作用。有没有关于如何在 Excel 中对我的出现次数进行编号的想法,无论是通过修复我已有的内容,还是有更好的选择?

添加:

@Mureinik 的答案不正确,因为我指定这需要是一个数组公式,但我尝试将他的建议包含在 LAMBDA 中(以及一些代码来找出列中的最后一行),并且它有效!

=BYROW(INDIRECT("A2:A"&COUNTA(A:A)),LAMBDA(item, COUNTIF(INDIRECT("A2:A"&ROW(item)), INDIRECT("A"&ROW(item))) ))

作为奖励,相同的代码可以在 Google Sheets 中使用,而且似乎比我之前的代码更高效。谢谢 @Mureinik,我给了你支票,让你走上了正确的道路!

答案1

您可以使用countif函数来计算指定单元格的出现次数,直至列顶部。假设“项目”是 A 列,并且第 1 行有一个标题行,则行的公式n为:

=COUNTIF($A$2:$An, $An)

例如,对于第 123 行,您需要:

=COUNTIF($A$2:$A123, $A123)

输入前两个单元格后,您可以将公式一直拖到列的底部,Excel 会为您整理编号。

答案2

@Mureinik 的答案不正确,因为我指定这需要是一个数组公式,但我尝试将他的建议包含在 LAMBDA 中(以及一些代码来找出列中的最后一行),并且它有效!

=BYROW(INDIRECT("A2:A"&COUNTA(A:A)),LAMBDA(item, COUNTIF(INDIRECT("A2:A"&ROW(item)), INDIRECT("A"&ROW(item))) ))

额外的好处是,相同的代码可以在 Google Sheets 中使用,而且似乎比我之前的代码更高效。感谢 @Mureinik 为我指明了正确的方向!

相关内容