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的位置。