假设我有一个长的、无序的、逐渐增长的列,我从中搜索偶数。
=filter(A1:A,ISEVEN(A1:A)=TRUE)
现在我想反转这个结果,以便 A 列中的最后一个偶数在结果中首先列出。许多示例使用辅助列或
row
函数,但这似乎不是一个选项,因为在开始之前您不知道此数组中有多少个偶数元素。即使我使用 rows
单独计算,我似乎也无法弄清楚。似乎应该有一种相当简单的方法来“反转”数组,对吗?
如果您愿意深入研究 Apps 脚本(扩展 > Apps 脚本),您可以使用 JavaScript
Array.prototype.reverse()
函数。
将其粘贴到您的 Apps 脚本代码中:
/**
* Reverses range
*
* @param {Array} range The range of cells
* @return The input range reversed
* @customfunction
*/
function REVERSE(range) {
return range.reverse();
}
然后在单元格中使用公式:
=REVERSE(A1:A)
这种方法的一个优点是,您可以拥有一个紧凑且可重用的函数,可以更轻松地嵌套在其他公式中。 但是,我还没有进行任何测试来查看该解决方案在大型工作表中与更传统的公式相比的性能影响,因此,如果您有大量数据,您可能需要检查并看看哪种方法对您来说更有效。
试试这个:
=QUERY(FILTER({A:A,ROW(A:A)},ISNUMBER(A:A),ISEVEN(A:A)),"Select Col1 Order By Col2 Desc")
这是一个老问题,但也是一个非常常见的问题,我还没有在 SO 或其他地方看到任何我喜欢的答案。这当然可能是因为我的搜索不够勤奋。
创建一个名为
REVERSE_COLUMN
的命名函数,并按如下方式定义它:
=SORT(FILTER(col,NOT(ISBLANK(col))), SEQUENCE(counta(col)),FALSE)
如果您以前没有这样做过,您可以在数据 | 找到它。命名函数 |添加新功能。它看起来像这样:
然后你就可以像这样调用该函数了
=REVERSE_COLUMN(A1:A10)
。
已知问题,就我的目的而言不值得修复:
如果传递的是行而不是列,该函数将发出错误。如果这很麻烦,请定义第二个函数
REVERSE_ROW
,如下所示:
=Transpose(SORT(Transpose(FILTER(row,NOT(ISBLANK(row)))), SEQUENCE(counta(row)), FALSE))
它将把数据中的任何空单元格挤出返回的范围。但具有单个空白字符(看起来相同)的单元格的行为更像人们所期望的。这是使用函数
COUNTA()
查找数据长度的结果。
代码只能处理单列(或行)。