# VALUE!在Excel中使用Lambda和ByRow辅助函数时出错(365)

njthzxwz  于 2022-11-26  发布在  其他
关注(0)|答案(1)|浏览(150)

我正在创建一个动态报表,汇总单个工作簿中多个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列组合更优雅/可伸缩的方式?
有什么好主意吗?谢谢。

ogq8wdun

ogq8wdun1#

这个方法怎么样:

=LET(start,221120,
     end,221122,
DROP(REDUCE(0,SEQUENCE(1+end-start,,start),LAMBDA(s,e,VSTACK(s,INDIRECT("'"&e&"'!BB38:BD38)))),1))

或者简单的=VSTACK('221120:221122'!BB38:BD38),基于JvdV给出的答案:https://stackoverflow.com/a/74077560/12634230

相关问题