我使用下面的函数
=DAYS360(A2, A35)
计算我列中两个日期的差值。然而,列一直在扩大,我目前必须手动更改“A35”,因为我更新了我的电子表格。
是否有一种方法(在谷歌表)找到该列中的最后一个非空单元格,然后在上面的函数中动态设置该参数?
我使用下面的函数
=DAYS360(A2, A35)
计算我列中两个日期的差值。然而,列一直在扩大,我目前必须手动更改“A35”,因为我更新了我的电子表格。
是否有一种方法(在谷歌表)找到该列中的最后一个非空单元格,然后在上面的函数中动态设置该参数?
当前回答
这将给出最后一个单元格的内容:
=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)
其他回答
通过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))
上面的解决方案是依赖于“连续”的日期——这是否意味着“没有空白”或“没有缺失日期”我不确定——但这两种规定都是不必要的。)
这对我很有用。获取谷歌表中A列的最后一个值:
=index(A:A,max(row(A:A)*(A:A<>"")))
(如果有空白行,它也会跳过空白行)
我最喜欢:
=INDEX(A2:A,COUNTA(A2:A),1)
所以,对于OP的需求:
=DAYS360(A2,INDEX(A2:A,COUNTA(A2:A),1))
如果列仅按连续添加的日期展开 就像在我的情况下-我只是使用MAX函数来获取最后的日期。
最终公式为:
=DAYS360(A2; MAX(A2:A))
我走了一条不同的路。因为我知道我将逐个向行/列添加一些东西,所以我通过首先计算有数据的字段来找出最后一行。我将用一列来演示这一点:
=COUNT(A5:A34)
假设它返回了21。A5在第4行,所以我需要从第4行开始算第21个位置。我可以用间接的方法来做到这一点,像这样:
=INDIRECT("A"&COUNT(A5:A34)+4)
它正在查找数据行的数量,并返回一个我用作索引修饰符的数字。