获取Google表格中列中的最后一个非空单元格

时间:2011-11-14 00:34:56

标签: google-sheets worksheet-function google-sheets-formula

我使用以下功能

=DAYS360(A2, A35)

计算我的专栏中两个日期之间的差异。但是,该列正在不断扩展,我现在必须在更新电子表格时手动更改“A35”。

有没有办法(在Google表格中)找到此列中的最后一个非空单元格,然后在上面的函数中动态设置该参数?

17 个答案:

答案 0 :(得分:122)

可能有一种更有说服力的方式,但这是我提出的方式:

查找列中最后一个填充单元格的函数是:

=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 ) ) ) ) ))

答案 1 :(得分:63)

要查找最后一个非空单元格,您可以使用INDEXMATCH这样的函数:

=DAYS360(A2; INDEX(A:A; MATCH(99^99;A:A; 1)))

我认为这会更快更容易。

答案 2 :(得分:40)

如果A2:A连续包含日期,则INDEX(A2:A,COUNT(A2:A))将返回最后一个日期。最终的公式是

=DAYS360(A2,INDEX(A2:A,COUNT(A2:A)))

答案 3 :(得分:23)

我最喜欢的是:

=INDEX(A2:A,COUNTA(A2:A),1)

因此,对于OP的需求:

=DAYS360(A2,INDEX(A2:A,COUNTA(A2:A),1))

答案 4 :(得分:15)

如果列仅通过连续添加的日期进行扩展 就像我的情况一样 - 我只使用MAX函数来获取最后一个日期。

最终公式为:

=DAYS360(A2; MAX(A2:A)) 

答案 5 :(得分:10)

虽然问题已经得到解答,但有一种雄辩的方法可以做到。

Use just the column name to denote last non-empty row of that column.

例如:

如果您的数据位于A1:A100,并且您希望能够向A列添加更多数据,比如说它可以是A1:A105甚至是A1:A1234,那么您可以使用此功能范围:

A1:A

答案 6 :(得分:6)

获取最后一个值的公式怎么样:

=index(G:G;max((G:G<>"")*row(G:G)))

这将是您原始任务的最终公式:

=DAYS360(G10;index(G:G;max((G:G<>"")*row(G:G))))

假设您的初始日期是G10。

答案 7 :(得分:4)

这是另一个:

=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&lt;&gt;“)*行(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();

此脚本的一个好处是您可以选择是否要包含评估为“”的方程式。如果没有添加参数,则会计算评估为“”的等式,但如果您指定了工作表和列,则现在将对它们进行计数。此外,如果您愿意使用脚本的变体,那么会有很大的灵活性。

可能是矫枉过正,但一切皆有可能。

答案 8 :(得分:4)

这似乎是我发现的最简单的解决方案,它可以检索不断扩展的列中的最后一个值:

=INDEX(A:A,COUNTA(A:A),1)

答案 9 :(得分:3)

这对我有用。获取Google表格中A列的最后一个值:

=index(A:A,max(row(A:A)*(A:A<>"")))

((如果有的话,它还会跳过空白行)

答案 10 :(得分:2)

我走了一条不同的路。既然我知道我将一一添加到行/列中,所以我首先通过对具有数据的字段进行计数来找出最后一行。我将在专栏中进行演示:

=COUNT(A5:A34)

所以,假设返回的是21。A5向下4行,因此我需要从第四行开始获得21的位置。我可以使用inderect来做到这一点,就像这样:

=INDIRECT("A"&COUNT(A5:A34)+4)

它正在查找包含数据的行数,并向我返回一个我用作索引修饰符的数字。

答案 11 :(得分:1)

连续

=ARRAYFORMULA(INDIRECT("A"&MAX(IF(A:A<>"", ROW(A:A), ))))

对于列:

=ARRAYFORMULA(INDIRECT(ADDRESS(1, MAX(IF(1:1<>"", COLUMN(1:1), )), 4)))

答案 12 :(得分:0)

计算A列中的最新日期与A2单元格中的日期之间的差。

=MAX(A2:A)-A2

答案 13 :(得分:0)

要查找最后一个非空行号(允许在它们之间留空格),我在下面使用了该列来搜索列A

=ArrayFormula(IFNA(match(2,1/(A:A<>""))))

答案 14 :(得分:0)

这将给出最后一个单元格的内容:

=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)

答案 15 :(得分:0)

本·柯林斯 (Ben Collins) 是 Google 表格专家,他的网站上有许多免费提示,还提供课程。他有一篇关于动态范围名称的免费文章,我已将其作为我许多项目的基础。

https://www.benlcollins.com/formula-examples/dynamic-named-ranges/

免责声明,引用 Ben 的网站对我没有任何好处。

这是我使用动态范围的一个项目的屏幕截图:

enter image description here

单元格 D3 具有上面显示的这个公式,但这是一个数组公式:

','*6

单元格 D4 具有以下公式:

=ArrayFormula(MAX(IF(L2s!A2:A1009<>"",ROW(2:1011))))

答案 16 :(得分:-1)

业余爱好者的做法是&#34; = CONCATENATE(&#34; A&#34;,COUNTUNIQUE(A1:A9999))&#34;,其中A1是该列中的第一个单元格,和A9999这个专栏比我预期的任何条目更远。根据需要,这个结果A#可以与INDIRECT函数一起使用。