我使用以下功能
=DAYS360(A2, A35)
计算我的专栏中两个日期之间的差异 . 但是,该列正在不断扩展,我现在必须在更新电子表格时手动更改“A35” .
有没有办法(在Google表格中)找到此列中的最后一个非空单元格,然后在上面的函数中动态设置该参数?
可能有一种更有说服力的方式,但这是我提出的方式:
查找列中最后一个填充单元格的函数是:
=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 ) ) ) ) ))
要查找最后一个非空单元格,您可以使用INDEX和MATCH这样的函数:
=DAYS360(A2; INDEX(A:A; MATCH(99^99;A:A; 1)))
我认为这更快更容易 .
如果A2:A连续包含日期,则INDEX(A2:A,COUNT(A2:A))将返回最后日期 . 最后的公式是
=DAYS360(A2,INDEX(A2:A,COUNT(A2:A)))
如果列只是通过连续添加日期扩展,就像我的情况一样 - 我只使用MAX函数来获取最后一个日期 .
最终的公式将是:
=DAYS360(A2; MAX(A2: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:A100
A1:A105
A1:A1234
A1:A
获取最后一个值的公式怎么样:
=index(G:G;max((G:G<>"")*row(G:G)))
这将是您原始任务的最终公式:
=DAYS360(G10;index(G:G;max((G:G<>"")*row(G:G))))
假设您的初始日期是G10 .
这是另一个:
=indirect("A"&max(arrayformula(if(A:A<>"",row(A:A),""))))
最后的等式是这样的:
=DAYS360(A2,indirect("A"&max(arrayformula(if(A:A<>"",row(A:A),"")))))
这里的其他方程式工作,但我喜欢这个,因为它使得行号变得容易,我发现我需要更频繁地做 . 行号就像这样:
=max(arrayformula(if(A:A<>"",row(A:A),"")))
我最初试图找到这个来解决电子表格问题,但找不到任何有用的东西只是给出了最后一个条目的行号,所以希望这对某人有帮助 .
此外,这还有一个额外的好处,即它可以按任何顺序用于任何类型的数据,并且您可以在具有内容的行之间有空白行,并且它不计算具有计算结果为“”的公式的单元格 . 它还可以处理重复的值 . 总而言之,它与在这里使用max((G:G <>“”)*行(G:G))的等式非常相似,但是如果这就是你所追求的,那么可以更容易地拉出行号 .
或者,如果你想在你的工作表上放一个脚本,如果你打算这么做的话,可以让自己很容易 . 这是scirpt:
function lastRow(sheet,column) { var ss = SpreadsheetApp.getActiveSpreadsheet(); if (column == null) { if (sheet != null) { var sheet = ss.getSheetByName(sheet); } else { var sheet = ss.getActiveSheet(); } return sheet.getLastRow(); } else { var sheet = ss.getSheetByName(sheet); var lastRow = sheet.getLastRow(); var array = sheet.getRange(column + 1 + ':' + column + lastRow).getValues(); for (i=0;i<array.length;i++) { if (array[i] != '') { var final = i + 1; } } if (final != null) { return final; } else { return 0; } } }
如果您希望最后一行与您当前正在编辑的工作表相同,则可以在此输入以下内容:
=LASTROW()
或者如果您想要该工作表中特定列的最后一行,或者另一个工作表中的特定列的最后一行,您可以执行以下操作:
=LASTROW("Sheet1","A")
并且对于特定表格的最后一行:
=LASTROW("Sheet1")
然后要获得实际数据,您可以使用间接:
=INDIRECT("A"&LASTROW())
或者您可以在最后两行返回行修改上述脚本(最后两行,因为您必须同时放置工作表和列以从实际列中获取实际值),并使用以下内容替换该变量:
return sheet.getRange(column + final).getValue();
和
return sheet.getRange(column + lastRow).getValue();
此脚本的一个好处是,您可以选择是否要包含评估为“”的方程式 . 如果没有添加参数,则会计算评估为“”的等式,但如果您指定了工作表和列,则现在将对它们进行计数 . 此外,如果您愿意使用脚本的变体,那么会有很大的灵活性 .
可能是矫枉过正,但一切皆有可能 .
业余爱好者的做法是“= CONCATENATE(”A“,COUNTUNIQUE(A1:A9999))”,其中A1是列中的第一个单元格,而A9999比我预期的任何条目都要低一些 . 根据需要,这个结果A#可以与INDIRECT函数一起使用 .
9 回答
可能有一种更有说服力的方式,但这是我提出的方式:
查找列中最后一个填充单元格的函数是:
因此,如果将它与当前函数结合使用,它将如下所示:
要查找最后一个非空单元格,您可以使用INDEX和MATCH这样的函数:
我认为这更快更容易 .
如果A2:A连续包含日期,则INDEX(A2:A,COUNT(A2:A))将返回最后日期 . 最后的公式是
如果列只是通过连续添加日期扩展,就像我的情况一样 - 我只使用MAX函数来获取最后一个日期 .
最终的公式将是:
我最喜欢的是:
因此,对于OP的需求:
虽然问题已经得到解答,但有一种雄辩的方法可以做到 .
例如:
如果您的数据位于
A1:A100
并且您希望能够向A列添加更多数据,例如它可以是A1:A105
甚至A1:A1234
,则可以使用此范围:获取最后一个值的公式怎么样:
这将是您原始任务的最终公式:
假设您的初始日期是G10 .
这是另一个:
最后的等式是这样的:
这里的其他方程式工作,但我喜欢这个,因为它使得行号变得容易,我发现我需要更频繁地做 . 行号就像这样:
我最初试图找到这个来解决电子表格问题,但找不到任何有用的东西只是给出了最后一个条目的行号,所以希望这对某人有帮助 .
此外,这还有一个额外的好处,即它可以按任何顺序用于任何类型的数据,并且您可以在具有内容的行之间有空白行,并且它不计算具有计算结果为“”的公式的单元格 . 它还可以处理重复的值 . 总而言之,它与在这里使用max((G:G <>“”)*行(G:G))的等式非常相似,但是如果这就是你所追求的,那么可以更容易地拉出行号 .
或者,如果你想在你的工作表上放一个脚本,如果你打算这么做的话,可以让自己很容易 . 这是scirpt:
如果您希望最后一行与您当前正在编辑的工作表相同,则可以在此输入以下内容:
或者如果您想要该工作表中特定列的最后一行,或者另一个工作表中的特定列的最后一行,您可以执行以下操作:
并且对于特定表格的最后一行:
然后要获得实际数据,您可以使用间接:
或者您可以在最后两行返回行修改上述脚本(最后两行,因为您必须同时放置工作表和列以从实际列中获取实际值),并使用以下内容替换该变量:
和
此脚本的一个好处是,您可以选择是否要包含评估为“”的方程式 . 如果没有添加参数,则会计算评估为“”的等式,但如果您指定了工作表和列,则现在将对它们进行计数 . 此外,如果您愿意使用脚本的变体,那么会有很大的灵活性 .
可能是矫枉过正,但一切皆有可能 .
业余爱好者的做法是“= CONCATENATE(”A“,COUNTUNIQUE(A1:A9999))”,其中A1是列中的第一个单元格,而A9999比我预期的任何条目都要低一些 . 根据需要,这个结果A#可以与INDIRECT函数一起使用 .