【问题标题】:How to find nearest non-blank cell above the current cell?如何在当前单元格上方找到最近的非空白单元格?
【发布时间】:2015-10-01 14:49:05
【问题描述】:

我有一列数据,我需要找到之前的非空白单元格。例如,如果我有以下数据:

foo
-
-
-
-
(formula)

其中- 表示一个空白单元格,那么我希望(formula) 单元格找到对包含foo 的单元格的引用,无论它们之间插入了多少个空白单元格。测试列中包含空白单元格的新行可能随时插入公式行和前一个非空白行之间,公式应该能够处理。

理想情况下,我希望能够将公式放在一行的任何单元格中,以便在 A 列中找到该行上方最近的非空白单元格。

一张图片来进一步说明我的需求(也许可以引出其他方法来做我想做的事):

【问题讨论】:

    标签: google-sheets google-sheets-formula


    【解决方案1】:

    使用 FILTER, ROW, MAX + ISBLANK() 公式获取,

    =FILTER(B1:B9, ROW(B1:B9)=MAX(FILTER(ARRAYFORMULA(ROW(B1:B9)), NOT(ISBLANK(B1:B9)))))
    

    这基本上可以满足您的需求。更准确地说,下面的公式是 “将其粘贴到任何地方” 类型,只需将下面的公式粘贴到任何单元格上,它就会为您提供最后一个非空白单元格值。

    =FILTER( INDIRECT(CHAR(64+COLUMN())&"1:"&CHAR(64+COLUMN())&ROW()-1) , ROW(INDIRECT(CHAR(64+COLUMN())&"1:"&CHAR(64+COLUMN())&ROW()-1))=MAX( FILTER( ARRAYFORMULA(ROW(INDIRECT(CHAR(64+COLUMN())&"1:"&CHAR(64+COLUMN())&ROW()-1))) , NOT(ISBLANK(INDIRECT(CHAR(64+COLUMN())&"1:"&CHAR(64+COLUMN())&ROW()-1))))))
    

    【讨论】:

    • 哇...这似乎工作正常。我对电子表格的理解非常基本,但我是一名开发人员,从事我的日常工作,因此使用表格文档解构您的答案以供参考应该对我有很大帮助。我接受这个作为我问题的答案。
    • 我有一个问题...我一直在试验代码,我对它有一点了解。我不明白的一件事是过滤器的条件 - 具体来说, ROW(B1:B9) 始终为 1,据我所知。实际上, ROW(BX:BY) 似乎总是计算为 X - 也就是说,范围的 ROW() 函数似乎总是返回起始行号。外部 FILTER() 条件的 LHS 是做什么的?
    • 啊...我想我明白了。 FILTER() 条件中的“ROW(B1:B9)=MAX(...)”是一个隐式 ARRAYFORMULA()。
    • 那个“粘贴到任何地方”的公式就像魔术一样。这太棒了。
    【解决方案2】:

    如果公式要进入A9,请尝试:

    =index($A:$A,match("zzz",$A$1:$A9))
    

    【讨论】:

    • 有趣。使用 MATCH 就像列表已排序一样。当它没有找到排序的搜索匹配时,将返回最后一个索引,其值小于搜索,'zzz' 应该是最后一个非黑色索引。依赖 MATCH 忽略空白单元格。
    • 这是一个更通用的版本,它使用更少的绝对 ("$") 引用。将此粘贴到您的 A2 单元格中。然后,因为公式使用相对引用,所以可以将 A2 单元格复制/粘贴到任何大于 1 的行中的任何单元格中,并且它应该可以工作。 =index(A$1:A1,match("zzz",A$1:A1)) 这个公式的计算速度肯定比使用过滤器、间接、字符等的其他答案的公式更快吗?此外,如果您只需要查找一定数量的行,则不要使用绝对引用“$1”。使用仅在您需要的位置上的相对引用(不带 $ 符号)。
    猜你喜欢
    • 2013-07-30
    • 1970-01-01
    • 2013-08-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-01
    相关资源
    最近更新 更多