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

我正在试图find一列的最后一行。 列中的每个单元格都有公式= IF(ISERROR(AVERAGE(F5:G5));“”; AVERAGE(F5:G5))


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

lastrow =工作表(“SPONSOR ENGAGEMENT”)。单元格(工作表(“赞助商联系”).Rows.Count,trendcnt).End(xlUp).Row

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

如何更改代码来只计算有实际数据但不是空文本的单元格?

我使用了Gary的第一个代码,

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次(而不是4次)。

我也做了一个函数,更有用。

你可以用这个,但是速度很慢:

 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列底部的空值 。 如果直接在工作表单元格中使用参数Evaluate() ,则必须进行数组input。

编辑#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