find持有公式的单元格区域中最后一个不为空的行

我怎样才能find一个公式的单元格范围内的最后一行,公式的结果是一个实际值,而不是空的?

以简化的方式来说,单元格范围("E1:E10")保持涉及单元格A1到A10的公式,如下所示=IF("A1"="","","A1") 。 但是只有单元格A1到A6填充了一个值,所以单元格E7到E10的公式结果将是空的。

试图做到:

 lastRow = ActiveSheet.Range("E" & Rows.Count).End(xlUp).Row 

导致lastRow的值为10 。 我想要的是在这个例子中lastRow的值是6

实际的代码比这更复杂,所以我不能只检查列A中的最后一行,因为这些公式是指不同工作表上的单个单元格,并且是dynamic添加的。

我认为比@D_Bester提供的更优雅的方法是使用find()选项,而不循环单元格范围:

 Sub test() Dim cl As Range, i& Set cl = Range("E1:E" & Cells(Rows.Count, "E").End(xlUp).Row) i = cl.Find("*", , xlValues, , xlByRows, xlPrevious).Row Debug.Print "Last row with data: " & i End Sub 

testing

在这里输入图像说明

而且,上面提供的代码更短的版本是:

 Sub test2() Debug.Print [E:E].Find("*", , xlValues, , xlByRows, xlPrevious).Row End Sub 

您想要查找非空的列中的最后一个单元格AND不是空string(“”)。

只需按照LastRow循环检查非空白单元格。

 lastrow = ActiveSheet.Range("E" & ActiveSheet.Rows.Count).End(xlUp).Row Do If ActiveSheet.Cells(lastrow, 5).Value <> "" Then Exit Do End If lastrow = lastrow - 1 Loop While lastrow > 0 If lastrow > 0 Then Debug.Print "Last row with data: " & lastrow Else Debug.Print "No data in the column" End If 

注意你的Rows.count没有指定哪个表单。 这意味着它将使用活动工作表。 当然, ActiveSheet.Range()也在活动工作表上。 但将RangeRows.Range.Rows混合是不好的做法。 如果你改变了ActiveSheet但是没有改变未指定的引用,则表明这是一个不小心的用法,可能会引起你的ActiveSheet

这应该可以帮助您确定包含公式的最后一行(在Sheet1A Sheet1 ):

 lastRow = Split(Split(Sheet1.Range("A:A").SpecialCells(xlCellTypeFormulas).Address, ",")(UBound(Split(Sheet1.Range("A:A").SpecialCells(xlCellTypeFormulas).Address, ","))), "$")(2) 

SpecialCells用于确定包含公式的所有单元格的范围。 这个范围然后用Split分析。 使用Ubound ,这些单元格中的最后一个正在被检索。 结果是再次拆分来提取行号。