首页 > 解决方案 > Google Sheet 中的 ARRAYFORMULA 是否区分硬编码范围和连接范围

问题描述

在 Google 表格中使用 ARRAYFORMULA 函数时,在以下公式中对目标范围进行硬编码可以按预期工作:

=ArrayFormula(Sheet1!$FH$3:Sheet1!$GH$3)

ARRAYCONSTRAIN 也一样:

=ARRAY_CONSTRAIN(Sheet1!$FH$3:Sheet1!$GH$3,1,27)

当范围值是动态的使用 CONCATENATE 和其他嵌套函数时,这些公式会失败:

=ArrayFormula(CONCATENATE(CELL("address",OFFSET(INDIRECT(CELL("address",INDEX(Sheet1!3:3,,MATCH(TODAY(),Sheet1!3:3,1)))),0,-26)),":",CELL("address",INDEX(Sheet1!3:3,,MATCH(TODAY(),Sheet1!3:3,1)))))

上面的公式只返回引用的范围(即“Sheet1!$FH$3:Sheet1!$GH$3”)而不是范围值。我试过使用花括号{和.}ctrl-shift-enter

有没有办法使用由CONCATENATE或类似函数(例如JOIN)构造的动态范围与ARRAYFORMULAorARRAYCONSTRAIN函数来检索单元格值的范围?

标签: arraysgoogle-sheetsconcatenationgoogle-sheets-formulaarray-formulas

解决方案


你最好只去:

=ARRAYFORMULA(Sheet1!$FH$3:$GH$3)

无需重复工作表名称两次

并且在构建范围时,您总是需要使用INDIRECT

=ARRAYFORMULA(INDIRECT("Sheet1!FH3:GH3"))

上面的公式只返回引用的范围(即“Sheet1!$FH$3:Sheet1!$GH$3”)而不是范围值

在你的情况下尝试:

=ARRAYFORMULA(INDIRECT(CONCATENATE(CELL("address", OFFSET(INDIRECT(
 CELL("address", INDEX(Sheet1!3:3,, MATCH(TODAY(), Sheet1!3:3, 1)))), 0, -26)),":", 
 CELL("address", INDEX(Sheet1!3:3,, MATCH(TODAY(), Sheet1!3:3, 1))))))

可以简化为:

=ARRAYFORMULA(INDIRECT(CELL("address", OFFSET(INDIRECT(
 CELL("address", INDEX(Sheet1!3:3,, MATCH(TODAY(), Sheet1!3:3, 1)))), 0, -26))&":"& 
 CELL("address", INDEX(Sheet1!3:3,, MATCH(TODAY(), Sheet1!3:3, 1)))))

推荐阅读