select列的最后一个值

我有一个电子表格,在列G中有一些值。一些单元格之间是空的,我需要从该列的最后一个值到另一个单元格。

就像是:

=LAST(G2:G9999) 

除了LAST不是一个函数。

所以这个解决scheme以一个string作为参数。 它会查找工作表中有多less行。 它获取指定列中的所有值。 它循环遍历从开始到结束的值,直到find一个不是空string的值。 最后它重新调整了价值。

脚本:

 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的评论:

我可以find的最好的方法是用上面的代码:

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

不再需要像使用部分状态那样在单元格中使用该function。 相反,您要对要更新的单元格和要跟踪的列进行硬编码。 有可能有一个更有说服力的方式来实现这个(希望那个不是硬编码的),但这是我现在能find的最好的方法。

请注意,如果您像前面所述的那样使用单元格中的函数,它将在重新加载时更新。 也许有一种方法钩入onEdit()并强制更新单元格函数。 我只是无法在文档中find它。

与caligari的答案类似的答案,但我们可以通过指定完整的列范围来整理它

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

其实我在这里find了一个更简单的解决scheme:

http://www.google.com/support/forum/p/Google+Docs/thread?tid=20f1741a2e663bca&hl=en

它看起来像这样:

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

目前没有执行LAST()函数来select范围内的最后一个单元格。 不过,按照你的例子:

 =LAST(G2:G9999) 

我们可以通过这种方式使用INDEX()COUNT()函数来获得最后一个单元格:

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

在spreedsheet中有一个实例 ,我在这里发现(并解决了)同样的问题(表单元“Orzamentos”,单元格I5)。 请注意,它甚至可以引用文档中的其他表单。

概要:

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

细节:

我查了一下,并尝试了几个答案,这里是我发现的:最简单的解决scheme(请参阅Dohmoose)如果没有空白,

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

如果你有空白,它会失败。

您只需从“COUNT”更改为“COUNTA”即可处理一个空白(请参阅user3280071):

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

但是,对于一些空白组合,这将失败。 (“1空白1空白1”失败了。)

下面的代码工作(见纳德和杰森):

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

但它需要考虑是否要在给定范围内使用“COLUMNS”或“ROWS”。

但是,如果“COLUMNS”被replace为“COUNT”,我似乎得到了LAST的可靠,

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

由于“COUNTA”内置了filter,我们可以进一步简化使用

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

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

如果你想获得连续的最后一个值,只需要改变数据范围:

 =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脚本现在支持将范围作为function参数。 该解决scheme接受一个范围:

 // 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是这样expression的:

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

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

 = lastValue(E17:E999) 

在函数中,我得到一个数组的数组,每个被引用的单元格,这只是从数组的末尾向后迭代,直到它find一个非空值或用尽元素。 在将数据传递给函数之前,应该先解释图纸引用。 不足以处理多维度。 这个问题确实要求在单个列中的最后一个单元格,所以它似乎适合。 如果你的数据用完了,它可能会死亡。

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

对于那些仍然在寻找,这将获得最后一个值,并处理空值:

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

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

在一个空白栏中,你可以得到最后一个值

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

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

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

答案

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

在LibreOffice中无法正常工作。 但是,一个小的变化,它完美的作品。

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

它只有在真实范围小于(G2:G10000)

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

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

来自anab的更多信息: https ://groups.google.com/forum/ ? fromgroups = #!topic/How-to-Documents/if0_fGVINmI

关于@ Jon_Schneider的评论,如果该列有空白单元格,只需使用COUNTA()

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

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

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

我很惊讶没有人曾经给过这个答案。 但是这应该是最短的,甚至可以在excel中工作:

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

G2:G<>""创build1 / true(1)和1 / false(0)的数组。 由于LOOKUP自上而下地查找2并且由于它永远不会find2,所以它出现在最后一个非空白行,并给出了它的位置。

正如其他人可能提到的那样,另一种做法是:

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

查找非空白行的最大行数并将其提供给INDEX

在零空白的中断arrays中,使用带有COUNTBLANK INDIRECT RC表示法是另一种select。 如果V4:V6被条目占用,那么,

V18

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

会给V6的位置。