我正在创建一个动态报表,汇总单个工作簿中多个XLS工作表上的数据。这些工作表的名称与特定日期相关联。
这是我正在做的事情的一个简化的例子,它工作得很好-它给出了正确的答案,即工作表上名为“221122”的引用BB 38处的单元格的值:
=LAMBDA(r,INDIRECT("'" & r & "'!BB38"))("221122")
当我想使用BYROW
而不是仅仅将表名传递给lambda来遍历一个表数组时,问题就出现了。
=BYROW({"221122"}, LAMBDA(r,INDIRECT("'" & r & "'!BB38")))
这会产生一个#VALUE!
错误,而不是正确的答案,即引用同一个单元格(作为一个单元格动态数组结果的一部分)。解决这个问题的唯一方法是在INDIRECT
周围添加一个SUM
:
=BYROW({"221122"}, LAMBDA(r,SUM(INDIRECT("'"&r&"'!BB38"))))
除了丑陋之外,我真正想做的是得到一组细胞(溢出的),就像这样,但是我不能使用SUM
技巧:
=BYROW({"221120","221121","221122"}, LAMBDA(r,INDIRECT("'"&r&"'!BB38:BD38")))
因此,我的目标是这样一个溢出范围:
| A列|B栏|C列|
| - -|- -|- -|
| 221120| 221120| 221120|
| 小行星221121| 221121|小行星221121|
| 小行星221122| 221122|小行星221122|
我知道你不能把动态函数传递给INDIRECT
,但这不是我在这里要做的--我传递的是动态数组的一行,用r
表示。
Harun 24 hr在评论中正确地指出BYROW
不能返回动态数组--这就是SUM
工作的原因。我自己的“破解”方法是获得代表BB 38,BC 38和BD 38的单个1xN单元格范围,然后将它们组合在一起,例如:
a, BYROW(sheets, LAMBDA(r, SUM(INDIRECT("'" & r & "'!AY38")))),
b, BYROW(sheets, LAMBDA(r, SUM(INDIRECT("'" & r & "'!AZ38")))),
c, BYROW(sheets, LAMBDA(r, SUM(INDIRECT("'" & r & "'!BA38")))),
d, BYROW(sheets, LAMBDA(r, SUM(INDIRECT("'" & r & "'!BB38")))),
HSTACK(a,b,c,d)
真实的的问题是:是否有比HSTACK
1xN列组合更优雅/可伸缩的方式?
有什么好主意吗?谢谢。
1条答案
按热度按时间ogq8wdun1#
这个方法怎么样:
或者简单的
=VSTACK('221120:221122'!BB38:BD38)
,基于JvdV给出的答案:https://stackoverflow.com/a/74077560/12634230