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()
也在活动工作表上。 但将Range
或Rows
与.Range
或.Rows
混合是不好的做法。 如果你改变了ActiveSheet
但是没有改变未指定的引用,则表明这是一个不小心的用法,可能会引起你的ActiveSheet
。
这应该可以帮助您确定包含公式的最后一行(在Sheet1
列A
Sheet1
):
lastRow = Split(Split(Sheet1.Range("A:A").SpecialCells(xlCellTypeFormulas).Address, ",")(UBound(Split(Sheet1.Range("A:A").SpecialCells(xlCellTypeFormulas).Address, ","))), "$")(2)
SpecialCells
用于确定包含公式的所有单元格的范围。 这个范围然后用Split
分析。 使用Ubound
,这些单元格中的最后一个正在被检索。 结果是再次拆分来提取行号。