如何找到包含数据的最后一行,其中单元格可能包含空文本“”?

时间:2016-02-18 16:13:45

标签: excel vba

我正在尝试查找列的最后一行。

列中的每个单元格都有公式lastrow= Worksheets("SPONSOR ENGAGEMENT").Cells(Worksheets("SPONSOR ENGAGEMENT").Rows.Count, trendcnt).End(xlUp).Row

我使用下面的VBA代码查找最后一行。

<svg width="400px" height="400px">
<defs>
<filter id="crispify">
<feComponentTransfer>
<feFuncA type="discrete" tableValues="0 1"/>
</feComponentTransfer>
</filter>
</defs>

<text filter="url(#crispify)" font-size="60"  y="60" >Some crispy text</text>
</svg>

但是,该代码还会计算由公式产生的空文本“”的单元格。

如何只计算数据不是空文本的单元格?

2 个答案:

答案 0 :(得分:1)

我使用了加里的第一个代码并且速度很快:

Function LastRowWithNonNullData() as Long
Dim LastRow As Variant
Dim i As Long
LastRow = Range(Cells(1, 1), Cells(Rows.Count, 1)).Value2
For i = Rows.Count To 1 Step -1
        If LastRow(i, 1) <> vbNullString Then
            'MsgBox i
            LastRowWithNonNullData = i
            Erase LastRow
            Exit Function
        End If
Next i
Erase LastRow
End Function

例如,如果我只在单元格“A1”中放置了一些东西,那么在我的计算机上需要0,125个secondes(而不是4,3个secondes)。

我也把它变成了一个功能,更有用。

答案 1 :(得分:0)

你可以使用它,但它很慢:

Sub LastRowWithNonNullData()
    Dim LastRow As Variant, i As Long
        For i = Rows.Count To 1 Step -1
            If Cells(i, "A").Value <> "" Then
                MsgBox i
                Exit Sub
            End If
        Next i
    End Sub

这不是很慢:

Sub IsThisAnyBetter()
    MsgBox Evaluate("IF(COUNTA(A:A)=0,"""",MAX((A:A<>"""")*(ROW(A:A))))")
End Sub

两者都会忽略 A 列底部的 Null 。如果直接在工作表单元格中使用 Evaluate()的参数,则必须输入数组。

修改#1:

这两个子工作都在列 A 上工作。假设我们要修改第二个子中的公式以处理列 77 (即列 BY )。这是一种方法:

Sub AnyColumn()
    Dim s1 As String, s2 As String, iCol As Long, iColAlpha As String
    Dim s3 As String, s4 As String, s5 As String

    iCol = 77
    s1 = "IF(COUNTA(A:A)=0,"""",MAX((A:A<>"""")*(ROW(A:A))))"
    s2 = Cells(1, iCol).Address(0, 0)
    s3 = Left(s2, Len(s2) - 1)
    s4 = s3 & ":" & s3
    s5 = Replace(s1, "A:A", s4)

    MsgBox s5
End Sub

修改#2:

我在 Evaluate()中使用的公式改编自Chip Perason