我有一个包含多行和多列(数百个)的表,为了简单起见,它看起来非常像这样:
| 姓名/日期|22年1月|22年2月|22年3月|4月22日|5月22日|
| - ------|- ------|- ------|- ------|- ------|- ------|
| 杰克|十个|四个|七|1个|十个|
| 玫瑰|六个|四个|第二章|三个|三个|
| 玛丽|第二章|六个|七|第二章|九|
| 胡安|九|八个|1个|五个|十个|
| 玫瑰|十个|八个|五个|七|1个|
| 胡安|六个|四个|第二章|五个|九|
| 杰克|十个|七|七|四个|五个|
| 玛丽|五个|1个|1个|第二章|三个|
| 玫瑰|第二章|四个|四个|1个|1个|
我的目标是创建一个数组公式,对每个唯一名称和每个日期的值求和,因此最后它应该如下所示:
| 姓名/日期|22年1月|22年2月|22年3月|4月22日|5月22日|
| - ------|- ------|- ------|- ------|- ------|- ------|
| 杰克|二十个|十一|十四|五个|十五|
| 玫瑰|十八|十六|十二|十一|五个|
| 玛丽|七|七|八个|四个|十二|
| 胡安|十五|十二|三个|十个|十九|
限制是我必须在一个单元格中使用函数获得这个输出,并且没有helper列。
虽然使用=HSTACK()
和=SUMIF(names,UNIQUE(names),values)
的组合并不困难,而且每个日期都有不同的SUMIF,但是在这个项目中这是不可能的,因为我必须处理大量的列,而且列数随每次分析而变化。
我试着用=SUMIF(names,UNIQUE(names),values)
和lambda数组公式的组合来解决这个问题(类似于BYROW
、BYCOL
和MAP
,但除了一个错误(BYROW
只能返回1列作为输出,BYCOL
只能返回1行,MAP
函数返回一个与输入大小相同的数组)。可以做些什么来解决这个问题?
2条答案
按热度按时间s4n0splo1#
如果唯一则求和
vs91vp4v2#
您可以尝试使用以下数组公式,该公式将溢出整个结果(包括标题)。在单元格
H1
中输入以下内容:下面是输出:
它使用
REDUCE/HSTACK
模式来连接REDUCE
函数每次迭代的列结果。有关更多信息,请查看我对以下问题的回答:如何将Excel中的表格从垂直转换为水平,但长度不同。在这种情况下,可以使用唯一名称列表(nUx
)初始化REDUCE
中的累加器(ac
)。公式仅取决于名称
in
中定义的范围(input),这样更容易维护,其他名称都是从这里定义的(n
-名称,nUx
-唯一名称,d
-数据,h
-报头),使用DROP
,UNIQUE
和TAKE
函数。我们定义了一个用户LAMBDA
函数SUMBYROW
,以获得更好的组合,从而更容易理解上述模式。我们在每次迭代中对每个列索引调用此函数。