我正在创建一个动态报告,汇总单个工作簿中多个 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 列在一起更优雅/可扩展的方式?
请问有什么想法吗?谢谢。
这种方法怎么样:
=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
我也有类似的情况,但是选项卡名称不是连续的或数字的。事实上,我使用“=(GET.WORKBOOK(1))&T(NOW())”以数组格式提取它们,与上面的查询类似,我想使用间接公式来获取每个工作表的单元格 C2。
我正在使用这个公式 "=LET(A, "'" &A14#& "'!"&"C2", B,BYROW(A,LAMBDA(X,间接(X))), B)" 不过我得到了一个值!错误。奇怪的是,当我在单独的单元格中锻炼“A”命名范围,然后使用“#”引用该单元格时,因为它将是一个动态数组,它就起作用了。然而它不是很整洁。有这方面的帮助吗?