2017-01-13 17 views
1

我正在處理一個模板部分,其中需要我複製和粘貼具有相同列數的多行值的不同工作表,並將它們附加在一起(即在工作表1中複製值,粘貼到工作表10中,複製工作表2中的值,粘貼到工作表10中,但在從工作表1複製的值的最後一行之後,等等)。我通常使用複製和粘貼值的更好方法

範圍(選擇,Selection.End(xlDown))。選擇
範圍(選擇,Selection.End(xlToRight))。選擇

複製數據。

然後我用一個do while語句找到目標表的最後一排(即表10),並貼有:

Range("A6").Select 
Do While ActiveCell.Value <> ""    
ActiveCell.Offset(1, 0).Select 
Loop 

Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ 
    :=False, Transpose:=False 

,但我有一個是否的問題的源表只有一行。它將行和所有空行復制到excel的最後一行,因此,由於其大小,excel無法將其粘貼到目標工作表。任何更好的方式來做到這一點?

+0

'範圍(選擇,細胞(Rows.Count,Selection.Column).END(xlUp))。Select'會選擇初始行集的更好的方法,但請閱讀這個關於[如何避免使用Select]的回答(http://stackoverflow.com/a/10717999/6535336) – YowE3K

+0

該範圍看起來像你試圖複製什麼?列A通過什麼? –

+0

列通過N. –

回答

0

你可以用它來獲取最後一行在源表和選擇單元格

Dim lr As Long 
lr = Cells(Rows.Count, Selection.Column).End(xlUp).Row 
Range(Selection, Cells(lr, Selection.Column)).Select 

同樣在你的目標表,你可以使用

Range("A" & Rows.Count).End(xlUp).Offset(1, 0).Select 

不過,我會強烈建議不使用。在你的代碼中選擇

+0

如果我不使用。選擇,將是一個更好的代碼使用? –

0

將宏放到最後一行時,使用類似activecell.end(xldown).select的選項將選擇最後一行,如果存在只有一行。我解決此得到

一種方法是使用IF語句來檢查第2行是否包含列數據:(A1從選擇到A3將與activecell.end工作(xldown)。選擇)

Sub Example() 
Range("A2").Select 
If IsEmpty(ActiveCell.Value) then 
'do this set of instructions 
else 
'do that set of instructions 
end if 
End Sub 

在你的情況下,選擇一個未知數量的行復制到另一個工作表中可以使用這個東西simialr來完成:

Sub Example2() 

Dim ws as worksheet 
Set ws = ThisWorkbook.Sheets("Sheet10") 'change quotes to sheet 10 name if different 

Dim i as integer 
i = 1 

While i = <=9 
ThisWorkbook.sheets("sheet" & i).activate 
Range("A2").Select 
If IsEmpty(ActiveCell.Value) then 
EndRow = "2" 
Go To NoA2 'Go to will skip to NoA2 below 
Else 
ActiveCell.End(xlDown).Select 
EndRow = activecell.row 'this will get the row number for later 
End If 
NoA2: 'skip will continue from here 
ActiveCell.end(xlToRight).Select 
EndCol = Split(ActiveCell(1).Address(1, 0), "$")(0) 'Get column letter 
Range("A1:" EndCol & EndRow).Select 
Selection.Copy 
ws.activate 
Range("A2").Select 
If IsEmpty(ActiveCell.Value) then 
ActiveCell.PasteSpecial Paste:=xlPasteValues 
Else 
Range("A1").Select 
ActiveCell.End(xlDown).Select 
ActiveCell.PasteSpecial Paste:=xlPasteValues 
i = i+1 
Wend 

End Sub 

的代碼兩組未經測試,但第二應該做的,你需要通過循環什麼通過基於表單名稱的每個表單爲「Sheet1」,「Sheet2」等到紙張9

希望幫助你