我使用以下函数
=DAYS360(A2, A35)
我想计算我的一列中两个日期之间的差异。然而,这一列是不断扩展的,因此每次更新电子表格时,我都必须手动更改"A35"。
是否有一种方法(在Google表格中)可以找到该列中最后一个非空单元格,然后动态设置上述函数中的参数?
我使用以下函数
=DAYS360(A2, A35)
我想计算我的一列中两个日期之间的差异。然而,这一列是不断扩展的,因此每次更新电子表格时,我都必须手动更改"A35"。
是否有一种方法(在Google表格中)可以找到该列中最后一个非空单元格,然后动态设置上述函数中的参数?
=index(G:G;max((G:G<>"")*row(G:G)))
这将是您原始任务的最终公式:
=DAYS360(G10;index(G:G;max((G:G<>"")*row(G:G))))
我选择了另一种方法。由于我知道我将逐个向行/列添加内容,因此首先通过计算具有数据的字段来找出最后一行。下面是一个列的示例:
=COUNT(A5:A34)
=INDIRECT("A"&COUNT(A5:A34)+4)
=ARRAYFORMULA(INDIRECT("A"&MAX(IF(A:A<>"", ROW(A:A), ))))
=ARRAYFORMULA(INDIRECT(ADDRESS(1, MAX(IF(1:1<>"", COLUMN(1:1), )), 4)))
通过引入LAMBDA和REDUCE函数,我们现在可以在一次遍历单元格时计算行号(以上几种解决方案会两次筛选范围),而无需依赖于神奇文本或数字值。
=lambda(rng,
REDUCE(0, rng, lambda(maxrow, cell, if(isblank(cell),maxrow,row(cell)) ) )
)(A:A)
这可以被很好地打包成一个命名函数,以便像使用函数一样使用它
=LAST_ROWNUM(A:A)
它适用于包含间隔空白的列、多列范围(因为REDUCE按行优先迭代范围),以及部分列(如A20:A),仍然返回实际行号(而不是范围内的偏移量)。
然后可以将其与Index结合使用以返回值
=DAYS360(A2, Index(A1, LAST_ROWNUM(A:A)))
实际上,我怀疑OP的日期值是单调的(即使中间有空白),他可以轻松解决这个问题。
=DAYS360(A2, MAX(A2:A))
=REDUCE(0; range; lambda(maxrow; cellule; if(isblank(cellule);maxrow;row(cellule)) ) )
,然后您可以使用=LAST_ROWNUM(A:A)
来获取最后一个非空行的行号。要检索值,您可以使用=INDEX(A:A, LAST_ROWNUM(A:A))
。 - thdox=lambda(rng, REDUCE(0, rng, lambda(maxrow, cell, if(isblank(cell),maxrow,row(cell)) ) ) )(A:A)
实际上可以简化为=REDUCE(0, A:A, lambda(maxrow, cell, if(isblank(cell),maxrow,row(cell)) ) )
。 - thdox=indirect("A"&max(ARRAYFORMULA(row(a:a)*--(a:a<>""))))
这将提供最后一个单元格的地址:
="A"&max(ARRAYFORMULA(row(a:a)*--(a:a<>"")))
=max(ARRAYFORMULA(row(a:a)*--(a:a<>"")))
function getLastRow(range){
while(range.length>0 && range[range.length-1][0]=='') range.pop();
return range.length;
}
完成这个步骤后,您只需要在单元格中输入以下内容:
=getLastRow(A:A)
=ARRAYFORMULA(S2:INDIRECT("S"&max(ARRAYFORMULA(row(F:F)*--(F:F<>"")))))
其中 S2:..
以列 F 的最后一个非空单元格(在我这个例子中为 S2773
/ F2773
)作为该新列范围的截止点。这使其具有动态性,并且我不再需要手动切割剩余的空单元格。只需要将内容粘贴到列 F 中,它就会自动完成。也不需要任何单独的参考单元格!再次感谢。祝一切顺利! - LodA
。=ArrayFormula(IFNA(match(2,1/(A:A<>""))))
要选择任意非空值列中的最后一个,忽略标题单元格(A1):
=INDEX(A2:A,COUNT(A2:A))
=MAX(A2:A)-A2
Ben Collins是一位Google表格大师,他在自己的网站上提供了许多免费的技巧和课程。他还有一篇关于动态范围名称的免费文章,我已经将其作为我的许多项目的基础。
https://www.benlcollins.com/formula-examples/dynamic-named-ranges/
声明:我推荐Ben的网站并没有任何利益关系。
这是我使用动态范围的一个项目的截图:
单元格D3有一个公式,如上所示,但这是一个数组公式:
=ArrayFormula(MAX(IF(L2s!A2:A1009<>"",ROW(2:1011))))
单元格D4具有以下公式:
="L2s!A2:E"&D3
=ArrayFormula(LOOKUP(2,1/(CELL_RANGE<>""),CELL_RANGE))
只需将您的单元格范围放在CELL_RANGE
中。