首页 文章

如何在Excel中找到包含实际数据的最后一行?

提问于
浏览
0

我试图找到一列的最后一行 . 列中的每个单元格都具有公式= IF(ISERROR(AVERAGE(F5:G5));“”; AVERAGE(F5:G5))


目前我使用下面的VBA代码来查找最后一行 .

lastrow =工作表(“赞助商参与”) . 单元格(工作表(“赞助商参与”).Rows.Count,trendcnt).End(xlUp).Row

但是,该代码还会计算由公式生成的具有空文本“”的单元格 .

如何更改代码以仅计算具有实际数据但不包含空文本的单元格?

2 回答

  • 0

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

    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

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

    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()参数,则必须输入数组 .

    EDIT#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
    

    EDIT#2:

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

相关问题