为什么我的importrange查询在我" wrap" with arrayformula

时间:2015-07-24 22:31:55

标签: google-sheets

我有以下公式,目前正在返回预期结果 -

=join(",",query(importrange(vlookup(mid(G4,1,find(",",G4)-1),xref,2,false),vlookup(mid(G4,1,find(",",G4)-1),xref,3,false)),"Select Col3,Col6,Col9 where Col1 = '"&mid(G4,find(",",G4)+1,20)&"' "))

然而,我自然希望尽可能使其具有动态性和灵活性,因此我想"包装"它在arrayformula中最终会像这样 -

=arrayformula(join(",",query(importrange(vlookup(mid(G4:G,1,find(",",G4:G)-1),xref,2,false),vlookup(mid(G4:G,1,find(",",G4:G)-1),xref,3,false)),"Select Col3,Col6,Col9 where Col1 = '"&mid(G4:G,find(",",G4:G)+1,20)&"' ")))

这个公式给了我"无法解析函数QUERY参数2的查询字符串:NO_COLUMNCol3"错误。

我试图包含一个iferror试图捕获一些错误,但这没有任何区别。

我尝试了各种角度来调试,并且基本上集中在importrange上,一旦它被arrayformula包装,就不会向查询提供数据。我试图在importange函数中显式引用外部表键和范围,而不是使用查找,这确实给了我一个结果 - 但只在第一个单元格中。还应该有一个结果返回大约4行。

如果我将公式复制到列中,我确实得到预期结果4行,但这显然违背了arrayformula的目的。

在我对Google论坛的研究中,有一些建议认为arrayformula和importrange可能不能很好地协同工作,但没有硬性和快速的事实。

我注意到在这个论坛中已经提到了两个函数的组合,但没有迹象表明它们没有一起工作,所以我想知道我的语法中是否只有一些我遗漏的小东西导致了我的理想情景不起作用?

1 个答案:

答案 0 :(得分:1)

我认为这不会有几个原因。

首先,并非Google表格中的所有功能都可以使用数组表格自动完成,而QUERY就是其中之一。据我所知,这是因为QUERY的输出本身就是一个数组,因此无法在另一个数组中迭代数组输出(即结果范围)。

其次,JOIN跨越单行或列,而您的查询输出3列。因此,arrayformula结果将由一个包含多个行和列的数组组成,JOIN不能使用它。

我认为最好的解决方案是按照您的描述使用IFERROR,并将整行列中的单行公式复制 - 这样空白记录就不会显示为错误,但您可以添加新的列G的值将自动获取。