当您有多个不同长度的列时,查找第一个空行

时间:2014-10-09 15:21:42

标签: excel vba

我为所有人提供了一个有趣的(希望如此),并提前感谢!!

我收到了一份我正在创建的报告,该报告将从其他工作簿中获取表格并将其复制到默认图书中的单个报告页面。

重复此过程,直到扫描完所有工作簿。我使用LastRow和LastPos来维护我在工作表上的位置,以免覆盖,但我发现有些报告不使用我试图找到LastRow的列。

所以做Range("A65536").End(xlup).Select这样的事情我必须检查每个报告,看看最长的列是什么。它可能是A或B,C或D?

我的问题是,是否有一种简单的方法可以检查这些值并查找最大值,以便分配给变量并使用?

谢谢,

杰夫

1 个答案:

答案 0 :(得分:1)

我将这个功能用于我的所有" last"需要:

Function Last(choice As Long, rng As Range)
'Ron de Bruin, 5 May 2008
' 1 = last row
' 2 = last column
' 3 = last cell
    Dim lrw As Long
    Dim lcol As Long

    Select Case choice

    Case 1:
        On Error Resume Next
        Last = rng.Find(what:="*", _
                        After:=rng.Cells(1), _
                        LookAt:=xlPart, _
                        LookIn:=xlFormulas, _
                        SearchOrder:=xlByRows, _
                        SearchDirection:=xlPrevious, _
                        MatchCase:=False).Row
        On Error GoTo 0

    Case 2:
        On Error Resume Next
        Last = rng.Find(what:="*", _
                        After:=rng.Cells(1), _
                        LookAt:=xlPart, _
                        LookIn:=xlFormulas, _
                        SearchOrder:=xlByColumns, _
                        SearchDirection:=xlPrevious, _
                        MatchCase:=False).Column
        On Error GoTo 0

    Case 3:
        On Error Resume Next
        lrw = rng.Find(what:="*", _
                       After:=rng.Cells(1), _
                       LookAt:=xlPart, _
                       LookIn:=xlFormulas, _
                       SearchOrder:=xlByRows, _
                       SearchDirection:=xlPrevious, _
                       MatchCase:=False).Row
        On Error GoTo 0

        On Error Resume Next
        lcol = rng.Find(what:="*", _
                        After:=rng.Cells(1), _
                        LookAt:=xlPart, _
                        LookIn:=xlFormulas, _
                        SearchOrder:=xlByColumns, _
                        SearchDirection:=xlPrevious, _
                        MatchCase:=False).Column
        On Error GoTo 0

        On Error Resume Next
        Last = rng.Parent.Cells(lrw, lcol).Address(False, False)
        If Err.Number > 0 Then
            Last = rng.Cells(1).Address(False, False)
            Err.Clear
        End If
        On Error GoTo 0

    End Select
End Function

用法如下:

dim LR as Long
LR = Last(1,Sheet1.Cells)