获取包含项目的最后一行

时间:2017-03-13 13:38:31

标签: excel vba excel-vba

我目前在sheet1上设置了一个表(“Table2”)。在A列中,我将行编号一直列在表格下面51,并且列B为空以填充。我试图让B列中使用的最后一行不为空。

我已尝试使用Worksheets("Sheet1").Range("B52").End(xlUp).Row,但即使在B栏中填写的最后一项是第3行,我仍会给出51的答案。

我已尝试过最后一行功能,但在表格中使用时似乎无法正常工作。

3 个答案:

答案 0 :(得分:3)

使用表格查找它更可靠:

With Worksheets("Sheet1")
    Debug.Print .Range("B:B").Find(What:="*", _
                      After:=.Range("b1"), _
                      Lookat:=xlPart, _
                      LookIn:=xlFormulas, _
                      SearchOrder:=xlByRows, _
                      SearchDirection:=xlPrevious, _
                      MatchCase:=False).Row
End With

enter image description here

这是链接中没有涉及的一个,使用工作表函数MATCH:

如果列是文本:

With Worksheets("Sheet1")
    Debug.Print Application.WorksheetFunction.Match("ZZZ", .Range("B:B"))
End With

如果列是数字:

With Worksheets("Sheet1")
    Debug.Print Application.WorksheetFunction.Match(1E+99, .Range("B:B"))
End With

答案 1 :(得分:1)

以下是关于此的good explanation

With Worksheets("Sheet1")
    Debug.Print .Range("B" & .Rows.Count).End(xlUp).Row
End With 'Worksheets("Sheet1")

由于这似乎位于 Excel表格对象中,请尝试以下操作:

With Worksheets("Sheet1").Range("Table2")
    Debug.Print .Range("B" & .Rows.Count).End(xlUp).Row
End With 'Worksheets("Sheet1").Range("Table2")

答案 2 :(得分:0)

您可以构建一个简单的循环。

Dim lastrow As Long
lastrow = 0
Dim checkrow As Long
For checkrow = 1 To 51
    If Worksheets("Sheet1").Range("B" & checkrow).Value <> "" Then
        lastrow = checkrow
    Else
        'do nothing
    End If
Next checkrow

这将从上到下遍历所有行,每次找到非空值时,都会保存该数字。因此,当循环结束时,lastrow是保存的最后一行,例如最后一行包含任何值(如果没有行包含值,则它保持为0)。

另外,您可能想要检查您的手机B51是否真的不包含任何内容。它可能包含一些空格,看起来是空的,而不会被检测到。