Answers:
可能有一种更雄辩的方法,但这是我想出的方法:
查找列中最后一个填充的单元格的功能是:
=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 ) ) ) ) ))
=INDEX(FILTER(A1:A,NOT(ISBLANK(A1:A))),COUNTA(A1:A))
(Doug Bradshaw)提出的略有简化的答案(也可以解决空白问题):(可以更改起始行A1)完整说明:stackoverflow.com/a/27623407/539149
=DAYS360(A2;VLOOKUP(99^99;A:A;1))
如果A2:A连续包含日期,则INDEX(A2:A,COUNT(A2:A))将返回最后一个日期。最终公式是
=DAYS360(A2,INDEX(A2:A,COUNT(A2:A)))
尽管问题已经回答,但是有一种雄辩的方法可以解决。
Use just the column name to denote last non-empty row of that column.
例如:
如果您的数据在其中,A1:A100
并且您希望能够向A列添加更多数据,比如说可以A1:A105
,甚至可以A1:A1234
以后使用,则可以使用以下范围:
A1:A
因此,要获得一个范围内的最后一个非空值,我们将使用2个函数:
答案是=INDEX(B3:B,COUNTA(B3:B))
。
这里是解释:
COUNTA(range)
返回范围内的值数,我们可以使用它来获取行数。
INDEX(range, row, col)
返回位于row
和的范围内的值col
(col=1
如果未指定)
例子:
INDEX(A1:C5,1,1) = A1
INDEX(A1:C5,1) = A1 # implicitly states that col = 1
INDEX(A1:C5,1,2) = A2
INDEX(A1:C5,2,1) = B1
INDEX(A1:C5,2,2) = B2
INDEX(A1:C5,3,1) = C1
INDEX(A1:C5,3,2) = C2
对于上面的图片,我们的范围将是B3:B
。因此,我们将指望有多少值范围在那里B3:B
的COUNTA(B3:B)
第一。由于左侧8
有8个值,因此它将9
在左侧产生,而在右侧将产生。我们还知道最后一个值在范围的第一列中,B3:B
因此的col
参数INDEX
必须为1,row
参数应该为COUNTA(B3:B)
。
PS:请给予好评@ bloodymurderlive的答案,因为他第一次写的,我只是解释在这里。
A1:A
中查找最后一个非空单元格并没有给我在A 列中最后一个非空单元格的值
这是另一个:
=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 <>“”“)* row(G:G))的方程式非常相似,但是如果您要这样做,则可以更轻松地提取行号。
另外,如果您想在自己的工作表上放置脚本,则可以在计划中做很多事来简化自己的工作。这是脚本:
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();
该脚本的一个好处是,您可以选择是否要包含计算结果为“”的方程式。如果未添加任何参数,将计算计算为“”的方程式,但是如果指定工作表和列,则现在将对其进行计数。另外,如果您愿意使用脚本的变体,那么它具有很大的灵活性。
可能过大了,但是所有可能。
我走了一条不同的路线。因为我知道我将一个一行一个地添加到某行/列中,所以我首先通过对具有数据的字段进行计数来找出最后一行。我将在专栏中进行演示:
=COUNT(A5:A34)
因此,假设返回的21。A5向下4行,因此我需要从第四行开始获得21的位置。我可以使用inderect来做到这一点,就像这样:
=INDIRECT("A"&COUNT(A5:A34)+4)
它正在查找包含数据的行数,并向我返回一个我用作索引修饰符的数字。
这将给出最后一个单元格的内容:
=indirect("A"&max(ARRAYFORMULA(row(a:a)*--(a:a<>""))))
这将给出最后一个单元的地址:
="A"&max(ARRAYFORMULA(row(a:a)*--(a:a<>"")))
这将给出最后一个单元格的行:
=max(ARRAYFORMULA(row(a:a)*--(a:a<>"")))
也许您更喜欢脚本。这个脚本比其他人在上面发布的脚本短得多:
转到脚本编辑器并保存以下脚本:
function getLastRow(range){
while(range.length>0 && range[range.length-1][0]=='') range.pop();
return range.length;
}
完成一项操作,您只需在单元格中输入以下内容:
=getLastRow(A:A)
业余人员执行此操作的方式是“ = CONCATENATE(“ A”,COUNTUNIQUE(A1:A9999))“,其中A1是列中的第一个单元格,而A9999在该列的最下方,比我期望的任何条目都要远。根据需要,此结果A#可以与INDIRECT函数一起使用。