在这种情况下:在可以添加列的同时指定范围内的最后一列的简便方法,同时又允许自动增加行数。
设计是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.
但是,INDEX
在ARRAYFORMULA
中不起作用。在寻求帮助的情况下,有很多答复说在这些情况下使用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
的方式,但看不到解决方案。
答案 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), ))
如果有匹配项,它将返回最后一列的值