无法在具有动态确定的最后一行的ARRAYFORMULA内部使用INDEX(VLOOKUP也不起作用)

时间:2019-03-16 20:22:35

标签: google-sheets google-sheets-formula

在这种情况下:在可以添加列的同时指定范围内的最后一列的简便方法,同时又允许自动增加行数。

设计是Google电子表格+表单,其后的标签/工作表功能最为繁重。表单将需要随着时间的变化而变化,那些繁重的选项卡需要跟进(需要一些代码来做到这一点),因此将添加更多的列,而我不希望用户必须这样做-返回并查找和修改需要根据给定的最后一列进行更新的公式。

因此,我在添加新的电子表格元素时将其添加到列中,最后一列包含我需要的结果。我只是无法在使用结果的其他公式中硬编码该列的位置,而且,我需要为越来越多的行处理它。

动态确定最后一列很容易找到,它只获取所有列号的列表,并返回最大的列:

=max(filter(column(D1:1),len(D1:1)))

...任何列字母都可以使用的位置。因此,对于给定的行,您可以获取最后一列的数据:

    =index(E3:3,1,max(filter(column(E1:1),len(E1:1)))-4)  
// the "-4" is to offset for the 4th cell in the range.

但是,INDEXARRAYFORMULA中不起作用。在寻求帮助的情况下,有很多答复说在这些情况下使用VLOOKUP,包括有关动态列号的答案。也许我错过了重点,但是相应的VLOOKUP AFAIK是:

=VLOOKUP(E3,E3:3,max(filter(column(E1:1),len(E1:1)))-4)

其中,在ARRAYFORMULA中(覆盖所有行)看起来像:

=ARRAYFORMULA(VLOOKUP(E3:E,E3:3,max(filter(column(E1:1),len(E1:1)))-4))

...无效,因为所有行的单行范围“ E3:3”均保持静态,因此我只获得每隔一行结果中第三行的结果。

但是,我发现我可以使用:

=ARRAYFORMULA(E3:E & ": " & indirect("R3C" & B1 & ":C" & B1,FALSE))
// where B1 is max(filter(column(E1:1),len(E1:1)))

这会将第5列中的条目与“:”连接在一起,然后将其与最后一列中的条目连接在一起。 ARRAYFORMULA中的范围说明符“ E3:E”对第三行之后的所有行重复,并且R3Cn:Cn的INDIRECT中的R1C1范围符号(其中n是最后一个列号)将ARRAYFORMULA扩展到最后一列。

对这种行为是否有更好的解释?

VLOOKUP中我在做什么错? ...据我所知,VLOOKUP是在INDEX中进行ARRAYFORMULA的方式,但看不到解决方案。

1 个答案:

答案 0 :(得分:1)

要基于标题行(第一行)获取最后一个非空列的范围,您需要像这样构造它:

=INDIRECT(ADDRESS(1,MAX(FILTER(COLUMN(D1:1),LEN(D1:1))),4)&":"&
 SUBSTITUTE(ADDRESS(1,MAX(FILTER(COLUMN(D1:1),LEN(D1:1))),4),1,""))

然后您可以像这样在VLOOKUP中使用它:

=ARRAYFORMULA(IFERROR(VLOOKUP(E3:E, 
 {Form!E3:E,INDIRECT(ADDRESS(3,MAX(FILTER(COLUMN(Form!D1:1),LEN(Form!D1:1))),4)&":"&
  SUBSTITUTE(ADDRESS(1,MAX(FILTER(COLUMN(Form!D1:1),LEN(Form!D1:1))),4),1,""))}, 2, 0), ))

如果有匹配项,它将返回最后一列的值