问题 我一起使用 BYROW、LAMBDA 和 INDIRECT 函数来创建整个工作簿的动态目录,在第一列中列出工作表名称,在第二列中列出每个工作簿特定单元格中的值(相同)每个工作簿的单元格旨在使用定义的结构模板)
例如 |选项卡|描述 | | -------- | -------------- | | ABC有限公司|经营性质是... | | DEF公司|运营性质是... |
第一列我知道如何使用名称管理器和“=(GET.WORKBOOK(1))&T(NOW())”等来实现。这将以数组格式动态更新工作簿中的工作表列表。
对于第二列我尝试使用对第一列的引用和间接公式从每个工作簿中获取特定单元格,例如每个工作簿中的 A1。我使用 BYROW 和 LAMBDA 以及间接公式,因为我知道间接公式不适合数组。
简化的公式演示 我提供了公式的简化版本,它只是从同一张表中获取数据,因为我设法缩小了问题范围。看来:
这个公式不起作用,会返回 #VALUE 错误
=BYROW(TRANSPOSE({"A1","A2"}),LAMBDA(X,INDIRECT(X)))
这是我发现的一个解决方法,有点混乱,我想避免
=BYROW(C4#,LAMBDA(X,INDIRECT(X)))
注意 C4# 包含数组:{"A1","A2"}
遇到问题 正如您所看到的,主要区别在于,第二个有效的公式我指的是 C4# 外部数组,而在第一个公式中,我试图将数组包含在 BYROW 公式中,以使公式更加简洁和整洁。 我的目标是找到一种方法使第一个公式起作用,而无需在公式外部添加数组(C4#)。
尽管有 INDIRECT 函数,INDIRECT 不适用于单个单元格范围或动态数组参数(即使动态数组仅包含单个值)。
=BYROW(TRANSPOSE({"A1","A2"}),LAMBDA(X,INDIRECT(X)))
不起作用并返回“#CALC!”由于上述 INDIRECT 的限制而导致错误(X 获取 INDIRECT 不接受的行 {"A1","A2"})。
OP 写道,这个公式返回“#VALUE!”,但我猜这是 OP 由于多次尝试解决问题而输入错误。这个没有 TRANSPOSE 的公式确实返回“#VALUE!”它的参数是两个元素的相同垂直向量,如公式中的“C4#”。
因此,我将研究下一个公式:
=BYROW({"A1","A2"},LAMBDA(X,INDIRECT(X)))
由于 BYROW/BYCOL 函数以不同方式处理范围或动态数组参数的功能,它无法代替
=BYROW(C4:C5,LAMBDA(X,INDIRECT(X)))
工作。
@ScottCraner 提供的解决方案是
=BYROW({"A1","A2"},LAMBDA(X,INDIRECT(@X)))
或者其他解决方案
=MAP({"A1";"A2"};LAMBDA(X;INDIRECT(X)))
BYROW 和 BYCOL 函数的特点是对范围或动态数组参数进行不同的处理。
正如我们所见,BYROW 从垂直向量动态数组的每个元素获取一个数组,而它从单列范围中每行获取单个值。