Excel 公式从一组不相交的单元格中获取最后一个非空单元格值

Reg*_*gus 8 excel excel-2007 excel-formula

有很多基于公式的解决方案可用于从 Excel 中的列、行或连续范围中查找最后一个非空单元格值,例如,对于列,最流行的是=LOOKUP(2,1/(A:A<>""),A:A)=LOOKUP(2,1/(NOT(ISBLANK(A:A))),A:A)。这很好,但它只适用于连续范围。然而,有时,您需要对断开连接的单元格列表或单元格范围而不是单个连续范围执行相同的操作。因此,如果有一个假设的函数FINDLASTNONBLANK(),它的调用将如下所示:

对于任意长的单细胞列表

=FINDLASTNONBLANK(A1, D1, F1)
=FINDLASTNONBLANK(A1, D1, F1, X1)
Run Code Online (Sandbox Code Playgroud)

对于任意长的范围列表

=FINDLASTNONBLANK(A1:A4, A10:A15)
=FINDLASTNONBLANK(A1:A4, A10:A15, A20:A25)
Run Code Online (Sandbox Code Playgroud)

显然,没有这样的现成公式,所以我想知道是否有办法为此炮制基于公式的解决方案。没有 VBA UDF。

到目前为止,我正在朝着以下方向思考:如果我可以编写一种公式来将断开连接的单元格/范围连接到一个范围/数组中,那么也许我可以使用经典的黑客=LOOKUP(2,1/(A:A<>""),A:A),就像这样(假设假设的公式JOINRANGES()或假设的聚合语法{,}) :

=LOOKUP(2,1/(JOINRANGES(A1:A4,A10:A15)<>""),JOINRANGES(A1:A4,A10:A15))
=LOOKUP(2,1/({A1:A4,A10:A15}<>""),{A1:A4,A10:A15})
Run Code Online (Sandbox Code Playgroud)

那么,Excel 中是否有一种语法可以从我不知道的不相交单元格/范围/数组列表中指定数组?如果有,它应该至少向后兼容 Excel 2007。

我可以将解决方案限制为一维数据源(仅行,仅列),而不必在二维矩阵上工作。事实上,我可以选择仅处理同一(甚至不是列)的不相交数据的解决方案。

Reg*_*gus 1

UPD:(感谢@Pb)不,堆叠 A1:A4:A10:A15 无法按预期工作,Excel 将其简化为 A1:A15,从而使下面列出的解决方案无效。回到绘图板。

原始信息:

我想找到了我正在寻找的语法:

=LOOKUP(2,1/(A1:A4:A10:A15<>""),A1:A4:A10:A15)
Run Code Online (Sandbox Code Playgroud)

要加入不相交的范围,我所需要做的就是继续将它们列为以冒号分隔的范围对。

我假设要使此技巧适用于单个单元格,而不是范围,需要将每个单元格转换为单单元格范围,以防止不相交单元格之间出现不需要的桥接:

=LOOKUP(2,1/(A1:A1:A5:A5:A10:A10<>""),A1:A1:A5:A5:A10:A10)
Run Code Online (Sandbox Code Playgroud)

适用于 Excel 2007。

还有更优雅的解决方案吗?

  • 常量数组 ({1,2,3,4,10,15}) 意味着对偏移量进行硬编码,一旦插入新列或删除现有列,偏移量就会中断。不是最好的。 (2认同)
  • @Pb:谢谢,我查了一下,确实是这样。回到绘图板。 (2认同)