我在G列中有一个具有一些值的电子表格。两者之间有些单元格,我需要将最后一个值从该列中获取到另一个单元格。

就像是:

=LAST(G2:G9999)

除了那个 LAST 不是功能。

有帮助吗?

解决方案

因此,该解决方案将字符串作为其参数。它发现表格中有多少行。它在指定的列中获取所有值。它从末端到开始循环,直到找到一个不是空字符串的值。最后,它重新调整了值。

脚本:

function lastValue(column) {
  var lastRow = SpreadsheetApp.getActiveSheet().getMaxRows();
  var values = SpreadsheetApp.getActiveSheet().getRange(column + "1:" + column + lastRow).getValues();

  for (; values[lastRow - 1] == "" && lastRow > 0; lastRow--) {}
  return values[lastRow - 1];
}

用法:

=lastValue("G")

编辑:

响应评论,要求自动更新功能:

我能找到的最好的方法是将其与上述代码一起使用:

function onEdit(event) {
  SpreadsheetApp.getActiveSheet().getRange("A1").setValue(lastValue("G"));
}

不再需要在单元格中使用该功能 用法 条款。相反,您正在硬编码要更新的单元格和要跟踪的列。可能有一种更雄辩的方法来实施此功能(希望不是硬编码的方法),但这是我现在能找到的最好的方法。

请注意,如果您在单元格中使用该函数如前所述,它将在重新加载时进行更新。也许有一种方法可以陷入困境 onEdit() 并强制细胞功能更新。我只是在文档中找不到它。

其他提示

类似的答案 卡利加里的答案, ,但是我们可以通过指定完整的列范围来整理它:

=INDEX(G2:G, COUNT(G2:G))

实际上,我在这里找到了一个简单的解决方案:

http://www.google.com/support/forum/p/google+docs/thread?tid=20f1741a2e6663bca&hl=en

看起来像这样:

=FILTER( A10:A100 , ROW(A10:A100) =MAX( FILTER( ArrayFormula(ROW(A10:A100)) , NOT(ISBLANK(A10:A100)))))

目前尚未实现last()函数,以便在范围内选择最后一个单元格。但是,按照您的示例:

=LAST(G2:G9999)

我们能够使用几个功能获得最后一个单元格 指数()数数() 这样:

=INDEX(G2:G; COUNT(G2:G))

有一个 现场示例 在我发现(并解决)相同问题的spreedsheet上 Orzamentos, , 细胞 I5)。请注意,它甚至可以完美地参考文档中的其他床单。

概括:

=INDEX( FILTER( G2:G , NOT(ISBLANK(G2:G))) , COUNTA(G2:G) )

细节:

我已经浏览并尝试了几个答案,这是我发现的:最简单的解决方案(请参阅 dohmoose'答案)如果没有空白,则有效:

=INDEX(G2:G; COUNT(G2:G))

如果您有空白,则失败。

您可以通过更改来处理一个空白 COUNTCOUNTA (看 USER3280071的答案):

=INDEX(G2:G; COUNTA(G2:G))

但是,对于某些毛坯组合,这将失败。 ((1 blank 1 blank 1 我失败了。)

以下代码有效(请参阅 纳德的答案杰森的评论):

=INDEX( FILTER( G2:G , NOT(ISBLANK(G2:G))) , ROWS( FILTER( G2:G , NOT(ISBLANK(G2:G)) ) ) )

但是它需要考虑您是否要使用 COLUMNS 或者 ROWS 对于给定的范围。

但是,如果 COLUMNS 被替换 COUNT 我似乎得到了可靠,防空的实施 LAST:

=INDEX( FILTER( G2:G , NOT(ISBLANK(G2:G))) , COUNT( FILTER( G2:G , NOT(ISBLANK(G2:G)) ) ) ) 

从那以后 COUNTA 是否内置过滤器,我们可以进一步简化

=INDEX( FILTER( G2:G , NOT(ISBLANK(G2:G))) , COUNTA(G2:G) )

这有点简单,正确。而且您不必担心是计算行还是列。与脚本解决方案不同,它会自动更新电子表格的更改。

如果您想连续获得最后一个值,只需更改数据范围:

=INDEX( FILTER( A2:2 , NOT(ISBLANK(A2:2))) , COUNTA(A2:2) )

为了从需要使用counta的文本值列返回最后一个值,因此您需要此公式:

=INDEX(G2:G; COUNTA(G2:G))

尝试这个:=INDIRECT("B"&arrayformula(max((B3:B<>"")*row(B3:B))))

假设您正在寻找最后值的列是B。

是的,它可以与空白一起使用。

看起来Google Apps脚本现在支持范围作为函数参数。该解决方案接受一个范围:

// Returns row number with the last non-blank value in a column, or the first row
//   number if all are blank.
// Example: =rowWithLastValue(a2:a, 2)
// Arguments
//   range: Spreadsheet range.
//   firstRow: Row number of first row. It would be nice to pull this out of
//     the range parameter, but the information is not available.
function rowWithLastValue(range, firstRow) {
  // range is passed as an array of values from the indicated spreadsheet cells.
  for (var i = range.length - 1;  i >= 0;  -- i) {
    if (range[i] != "")  return i + firstRow;
  }
  return firstRow;
}

另请参阅Google Apps脚本帮助论坛中的讨论: 我如何强制公式重新计算?

我看了以前的答案,他们似乎正在努力工作。也许脚本支持完全得到了改善。我认为该功能是这样表示的:

function lastValue(myRange) {
    lastRow = myRange.length;
    for (; myRange[lastRow - 1] == "" && lastRow > 0; lastRow--)
    { /*nothing to do*/ }
    return myRange[lastRow - 1];
}

在我的电子表格中,我然后使用:

= lastValue(E17:E999)

在该函数中,我得到一个值的数组,每个引用单元格一个值,这只是从数组的末端向后迭代,直到它找到非空值或运行元素。在将数据传递给函数之前,应解释表参考。也不足以处理多维。这个问题确实要求单列中的最后一个单元格,因此似乎合适。如果您也用完数据,它可能会死亡。

您的里程可能会有所不同,但这对我有用。

function lastRow(column){
  var sheet = SpreadsheetApp.getActiveSpreadsheet();
  var lastRow = sheet.getLastRow();
  var lastRowRange=sheet.getRange(column+startRow);
  return lastRowRange.getValue();
}

没有硬编码。

这个对我有用:

=INDEX(I:I;MAX((I:I<>"")*(ROW(I:I))))

这获得了最后一个值并处理空值:

=INDEX(  FILTER( H:H ; NOT(ISBLANK(H:H))) ; ROWS( FILTER( H:H ; NOT(ISBLANK(H:H)) ) ) )

在带有空白的列中,您可以获得最后一个值

=+sort(G:G,row(G:G)*(G:G<>""),)

答案

$ =INDEX(G2:G; COUNT(G2:G))

在libreoffice中无法正常工作。但是,随着较小的变化,它可以很好地工作。

$ =INDEX(G2:G100000; COUNT(G2:G100000))

仅当真实范围小于 (G2:G10000)

用严格的主题答案回答原始问题是可以接受的:)您可以在电子表格中写一个公式来做到这一点。也许丑陋?但是在电子表格的正常操作中有效。

=indirect("R"&ArrayFormula(max((G:G<>"")*row(G:G)))&"C"&7)


(G:G<>"") gives an array of true false values representing non-empty/empty cells
(G:G<>"")*row(G:G) gives an array of row numbers with zeros where cell is empty
max((G:G<>"")*row(G:G)) is the last non-empty cell in G

这是针对脚本区域中一系列问题的想法,可以通过数组公式可靠地交付,这些公式经常工作 相似的 Excel和OpenOffice的时尚。

function getDashboardSheet(spreadsheet) {
  var sheetName = 'Name';
  return spreadsheet.getSheetByName(sheetName);
}
      var spreadsheet = SpreadsheetApp.openByUrl(SPREADSHEET_URL);  
      var dashboardSheet = getDashboardSheet(spreadsheet);
      Logger.log('see:'+dashboardSheet.getLastRow());

我正在玩@Tinfini给出的代码,并认为人们可能会从我认为是一个更优雅的解决方案中受益(请注意,当他创建原始答案时,我认为脚本的工作方式并不相同)...

//Note that this function assumes a single column of values, it will 
//not  function properly if given a multi-dimensional array (if the 
//cells that are captured are not in a single row).

function LastInRange(values) 
{
  for (index = values.length - 1; values[index] == "" && index > 0; index--) {}
  return String(values[index]);
}

在用法中,它看起来像这样:

=LastInRange(D2:D)

关于 @jon_schneider的评论,如果列有空白单元格 counta()

=INDEX(G2:G; COUNT**A**(G2:G))

我发现另一种方式可能会帮助您

=INDEX( SORT( A5:D ; 1 ; FALSE) ; 1 ) - 将返回最后一行

来自Anab的更多信息:https://groups.google.com/forum/?fromgroups=# !! topic/how-to-documents/if0_fgvinmi

发现了一个轻微的变化,可以从表底部消除空白。 = index(g2:g,countif(g2:g,“ <>”))

我很惊讶以前没有人给出这个答案。但这应该是最短的,甚至在Excel中起作用:

=ARRAYFORMULA(LOOKUP(2,1/(G2:G<>""),G2:G))

G2:G<>"" 创建1/true(1)和1/false(0)的数组。自从 LOOKUP 做一个自上而下的方法来查找 2 而且由于它永远找不到2,所以它到了最后一个非空白行,并给出了它的位置。

正如其他人可能提到的另一种方法是:

=INDEX(G2:G,MAX((ISBLANK(G2:G)-1)*-ROW(G2:G))-1)

找到 MAXimum ROW 非空白行并将其喂给 INDEX

在零空白中断数组中,使用 INDIRECT RC 符号 COUNTBLANK 是另一个选择。如果V4:V6被占领,那么,

V18:

=INDIRECT("R[-"&COUNTBLANK(V4:V17)+1&"]C",0)

将给出V6的位置。

要从列获取最后一个值,您也可以使用 MAX 功能 IF 功能

=ARRAYFORMULA(INDIRECT("G"&MAX(IF(G:G<>"", ROW(G:G), )), 4)))
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top