所以,我已经找到了答案,但是什么也找不到。希望那里的一些Excel专家能提供一个简单的答案。
上下文
我有一张有两栏的工作表;机场代码列表(Col A)和燃油加仑列表(Col B)。列A有很多重复条目,列B总是不同的。从根本上讲,这是不同机场飞机随时间推移补全事件的庞大清单。机场可以是相同的,因为每个填写事件都是一排。
问题
我想要做的是有一个公式,该公式采用输入数据集,在列A中查找所有相同的条目,将匹配项的列B值相加,然后将结果吐出到一张单独的纸上,每张记录设置/匹配。
其他东西
我没有A列的引用列表,我宁愿不创建列,因为有成千上万的条目。我只想编写一个公式,使用数据本身作为参考,一次完成所有这些操作。
我找到的所有答案都是“在另一张纸上创建参考列表”,这让我发疯了!
在此先感谢您的帮助!
-rt
答案 0 :(得分:0)
您需要公式版本为remove的声音对于A列是重复的,而对于B列则是简单的sumif。
=IFERROR(INDEX(Data!A$1:A$1000,SMALL(IF(
MATCH(Data!A$1:A$1000,Data!A$1:A$1000,0)=ROW(Data!A$1:A$1000),ROW(Data!A$1:A$1000)),ROW())),"")
数组公式,因此请按 Ctrl + Shift + Enter 即可完成。之后,您可能会在公式外看到{}
。
=SUMIF(Data!A$1:A$1000,A2,Data!B$1:B$1000)
只需更改数据范围即可。
提醒:A列中的公式应从Row#1
开始,或者您必须添加一些偏移常量以进行调整。
由于返回值MATCH()
表示键在给定数组中的位置。如果我们希望它等于它的行号,那么如果数组不是从ROW#1
开始的话,我们必须添加一些常量。因此,Range(B3:B1000)
中的数据调整如下。
=IFERROR(INDEX('Event Data'!B$3:B$1000,SMALL(IF(
MATCH('Event Data'!B$3:B$1000,
'Event Data'!B$3:B$1000,0)+2=ROW('Event Data'!B$3:B$1000),
ROW('Event Data'!B$3:B$1000)),ROW())-2),"")
此外,范围应与数据范围完全相同。如果您需要的数据量大于数据范围以用于将来扩展,则应在公式中添加IFERROR()
。
=IFERROR(INDEX('Event Data'!B$3:B$1000,SMALL(IFERROR(IF(MATCH(
'Event Data'!B$3:B$1000,'Event Data'!B$3:B$1000,0)+2
=ROW('Event Data'!B$3:B$1000),
ROW('Event Data'!B$3:B$1000)),FALSE),ROW())-2),"")
最后,我真的建议您使用excel中内置的Remove Duplicated
,因为数组公式的时间复杂度和内存使用量也约为O(n ^ 2)。每次您在其他单元格中输入任何数据时,只要您的excel中的计算选项是自动的,它就会自动重新计算所有公式。 这会降低性能。