//样品表here
嗨,
我正在使用公式来计算数组N:R。计算完后,我想用非空单元格确定数组的最后一行(空单元格不是空白)。
到目前为止我可以做什么:
返回列的最后一个非空单元格
=INDEX(FILTER(O:O,O:O<>""), ROWS(FILTER(O:O,O:O<>"")))
或过滤条件选择的行(在我的情况下,过滤条件选择为25,而工作表为38)
=ROWS(FILTER(O:O,O:O<>""))
我还不知道怎么做:
欢呼
答案 0 :(得分:1)
此自定义函数将执行此操作。有时,脚本比某些奇怪的公式(IMHO)容易得多。它只会逐行遍历数据,并在找到数据时记下行号,即cell.value() != ""
function findHighestNonEmptyRow(dummyRange){
var sheet = SpreadsheetApp.getActive();
var range = sheet.getRange("N:R");
var valuesRC = range.getValues();
var numRows = range.getNumRows();
var numCols = range.getNumColumns();
var highestNonEmptyRow = 0;
for (var row = 0; row < numRows; row++) {
for (var col = 0; col < numCols; col++) {
if (valuesRC[row][col] != ""){
highestNonEmptyRow = row+1; // +1 to offset loop variable
}
}
}
Logger.log(highestNonEmptyRow);
return highestNonEmptyRow;
}
日志显示正确的值38
。您可以删除Logger.log(highestNonEmptyRow)
;经过测试后排成一行。
我将公式放在测试表的W44
中。...
编辑:由于反馈,所有操作均与预期不符...
var range =
sheet.getRange("N:D");
这行应该是var range =
sheet.getRange("N:R");
我发现Google脚本缓存了custom的结果 公式,并仅返回缓存的值,即使 工作表已更改。这是奇怪的行为,但目的是 减少CPU时间。解决方法是在可能的范围内传递 更改,这将导致函数重新计算。我更新了 公式和被调用的函数是这样的:
=findHighestNonEmptyRow(N2:R42)
嘿,一切正常!
答案 1 :(得分:1)
对于公式化方法,您可以尝试
=max(filter(row(N2:N), MMULT(N(N2:R<>""), transpose(column(N2:R2)^0))>0))