列中最后一个非空单元格

有谁知道在Microsoft Excel中find列中最后一个非空单元格的值的公式?

这既适用于文本和数字,也不在乎是否有空白单元格,即它将返回最后一个非空白单元格。

它需要数组input ,这意味着你键入或粘贴后按Ctrl-Shft-Enter 。下面是列A:

=INDEX(A:A,MAX((A:A<>"")*(ROW(A:A)))) 

使用下面的简单公式要快得多

 =LOOKUP(2,1/(A:A<>""),A:A) 

对于Excel 2003:

 =LOOKUP(2,1/(A1:A65535<>""),A1:A65535) 

它给你以下优点:

  • 不是数组公式
  • 不是不稳定的公式

说明:

  • (A:A<>"")返回数组{TRUE,TRUE,..,FALSE,..}
  • 1/(A:A<>"")将此数组修改为{1,1,..,#DIV/0!,..}
  • 由于LOOKUP期望 升序 sorting数组,并考虑到如果LOOKUP函数找不到精确匹配,它将在lookup_rangeselectlookup_range (在我们的例子中为{1,1,..,#DIV/0!,..} )小于或等于值(在我们的情况2 ),公式在数组中find最后1 ,并从result_range (第三个参数 – A:A )返回相应的值。

还有一点点 – 上面的公式没有考虑有错误的单元格(只有当最后一个非空单元格有错误时才能看到它)。 如果您想考虑这些问题,请使用:

 =LOOKUP(2,1/(NOT(ISBLANK(A:A))),A:A) 

下图显示了不同之处:

在这里输入图像描述

这是另一种select: =OFFSET($A$1;COUNTA(A:A)-1;0)

这适用于Excel 2003(以及稍后的轻微编辑,见下文)。 按下Ctrl + Shift + Enter(不只是input)将其作为数组公式input。

 =IF(ISBLANK(A65536),INDEX(A1:A65535,MAX((A1:A65535<>"")*(ROW(A1:A65535)))),A65536) 

请注意,Excel 2003 无法将数组公式应用于整个列。 这样做会产生#NUM! ; 不可预知的结果可能会发生! (编辑 :来自微软的信息冲突:Excel 2007 可能也可能不一样,2010年问题可能已经被修复

这就是为什么我将数组公式应用到A1:A65535范围内, A65536 Excel 2003中的最后一个单元格A1:A65535给予特殊处理。不能仅仅说A:A或者甚至A1:A65536因为后者会自动恢复为A:A

如果你确定A65536是空白的,那么你可以跳过IF部分:

 =INDEX(A1:A65535,MAX((A1:A65535<>"")*(ROW(A1:A65535)))) 

请注意,如果您使用的是Excel 2007或2010,则最后一行的编号是1048576而不是65536,因此请根据情况调整上述内容。

如果数据中间没有空白单元格,那么我只是使用更简单的公式=INDEX(A:A,COUNTA(A:A))

在Doug Glancy的回答中得到了很大的启发,我想出了一个不需要数组公式的方法。 不要问我为什么,但是我非常想避免使用数组公式,如果可能的话(不是因为任何特定的原因,这只是我的风格)。

这里是:

 =SUMPRODUCT(MAX(($A:$A<>"")*(ROW(A:A)))) 

使用列A作为参考列来查找最后一个非空行

 =SUMPRODUCT(MAX(($1:$1<>"")*(COLUMN(1:1)))) 

查找使用第1行作为参考行的最后一个非空列

这可以进一步与索引函数结合使用,以有效地定义dynamic命名范围,但这是另一个职位的东西,因为这不涉及本文提到的直接问题。

我已经使用Excel 2010testing了上述方法,“本地”和“兼容模式”(适用于较早版本的Excel),它们都可以工作。 再次,这些你不需要做任何的Ctrl + Shift + Enter。 通过利用Excel中的sumproduct工作方式,我们可以提出需要进行数组操作的操作,但是我们不需要数组公式。 我希望有人能像我一样欣赏这些提出的产品解决scheme的美丽,简洁和优雅。 虽然我没有证实上述解决scheme的内存效率。 只是他们很简单,看起来很漂亮,有助于达到预期的目的,而且足够灵活,可以将其用途扩展到其他目的:)

希望这可以帮助!

祝一切顺利!

我知道这个问题是旧的,但我不满意提供的答案。

  • LOOKUP,VLOOKUP和HLOOKUP有性能问题,应该永远不要使用。

  • 数组函数有很多的开销,也可能有性能问题,所以它只能作为最后的手段。

  • COUNT和COUNTA会遇到问题,如果数据不是连续的非空白,即您有空格,然后再次在有问题的范围内的数据

  • INDIRECT是不稳定的,所以它只能作为最后的手段使用

  • OFFSET是不稳定的,所以它只能用作最后的手段

  • 任何对最后一行或列的引用(例如Excel 2003中的第65536行)都不健壮,并且会导致额外的开销

这是我用的

  • 当数据types混合时: =max(MATCH(1E+306,[RANGE],1),MATCH("*",[RANGE],-1))

  • 当知道数据仅包含数字时: =MATCH(1E+306,[RANGE],1)

  • 当知道数据只包含文本时=MATCH("*",[RANGE],-1)

MATCH具有最低的开销,并且是非易失性的,所以如果你使用大量的数据,这是最好的使用。

没有数组公式的另一种解决scheme,可能比先前答案(提示为a)的解决scheme没有数组公式更好

 =INDEX(A:A,INDEX(MAX(($A:$A<>"")*(ROW(A:A))),0)) 

以此答案为例。 对布拉德和巴里霍迪尼 ,谁帮助解决这个问题的荣誉。

喜欢非数组公式的可能原因如下:

  1. 微软官方网页 (查找“使用数组公式”的缺点)。
    数组公式看起来很神奇,但也有一些缺点:

    • 您可能偶尔忘记按CTRL + SHIFT + ENTER。 只要input或编辑数组公式,请记住按下此组合键。
    • 其他用户可能不了解你的公式。 数组公式相对来说是不公开的,所以如果其他人需要修改工作簿,则应该避免使用数组公式,或者确保这些用户知道如何改变它们。
    • 根据计算机的处理速度和内存,大型数组公式可能会减慢计算速度。
  2. arrays公式异端 。

=MATCH("*";A1:A10;-1)为文本数据

=MATCH(0;A1:A10;-1)数值数据

=INDEX(A:A, COUNTA(A:A), 1)从这里取出

我试过所有的非易失性版本,但没有一个版本上面已经工作.. excel 2003/2007更新。 这当然可以在Excel 2003中完成。不是一个数组或标准公式。 我要么只是空白,0或#value错误。 所以我诉诸不稳定的方法..这工作..

= LOOKUP(2,1 /(T4:T369 <> “”),T4:T369)

@JulianKroné使用“;” 而不是“,”不起作用! 我认为你使用免费的办公软件不是MS Excel? LOOKUP是如此令人讨厌的volitile我只用它作为最后的手段

将此代码放入VBA模块中。 保存。 在function下,用户自定义查找此function。

 Function LastNonBlankCell(Range As Excel.Range) As Variant Application.Volatile LastNonBlankCell = Range.End(xlDown).Value End Function 

对于文本数据:

 EQUIV("";A1:A10;-1) 

数值数据:

 EQUIV(0;A1:A10;-1) 

这给出了所选范围中最后一个非空单元格的相对索引(这里是A1:A10)。

如果你想得到这个值,可以在构build完成后通过INDIRECT来访问它 – 绝对单元格引用,例如:

 INDIRECT("A" & (nb_line_where_your_data_start + EQUIV(...) - 1)) 

我也有同样的问题。 这个公式也同样适用:

 =INDIRECT(CONCATENATE("$G$",(14+(COUNTA($G$14:$G$65535)-1)))) 

14是要计数的行中第一行的行号。

慢性Clawtooth

我用了HLOOKUP

A1有date; A2:A8有不同时间的预测,我想要最新的

 =Hlookup(a1,a1:a8,count(a2:a8)+1) 

这使用标准的hlookup公式,其中查找数组由条目数定义。

如果你知道中间不会有空单元格,最快的方法是这样的。

 =INDIRECT("O"&(COUNT(O:O,"<>"""))) 

它只是计数非空单元格并引用适当的单元格。

它也可以用于特定的范围。

 =INDIRECT("O"&(COUNT(O4:O34,"<>""")+3)) 

这将返回范围O4:O34中的最后一个非空单元格。

对于Microsoft Office 2013

非空行的“最后一个”

 =OFFSET(Sheet5!$C$1,COUNTA(Sheet5!$C:$C)-2,0) 

“最后”非空行:

 =OFFSET(Sheet5!$C$1,COUNTA(Sheet5!$C:$C)-1,0) 

这个公式与我一起工作的2010年办公室:

= LOOKUP(2; 1 /(A1:A100 <> “”); A1:A100)

A1:第一个单元格A100:参考比较中的最后一个单元格

一个简单的适合我的工作:

 =F7-INDEX(A:A,COUNT(A:A)) 

好吧,所以我和提问人员有同样的问题,并且都尝试了最好的答案。 但只是得到公式错误。 原来,我需要交换“,”到“;” 为公式工作。 我正在使用XL 2007。

例:

 =LOOKUP(2;1/(A:A<>"");A:A) 

要么

 =INDEX(A:A;MAX((A:A<>"")*(ROW(A:A)))) 

对于版本跟踪(将字母v添加到数字的开头),我发现这个在Xcelsius(SAP Dashboards)

 ="v"&MAX(A2:A500)