找到包含公式

时间:2015-11-28 12:18:39

标签: 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

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

实际代码比这更复杂,所以我不能只检查列A的最后填充行,因为公式引用不同工作表上的单个单元格并动态添加。

4 个答案:

答案 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

测试

enter image description here

此外,上面提供的代码的更短版本是:

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()也在活动表上。但将RangeRows.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