我使用下面的函数
=DAYS360(A2, A35)
计算我列中两个日期的差值。然而,列一直在扩大,我目前必须手动更改“A35”,因为我更新了我的电子表格。
是否有一种方法(在谷歌表)找到该列中的最后一个非空单元格,然后在上面的函数中动态设置该参数?
我使用下面的函数
=DAYS360(A2, A35)
计算我列中两个日期的差值。然而,列一直在扩大,我目前必须手动更改“A35”,因为我更新了我的电子表格。
是否有一种方法(在谷歌表)找到该列中的最后一个非空单元格,然后在上面的函数中动态设置该参数?
当前回答
业余爱好者的方法是“=CONCATENATE(“A”,COUNTUNIQUE(A1:A9999))”,其中A1是列中的第一个单元格,A9999比我期望的任何条目都要低。这个生成的a#可以根据需要与INDIRECT函数一起使用。
其他回答
对于一行:
=ARRAYFORMULA(INDIRECT("A"&MAX(IF(A:A<>"", ROW(A:A), ))))
对于列:
=ARRAYFORMULA(INDIRECT(ADDRESS(1, MAX(IF(1:1<>"", COLUMN(1:1), )), 4)))
这将给出最后一个单元格的内容:
=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)
我最喜欢:
=INDEX(A2:A,COUNTA(A2:A),1)
所以,对于OP的需求:
=DAYS360(A2,INDEX(A2:A,COUNTA(A2:A),1))
虽然这个问题已经有了答案,但还是有一种很有说服力的方法。
Use just the column name to denote last non-empty row of that column.
例如:
如果您的数据在A1:A100中,并且您希望能够向列A添加更多的数据,例如它可以是A1:A105,甚至稍后可以是A1:A1234,您可以使用这个范围:
A1:A
因此,为了获得范围内的最后一个非空值,我们将使用两个函数:
COUNTA 指数
答案是=INDEX(B3:B,COUNTA(B3:B))。
下面是解释:
COUNTA(range):返回一个范围内的值的数量,我们可以使用它来获得行数。
INDEX(range, row, col):返回由行和列偏移量指定的单元格内容。如果省略该列,则返回整行。
例子:
INDEX(A1:C5,1,1) = A1
INDEX(A1:C5,1) = A1,B1,C1 # Whole row since the column is not specified
INDEX(A1:C5,1,2) = B1
INDEX(A1:C5,1,3) = C1
INDEX(A1:C5,2,1) = A2
INDEX(A1:C5,2,2) = B2
INDEX(A1:C5,2,3) = C2
INDEX(A1:C5,3,1) = A3
INDEX(A1:C5,3,2) = B3
INDEX(A1:C5,3,3) = C3
对于上图,我们的范围是B3:B。因此,我们将首先通过COUNTA(B3:B)计算在B3:B范围内有多少个值。在左边,它将产生8,因为有8个值,而在右边将产生9。我们还知道最后一个值在B3:B范围的第一列,所以INDEX的col参数必须是1,行参数应该是COUNTA(B3:B)。
PS:请给@bloodymurderlive的回答投票,因为是他先写的,我只是在这里解释一下。
通过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))
上面的解决方案是依赖于“连续”的日期——这是否意味着“没有空白”或“没有缺失日期”我不确定——但这两种规定都是不必要的。)