有谁知道公式找到一列中的最后一个非空单元格的值,在Microsoft Excel?
这适用于文本和数字都和不关心,如果有空白单元格,即,它将返回最后一个非空白单元格。
它需要阵列的进入,这意味着你按你输入或粘贴后按Ctrl-Shift键进入下面是A列:
=INDEX(A:A,MAX((A:A<>"")*(ROW(A:A))))
=MATCH("*";A1:A10;-1)
为文本数据
=MATCH(0;A1:A10;-1)
为数值数据
我用尽所有的非易失性版本,但上面给出的没有一个版本的工作.. Excel 2003中/ 2007update。当然这可以在2003年的Excel进行不作为数组也不标准公式。我要么得到只是一个空白,0或#VALUE错误。所以我诉诸挥发的方法..这个工作..
= LOOKUP(2,1 /(T4:T369 <> “”),T4:T369)
@Julian KRONE ..使用 “;”而不是“”不工作!我认为你正在使用自由报办公室不是MS Excel的?查找是如此烦人volitile我用它作为最后的手段只
将这段代码放到一个VBA模块中。救。在功能,用户自定义查找此功能。
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)的范围内。
如果你想获得的价值,通过间接访问它建立-textually-绝对单元格引用,如后:
INDIRECT("A" & (nb_line_where_your_data_start + EQUIV(...) - 1))
我有同样的问题了。这个公式也同样适用: -
=INDIRECT(CONCATENATE("$G$",(14+(COUNTA($G$14:$G$65535)-1))))
14是第一行的要算行的行号。
慢性Clawtooth
我用HLOOKUP
A1
有一个日期; 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)
这个公式和我工作了22年事务:
= LOOKUP(2; 1 /(A1:A100 <> “”); A1:A100)
A1:第一个单元格A100:指最后一个单元格中的比较
我觉得从W5ALIVE反应是最接近我用来发现数据的最后一排一列。假设我要寻找的最后一行与列的数据,不过,我会用更通用的查找以下内容:
=MAX(IFERROR(MATCH("*",A:A,-1),0),IFERROR(MATCH(9.99999999999999E+307,A:A,1),0))
第一场比赛将找到的最后一个文本单元和第二场比赛找到的最后一个数字单元格。的IFERROR函数返回零如果第一MATCH查找所有数字单元或如果第二匹配查找所有文本细胞。
基本上,这是W5ALIVE的混合文本和数字解决方案稍有不同。
在测试时间,这是比等效LOOKUP变化显著更快。
要返回最后一个单元格的实际值,我更喜欢用间接的单元格引用是这样的:
=INDIRECT("A"&MAX(IFERROR(MATCH("*",A:A,-1),0),IFERROR(MATCH(9.99999999999999E+307,A:A,1),0)))
通过sancho.s提供的方法也许是一个更清洁的选择,但我会修改该发现该行号此部分:
=INDEX(MAX((A:A<>"")*(ROW(A:A))),1)
唯一的区别在于,“ 1" 返回第一个值,而” 0" 返回值的整个阵列(所有,但其中的一个是不需要的)。我还是倾向于选择寻址单元的指数函数存在,换句话说,与返回的单元格的值:
=INDIRECT("A"&INDEX(MAX((A:A<>"")*(ROW(A:A))),1))
伟大的线程!
使用下面简单的公式更快
=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
预计升序排列,并考虑到小于或等于该值帐户,如果LOOKUP
功能无法找到完全匹配的,它选择在lookup_range
最大的价值(在我们的例子{1,1,..,#DIV/0!,..}
)排序阵列(以我们的情况下2
),公式查找阵列最后1
和相应的从result_range
值(第三个参数返回 - A:A
)。还稍微注意 - 上述公式没有考虑到细胞错误(你可以看到它只有在最后一个非空单元格有错误)。如果要考虑到这些,使用方法:
=LOOKUP(2,1/(NOT(ISBLANK(A:A))),A:A)
下面示出图像的区别:
如果你不害怕使用数组,然后下面是一个非常简单的公式来解决这个问题:
= SUM(IF(A:A <> “”,1,0))
你必须按Ctrl + Shift + Enter,因为这是一个数组公式。
一个简单的其中一个为我工作:
=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仪表盘)
="v"&MAX(A2:A500)
这是另一种选择:=OFFSET($A$1;COUNTA(A:A)-1;0)
由道格Glancy的答案给出的伟大领导的启发,我想出了一个办法,做同样的事情,而不需要一个数组公式。不要问我为什么,但我很希望避免使用数组公式,如果在所有可能的(没有什么特别的原因,它只是我的风格)。
这里是:
=SUMPRODUCT(MAX(($A:$A<>"")*(ROW(A:A))))
用于找到使用柱A作为基准列中的最后非空行
=SUMPRODUCT(MAX(($1:$1<>"")*(COLUMN(1:1))))
用于找到使用行1作为基准列中的最后非空列
这可以在与索引函数来有效地定义动态命名区域一起进一步利用,但是这是用于因为这是不相关的本文中得到解决立即问题另一篇文章。
我测试过使用Excel 2010上面的方法,无论是“本地”和“兼容模式”(旧版本的Excel)和他们的工作。再次,这些你不需要做任何的按Ctrl + Shift +的输入。通过利用Excel中SUMPRODUCT的工作方式,我们可以得到我们的搂着需要携带阵列的操作,但我们这样做是没有的数组公式。我希望有人在那里可以欣赏这些建议SUMPRODUCT解决方案,我一样的美丽,简单和优雅。我不证实了上述解决方案的存储效率虽然。只是,他们是简单的,看上去很美,有利于预期目的,并具有足够的灵活性,以它们的用途扩展到其他用途:)
希望这可以帮助!
祝一切顺利!
我知道这个问题是旧的,但我并不满足于提供的答案。
这是我用什么
=max(MATCH(1E+306,[RANGE],1),MATCH("*",[RANGE],-1))
=MATCH(1E+306,[RANGE],1)
=MATCH("*",[RANGE],-1)
MATCH具有最低的开销,是非易失性的,所以如果你有大量的数据工作,这是最好的使用。
这部作品在Excel 2003中(后来与小修改,见下文)。按下Ctrl + Shift + Enter键(不只是输入)输入此作为数组公式。
=IF(ISBLANK(A65536),INDEX(A1:A65535,MAX((A1:A65535<>"")*(ROW(A1:A65535)))),A65536)
要知道,Excel 2003中是unable到数组公式应用到整列。这样做的产量#NUM!
;可能发生不可预知的结果! (编辑:从微软相互矛盾的信息:同may或may not约Excel 2007中真实; may已修复在2010年的问题)
这就是为什么我申请的数组公式范围A1:A65535
和最后一个单元格,这是A65536
在Excel 2003中不能只是说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))
。
而不数组公式的替代解决方案,可能比a previous answer with a (hint to a) solution without array formulas的更健壮,是
=INDEX(A:A,INDEX(MAX(($A:$A<>"")*(ROW(A:A))),0))
看到this answer作为一个例子。荣誉对Brad和barry houdini,谁帮助解决this question。
对于更喜欢在非阵列式可能原因中给出:
如果你在搜索栏(A)使用方法:
=INDIRECT("A" & SUMPRODUCT(MAX((A:A<>"")*(ROW(A:A)))))
如果你的范围是A1:A10,你可以使用:
=INDIRECT("A" & SUMPRODUCT(MAX(($A$1:$A10<>"")*(ROW($A$1:$A10)))))
在该式中:
SUMPRODUCT(MAX(($A$1:$A10<>"")*(ROW($A$1:$A10))))
返回最后一个非空行数和间接()返回单元格值。
从=INDEX(A:A, COUNTA(A:A), 1)
here取