.End(xlUp) 可以跳过 Excel table 数据范围底部的空白 rows/cells 吗?

Can .End(xlUp) skip blank rows/cells at the bottom of an Excel table data range?

我目前有一个程序可以使用以下代码确定下一个空行:

Public Function GetEmptyRow() As Long
    If ActiveSheet.Range("E" & Rows.Count).End(xlUp).Row > _
    ActiveSheet.Range("A" & Rows.Count).End(xlUp).Row Then
        GetEmptyRow = ActiveSheet.Range("E" & Rows.Count).End(xlUp).Row + 1
    Else
        GetEmptyRow = ActiveSheet.Range("A" & Rows.Count).End(xlUp).Row + 1
    End If
End Function

存在大于号比较是因为如果活动行中的项目被多人使用,它会创建一个新行并将第二个名字嵌套在 E 列中,A 到 D 列为空白。

我试图添加带有 Excel table 的条纹格式,现在当添加新行时,数据范围 [=30] 中 A 到 D 中的空白单元格=] End(xlUp) 值,允许我更改为一行代码:

Public Function GetEmptyRow() As Long
    GetEmptyRow = ActiveSheet.Range("A" & Rows.Count).End(xlUp).Row + 1
End Function

但是,如果删除了底部的任何行,它 returns 范围内最后一行的下方,即使它是空白的。有没有办法使用 .End(xlUp) 跳过 Excel table 数据范围内的空白?

更新 阅读建议后,我最终将代码更改为:

Public Function GetEmptyRow() As Long

    Dim lastRow1 As Integer, lastRow2 As Integer

    lastRow1 = ActiveSheet.ListObjects("Table3").Range.Columns(2) _
    .Cells.Find("*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row
    lastRow2 = ActiveSheet.ListObjects("Table3").Range.Columns(5) _
    .Cells.Find("*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row

    If lastRow2 > lastRow1 Then
        GetEmptyRow = lastRow2 + 1
    Else
        GetEmptyRow = lastRow1 + 1
    End If

End Function

这似乎可以解决问题。我不确定这是否是最有效的方法,但它肯定能完成工作。感谢您的建议!

您不能使用 .End 属性 跳过空白,它模拟了单击单元格并按下 ctrl 时发生的操作+upend+up 在你的键盘上。

  • 如果您从非空白单元格开始,它会在范围为空白处自动停止,
  • 如果您从一个空白单元格开始,它会在范围不是空白处自动停止。

Here is the MSDN documentation on the property and here 是关于该主题的另一个非常好的答案。