2014-10-09 67 views
1

我有一個有趣的(希望)爲你們,並提前感謝!找到第一個空白行,當你有多個不同長度的列

我有一份報告,我正在創建將從其他工作簿中獲取表格並將其複製到默認書籍中的單個報告頁面的報告。

重複此操作直到所有工作簿都被掃描。我使用LastRow和LastPos來維護表單中的位置以免覆蓋,但是我發現有些報表不使用我試圖找到LastRow的列。

因此,做一些像Range("A65536").End(xlup).Select我必須檢查每個報告,看看最長的列是什麼。它可能是A或B或C或D?

我的問題是,有沒有簡單的方法檢查這些值並找到最大的值,以便我可以分配給一個變量並使用?

感謝,

傑夫

回答

1

我使用這個功能適用於所有的我的 「最後」 的需要:

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) 
+0

副總你好:看起來不錯,但問題...查看代碼並看到'rng.cells(1)'不是指定的「A1」還是表示所有單元格? Jeff – 2014-10-09 15:38:57

+0

這是你通過它的第一個單元格。所以你可以像Last(1,Sheet1.Range(「A5:J10」))那樣做,然後返回該範圍內最後一個使用過的單元格。 – sous2817 2014-10-09 15:41:00

+0

也可以得到第一個空行,你需要將1加到功能 – sous2817 2014-10-09 15:41:48

相關問題