.End(xlUp)可以跳过Excel表格数据范围底部的空白行/单元格吗?

时间:2018-08-22 22:37:18

标签: excel vba excel-vba excel-2016

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

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表添加条带化格式,现在添加新行时,数据范围中A到D中的空白单元格“停止”了End(xlUp)值,使我能够更改为仅一行代码:

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

但是,如果删除了底部的任何行,则即使该行为空,它也会返回范围中最后一行以下的行。有没有一种方法可以使用.End(xlUp)跳过Excel表数据范围中的空白?

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

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

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

1 个答案:

答案 0 :(得分:1)

您不能使用.End属性跳过空格,它模仿了单击单元格并按 ctrl + up 时发生的操作。或键盘上的 end + up

  • 如果从非空白单元格开始,它将自动在空白,
  • 范围内停止
  • 如果您从空白单元格开始,它将自动在范围为空白的地方停止。

Here是该属性的MSDN文档,而here是该主题的另一个很好的答案。