首页 文章

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

提问于
浏览
71

我使用以下功能

=DAYS360(A2, A35)

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

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

9 回答

  • 30

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

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

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

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

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

    我认为这更快更容易 .

  • 6

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

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

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

    最终的公式将是:

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

    我最喜欢的是:

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

    因此,对于OP的需求:

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

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

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

    例如:

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

    A1:A
    
  • -1

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

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

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

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

    假设您的初始日期是G10 .

  • 11

    这是另一个:

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

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

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

  • 1

    业余爱好者的做法是“= CONCATENATE(”A“,COUNTUNIQUE(A1:A9999))”,其中A1是列中的第一个单元格,而A9999比我预期的任何条目都要低一些 . 根据需要,这个结果A#可以与INDIRECT函数一起使用 .

相关问题