复杂答案的简单查询 - 我如何 Select RowA6-Row(last non-blank) for a simple formula

Simple Enquiry with Complex Answer - How do I Select RowA6-Row(last non-blank) for a simple formula

我有很多列,下面都标有很多值,可以是单词或数字

这是当前方程 =INDEX(AK6:AK94,MODE(MATCH(AK6:AK94,AK6:AK94,0))) 我在每列的单元格 5 中都有这个。

每列中值的数量可能会增加或减少。如果我引用整列(直到工作表末尾),空格会影响准确的输出。

如何引用单元格 A6 to Last Non-Blank

计算非空白单元格是否有效,然后使用偏移量移动该行数。 看看这个: MATCH(1,A6:OFFSET(A6,COUNTIF(A6:A600,">0"),)) 在我的简单测试 sheet.

中,偏移量和计数解析为完成 A6:A14

您需要确定列中最后一个非空白单元格所在的行。例如,这个方法取决于中间是否有空白单元格。

两个备选方案是(取自here*):

=SUMPRODUCT(MAX(($AK6:$AK94<>"")*(ROW(AK6:AK94))))
=INDEX(MAX(($AK6:$AK94<>"")*(ROW(AK6:AK94))),0)

然后您可以将此值与 OFFSET 一起使用以获得对目标单元格的引用。所以你的范围将是(使用第二种形式)

A6:OFFSET(AK1,INDEX(MAX(($AK6:$AK94<>"")*(ROW(AK6:AK94))),0)-1,0)

此表达式将嵌入到公式中。

备注:

  1. 您可能需要更改 absolute/relative 引用。
  2. 根据您嵌入表达式的公式,我预见您可能需要使用 Ctrl+Shift+Enter 将公式作为数组公式输入。
  3. *This 旨在获取最后一个非空值而不是对单元格的引用,但发布的一些结果很有用。

一种选择是将公式中的行数增加到您可能需要的行数,并在公式中添加一个额外的 IF 函数来处理空白,例如此版本最多允许 995 行数据

=INDEX(AK6:AK1000,MODE(IF(AK6:AK1000<>"",MATCH(AK6:AK1000,AK6:AK1000,0))))

.....但如果您在该范围内的行数和空白数较少,则仍然有效

使用 CTRL+SHIFT+ENTER

确认

与 sancho.s 给出的 SUMPRODUCT/MAX 相比,有更高效且非易失性的设置可用于确定范围内的最后一个非空白单元格,但前提是该范围内的空白单元格都是 "genuine" 空白,而不是空字符串 "",例如由于这些单元格中的公式。

如果可以保证这一点,那么对于包含混合数据类型(一些文本,一些数字)的范围,您可以使用:

=MAX(MATCH(REPT("z",255),A:A),MATCH(9.9E+307,A:A))

这将比任何测试指定范围内的每个单独单元格是否为空白的解决方案(例如 SUMPRODUCT/MAX 设置)更有效。

更重要的是,上述构造可以在不影响计算速度的情况下引用整个A列,从而无需select限定范围。 (请注意,在 SUMPRODUCT(或任何其他数组公式)中使用相同的范围,即 A:A 根本不是一个好主意,因为这将迫使 Excel 计算超过一百万个单元格单独,导致工作簿性能明显变慢)。

至于形成一个动态范围,我一直感到惊讶的是,互联网上有如此多的资源继续提倡涉及易变函数的设置,例如 OFFSET 和 INDIRECT(我什至看到几个网站为此使用 ADDRESS目的),特别是当有一个非常好的非易失性(实际上,不是完全非易失性,但足够接近)可用的 INDEX 设置时,即:

AK6:INDEX(A:A,LastRow)

根据我在上面发布的公式,LastRow 是定义的名称。

此致