Pas*_*ale 9 excel vba excel-vba excel-2013
如何找到包含公式的单元格范围中的最后一行,其中公式的结果是实际值而不是空?
简单地说,细胞范围包含("E1:E10")一个公式,指的是细胞A1到A10,如下所示=IF("A1"="","","A1").但只有单元格A1到A6的值已填入,因此单元格E7到E10的公式结果将为空.
试着这样做:
lastRow = ActiveSheet.Range("E" & Rows.Count).End(xlUp).Row
Run Code Online (Sandbox Code Playgroud)
导致lastRow的值为10.我想要的是6在这个例子中lastRow的值.
实际的代码比这更复杂,所以我不能只检查列A的最后填充行,因为公式引用不同工作表上的单个单元格并动态添加.
我认为比提供的更优雅的方法@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
Run Code Online (Sandbox Code Playgroud)
测试
此外,上面提供的代码的更短版本是:
Sub test2()
Debug.Print [E:E].Find("*", , xlValues, , xlByRows, xlPrevious).Row
End Sub
Run Code Online (Sandbox Code Playgroud)
您希望在列中找到非空的最后一个单元格,而不是空字符串("").
只需跟随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
Run Code Online (Sandbox Code Playgroud)
请注意,您Rows.count没有指定哪张表.这意味着它将使用活动表.当然ActiveSheet.Range()也在活动表上.但混合Range或Rows与.Range或是不好的做法.Rows.它表示如果您更改了ActiveSheet但未更改未指定的引用,可能会让您感到轻率.