如何找到包含公式的单元格范围中的最后一行,其中公式的结果是实际值而不是空?
以简化的方式说明,单元格范围("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的最后填充行,因为公式引用不同工作表上的单个单元格并动态添加。
答案 0 :(得分:6)
我认为比@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
测试
此外,上面提供的代码的更短版本是:
Sub test2()
Debug.Print [E:E].Find("*", , xlValues, , xlByRows, xlPrevious).Row
End Sub
答案 1 :(得分:5)
您希望在列中找到非空的最后一个单元格,而不是空字符串(“”)。
只需跟随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
但未更改未指定的引用,可能会让您感到轻率。
答案 2 :(得分:2)
这可以帮助您确定包含公式的最后一行(在工作表 $(document).ready(function() {
setInterval(function() {
$('#feed_back').load('#feed_back')
}, 3000);
});
的第A
列中):
Sheet1
lastRow = Split(Split(Sheet1.Range("A:A").SpecialCells(xlCellTypeFormulas).Address, ",")(UBound(Split(Sheet1.Range("A:A").SpecialCells(xlCellTypeFormulas).Address, ","))), "$")(2)
用于确定包含公式的所有单元格的范围。然后使用SpecialCells
解析此范围。使用Split
时,将检索最后一个单元格。结果再次被拆分以提取行号。
答案 3 :(得分:0)
Function returnLastRow()
With ActiveSheet.UsedRange
returnLastRow = .Find("*", , xlValues, , xlByRows, xlPrevious).Row
End With
End Function