我使用下面的函数
=DAYS360(A2, A35)
计算我列中两个日期的差值。然而,列一直在扩大,我目前必须手动更改“A35”,因为我更新了我的电子表格。
是否有一种方法(在谷歌表)找到该列中的最后一个非空单元格,然后在上面的函数中动态设置该参数?
我使用下面的函数
=DAYS360(A2, A35)
计算我列中两个日期的差值。然而,列一直在扩大,我目前必须手动更改“A35”,因为我更新了我的电子表格。
是否有一种方法(在谷歌表)找到该列中的最后一个非空单元格,然后在上面的函数中动态设置该参数?
当前回答
要找到最后一个非空单元格,可以使用INDEX和MATCH函数,如下所示:
=DAYS360(A2; INDEX(A:A; MATCH(99^99;A:A; 1)))
我觉得这样更快更简单。
其他回答
业余爱好者的方法是“=CONCATENATE(“A”,COUNTUNIQUE(A1:A9999))”,其中A1是列中的第一个单元格,A9999比我期望的任何条目都要低。这个生成的a#可以根据需要与INDIRECT函数一起使用。
也许还有更有说服力的方法,但这是我想到的方法:
查找列中最后一个填充单元格的函数是:
=INDEX( FILTER( A:A ; NOT( ISBLANK( A:A ) ) ) ; ROWS( FILTER( A:A ; NOT( ISBLANK( A:A ) ) ) ) )
所以如果你把它和你当前的函数结合起来,它会是这样的:
=DAYS360(A2,INDEX( FILTER( A:A ; NOT( ISBLANK( A:A ) ) ) ; ROWS( FILTER( A:A ; NOT( ISBLANK( A:A ) ) ) ) ))
Ben Collins是谷歌床单专家,他的网站上有很多免费的建议,还提供课程。他有一篇关于动态范围名称的免费文章,我在许多项目中都使用了这篇文章作为基础。
https://www.benlcollins.com/formula-examples/dynamic-named-ranges/
免责声明,我没有获得任何参考本的网站。
这是我使用动态范围的一个项目的截图:
单元格D3的公式如上所示,但这是一个数组公式:
=ArrayFormula(MAX(IF(L2s!A2:A1009<>"",ROW(2:1011))))
单元格D4的公式如下:
="L2s!A2:E"&D3
通过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)))
(事实上,我怀疑OPs日期值是单调的(即使中间有空格),他可以侥幸逃脱
=DAYS360(A2, MAX(A2:A))
上面的解决方案是依赖于“连续”的日期——这是否意味着“没有空白”或“没有缺失日期”我不确定——但这两种规定都是不必要的。)
如果列仅按连续添加的日期展开 就像在我的情况下-我只是使用MAX函数来获取最后的日期。
最终公式为:
=DAYS360(A2; MAX(A2:A))