Excel 365中使用Lambda与BYROW函数出现#VALUE!错误的解决问询
问题:多日期工作表动态汇总的优雅实现方案
我正在单个工作簿内创建一份汇总多XLS工作表数据的动态报表,这些工作表的名称与特定日期绑定。
单个工作表取值正常
以下公式可正常运行,返回名为“221122”的工作表中BB38单元格的值:
=LAMBDA(r,INDIRECT("'" & r & "'!BB38"))("221122")
BYROW遍历出现错误
当尝试用BYROW遍历工作表名称数组而非单独传递名称给Lambda时,出现#VALUE!错误:
=BYROW({"221122"}, LAMBDA(r,INDIRECT("'" & r & "'!BB38")))
目前仅能通过在INDIRECT外层添加SUM来规避错误:
=BYROW({"221122"}, LAMBDA(r,SUM(INDIRECT("'"&r&"'!BB38"))))
目标:返回多列溢出区域
上述SUM方法不够美观,且当需要返回一组溢出的单元格区域时(如下公式),无法使用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 |
临时解决办法
评论中Harun24hr指出BYROW无法返回动态数组,这正是SUM方法有效的原因。我目前的临时方案是逐个获取单个单元格的1×N区域,再用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拼接1×N列更优雅、可扩展的方法?
内容的提问来源于stack exchange,提问作者nickpharris
相关产品推荐
相关产品推荐

