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

问题描述 投票:0回答:2

我正在创建一个动态报告,汇总单个工作簿中多个 XLS 工作表上的数据。这些工作表的名称与特定日期相关。

这是我正在做的事情的简化示例,效果很好 - 它给出了正确的答案,即名为“221122”的工作表上参考 BB38 处的单元格的值:

=LAMBDA(r,INDIRECT("'" & r & "'!BB38"))("221122")

当我想使用

BYROW
对工作表数组进行迭代而不是仅将工作表名称传递给 lambda 时,就会出现问题。复制问题的简单示例:

=BYROW({"221122"}, LAMBDA(r,INDIRECT("'" & r & "'!BB38")))

这会产生

#VALUE!
错误,而不是正确的答案,即对同一单元格的引用(作为单单元格动态数组结果的一部分)。我解决这个问题的唯一方法是在
SUM
周围添加
INDIRECT

=BYROW({"221122"}, LAMBDA(r,SUM(INDIRECT("'"&r&"'!BB38"))))

除了丑陋之外,我真正想做的是找回一组(溢出的)细胞,就像这样,但是我不能使用

SUM
技巧:

=BYROW({"221120","221121","221122"}, LAMBDA(r,INDIRECT("'"&r&"'!BB38:BD38")))

所以我的目标是这样的溢出范围:

A 栏 B 栏 C 栏
221120!BB38 221120!BC38 221120!BD38
221121!BB38 221121!BC38 221121!BD38
221122!BB38 221122!BC38 221122!BD38

我知道你不能将动态函数传递给

INDIRECT
但这不是我在这里所做的 - 我正在传递动态数组的单行,由
r
表示。

在评论中,Harun24hr 正确指出

BYROW
无法返回动态数组 - 这就是
SUM
起作用的原因。我自己的“黑客”方法是获取代表 BB38、BC38 和 BD38 的各个 1xN 单元格范围,然后
HSTACK
将它们放在一起,例如:

    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 列在一起更优雅/可扩展的方式?

请问有什么想法吗?谢谢。

excel excel-formula dynamic-arrays
2个回答
1
投票

这种方法怎么样:

=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


0
投票

我也有类似的情况,但是选项卡名称不是连续的或数字的。事实上,我使用“=(GET.WORKBOOK(1))&T(NOW())”以数组格式提取它们,与上面的查询类似,我想使用间接公式来获取每个工作表的单元格 C2。

我正在使用这个公式 "=LET(A, "'" &A14#& "'!"&"C2", B,BYROW(A,LAMBDA(X,间接(X))), B)" 不过我得到了一个值!错误。奇怪的是,当我在单独的单元格中锻炼“A”命名范围,然后使用“#”引用该单元格时,因为它将是一个动态数组,它就起作用了。然而它不是很整洁。有这方面的帮助吗?

© www.soinside.com 2019 - 2024. All rights reserved.