我用下面的函数获取一列中的最后一个非空单元格在谷歌表
=DAYS360(A2, A35)
计算在我的专栏两个日期之间的差异。然而,这个专栏不断扩展,我现在必须在更新电子表格时手动更改'A35'。
有没有办法(在Google表格中)找到此列中最后一个非空单元格,然后在上述函数中动态设置该参数?
我用下面的函数获取一列中的最后一个非空单元格在谷歌表
=DAYS360(A2, A35)
计算在我的专栏两个日期之间的差异。然而,这个专栏不断扩展,我现在必须在更新电子表格时手动更改'A35'。
有没有办法(在Google表格中)找到此列中最后一个非空单元格,然后在上述函数中动态设置该参数?
有可能是一个更雄辩的方式,但是这是我想出了办法:
功能找到一列中的最后一个人口稠密的细胞是:
=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))))))
在这种情况下,我并不是很在乎口才,只要它工作起来就像一个魅力(它的确如此) - 非常感谢Sam! – MichaelS
我最终与空字符串进行比较,而不是使用ISBLANK,它处理一些空单元格(例如空白返回的公式,例如=“”,因为非空白。因此:'= index(filter(A:A,A: A <>“”),rows(filter(A:A,A:A <>“”)))' – circlepi314
这更简单了,我测试过了,效果很好 – Ciaran
你的方法似乎只找到最后一个单元格if该值是一个数字,我的方法将找到最后一行,如果它也是字符串类型的。 最初的问题是关于日期,所以这将工作,但看到作为文章仍然受到关注,值得注意的区别。这一切都取决于你的需求,如果你只是需要一个号码,我推荐这种方式。 –
这是另一个变种http://stackoverflow.com/a/13871043/44620 –
什么这个公式得到的最后一个值:
=index(G:G;max((G:G<>"")*row(G:G)))
,这将是您的原始任务的最终公式:
=DAYS360(G10;index(G:G;max((G:G<>"")*row(G:G))))
假设您最初的日期是G10。
如果A2:A包含连续的日期,那么INDEX(A2:A,COUNT(A2:A))将返回最后一个日期。最终的公式是
=DAYS360(A2,INDEX(A2:A,COUNT(A2:A)))
我个人认为日应该是被接受的答案。简洁而简单。 – SwampThingTom
这是最准确的答案。虽然@Poul上面的答案适用于这种情况,但我想用实际数据找到实际的最后一个单元格,并且无论数据是否按顺序都可以得到它。 –
业余做它是这样的“= CONCATENATE(” A“ COUNTUNIQUE(A1:A9999))”,其中A1是在列中的第一单元,和A9999是越往下该专栏比我曾预料会有任何条目。由此产生的A#可以根据需要与INDIRECT功能一起使用。
对不起。这仅适用于列中的所有条目都是唯一的。 –
虽然我很欣赏你对StackOverflow,Conrad的贡献,但你的答案有一些问题。首先,他没有指定日期是唯一的,所以你应该使用count()而不是countunique()。其次,使用indirect()和concatenate可以复制index()的现有功能,如其他答案中所见。第三,而不是A1:A9999,为什么不使用A1:A? –
虽然问题已经回答了,有一个雄辩的方式来做到这一点。
Use just the column name to denote last non-empty row of that column.
例如:
如果你的数据在A1:A100
并希望能够更多的数据添加到A列,说这可能是A1:A105
甚至A1:A1234
以后,你可以使用这个范围:
A1:A
我喜欢这个,但是看到了它有时会返回倒数第二项而不是最后一项的问题。 –
@EricSmalling可能发生的原因是您在所有行的末尾添加了一个换行符,并且在复制粘贴时可能会将其视为非空单元格。你有任何样本电子表格暴露这个问题吗? –
我最喜欢的是:
=INDEX(A2:A,COUNTA(A2:A),1)
因此,对于OP的需要:
=DAYS360(A2,INDEX(A2:A,COUNTA(A2:A),1))
......尽管最后一个日期总是最新的情况下,上面贴出Poul的“MAX”更清晰。 –
最后加上',1'没有意义吗? –
这里的另一个问题:
=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))的公式非常相似,但是如果这是您之后的操作,则可以更轻松地拉出行号。
或者,如果你想在你的工作表上放置一个脚本,你可以使自己容易,如果你打算这么做。下面是scirpt:
=LASTROW()
,或者如果你想:
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("Sheet1","A")
和特定纸张一般的最后一行:
=LASTROW("Sheet1")
然后获得实际的数据,您既可以使用间接的:
=INDIRECT("A"&LASTROW())
,或者你可以在最后两条线(最后两个修改上面的脚本,因为你将不得不把两个片材和柱获得与实际的列中的实际值),并与替换变量如下:
return sheet.getRange(column + final).getValue();
和
return sheet.getRange(column + lastRow).getValue();
此脚本的一个好处是,您可以选择是否要包含评估为“”的方程式。如果未添加任何参数,则评估为“”的方程式将被计算在内,但是如果您指定了一个表格和一列,则它们将被计数。而且,如果您愿意使用脚本的变体,则会有很大的灵活性。
可能过度杀伤,但一切皆有可能。
相似问题:http://stackoverflow.com/questions/4169914/selecting-the-last-value-of-a-column/13356890 –