Google表格中的ARRAYFORMULA能否在硬编码范围和CONCATENATEED范围之间进行区分

时间:2019-11-21 22:37:08

标签: arrays google-sheets concatenation google-sheets-formula array-formulas

在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

是否有一种方法可以将通过CONCATENATEJOIN函数使用由ARRAYFORMULA或类似函数(例如ARRAYCONSTRAIN)构造的动态范围检索单元格值的范围?

1 个答案:

答案 0 :(得分:1)

您只可以选择:

=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)))))