2016-10-31 83 views
0

我有幾列,我試圖將每列的最後一個單元格複製到一列(在另一個工作表中)。VBA:選擇列範圍中的最後一個單元格並複製工作表中的單元格

這是我的代碼沒有工作,(我是通過行和列循環):

Sub lastcell() 

Dim lRow As Long 
Dim lCol As Long 

Dim i As Long 


Worksheets("input").Select 

With Worksheets("input") 
Worksheets("output").Cells.ClearContents 

lCol = .Cells(1, .Columns.Count).End(xlToLeft).Column 

Set ColRange = .Range(.Cells(1, 1), .Cells(5, lCol)) 

For Each ccol In ColRange 
    lRow = .Cells(.Rows.Count, ccol).End(xlUp).Rows.Count 

    For i = 2 To 6 
    Worksheets("output").Cells(i, 1) = .Cells(lRow, ccol) 

Next i 
Next ccol 


End With 

End Sub 

回答

1

你有一個迴路次數過多。

lRow = .Cells(.Rows.Count, ccol).End(xlUp).Rows.Count應該不.Rows.Count

Set ColRange = .Range(.Cells(1, 1), .Cells(5, lCol))

而且你通過每列5次將循環結束。 5應該是1

沒有必要在代碼的開頭激活或選擇輸入表。

CCOL應該聲明

Sub lastcell() 

Dim lRow As Long 
Dim lCol As Long 
Dim ccol as Range 
Dim i As Long 

With Worksheets("input") 
    Worksheets("output").Cells.ClearContents 
    lCol = .Cells(1, .Columns.Count).End(xlToLeft).Column 

    Set colrange = .Range(.Cells(1, 1), .Cells(1, lCol)) 
    i = 1 
    For Each ccol In colrange 
     lRow = .Cells(.Rows.Count, ccol.Column).End(xlUp).Row 
     Worksheets("output").Cells(i, 1).Value = .Cells(lRow, ccol.Column).Value 
     i = i + 1 
    Next ccol 


End With 

End Sub 

我們可以用一個簡單的進一步簡化它的循環:

Sub lastcell() 

Dim lRow As Long 
Dim lCol As Long 
Dim i As Long 

With Worksheets("input") 
    Worksheets("output").Cells.ClearContents 
    lCol = .Cells(1, .Columns.Count).End(xlToLeft).Column 

    For i = 1 To lCol 
     lRow = .Cells(.Rows.Count, i).End(xlUp).Row 
     Worksheets("output").Cells(i, 1).Value = .Cells(lRow, i).Value 
    Next i 

End With 

只爲一個供參考,這也可以做到用一個公式。

在輸出紙張的第一個單元格把這個公式:

=INDEX(input!A:Z,MAX(IFERROR(MATCH("ZZZ",INDEX(input!A:Z,0,ROW(1:1))),0),IFERROR(MATCH(1E+99,INDEX(input!A:Z,0,ROW(1:1))),0)),ROW(1:1)) 

再複製/向下拖動公式,直到你得到0小號

相關問題