2017-07-12 56 views
0

背景

我有一個工作簿7張,但只有6個數據。所有這7張紙都有相同的結構/標題,只是最後一張紙(紙張7)是空白的。複製範圍從多個工作表而不是僅僅一個工作表

我想寫一個代碼,將A2:J15範圍內的工作表1-6的內容複製到工作表7中。我目前有一個代碼,我一直用它來測試,看看它是否可以工作,但我只從一個工作表複製和粘貼代碼(見下文)。有什麼建議麼?

在下文中,我有兩個表,我想數據來自和目標板,我想對數據進行分析:

Sub sbCopyRangeToAnotherSheet() 
Sheets("Source1").Range("A1:B10").Copy 
Sheets("Source2").Range("A1:B10").Copy 
Sheets("Destination").Activate 
Range("A1:B10").Select 
ActiveSheet.Paste 
Application.CutCopyMode = False 
End Sub 
+0

請提供工作表圖片,以便我們更好地瞭解他們的結構。這確實是一個可行的任務,非常適合VBA。 – JahKnows

+1

[不要使用'.Select' /'.Activate'](https://stackoverflow.com/questions/10714251/)。相反,使用工作表變量來做到這一點。另外,當你做第二個'.Copy'時,它會「覆蓋」你的第一個'.Copy',從而否定第一行的需要。另外,在Sheet7上,我假設您不希望每次都覆蓋數據,而是將其他表單中的數據塊添加到新複製的信息下面? – BruceWayne

+0

如何將同一範圍A2:J15從所有6張複製到第7張?這樣做只會使第7張表具有第6張數據 –

回答

1

你的問題來自你試圖直接複製兩個項目。第二次複製呼叫將覆蓋您在第一次呼叫中複製的數據。

Sheets("Source1").Range("A1:B10").Copy 
Sheets("Destination").Activate 
Range("A1:B10").Select 
ActiveSheet.Paste 

Sheets("Source2").Range("<your new range here>").Copy 
Sheets("Destination").Activate 
Range("<your new range here>").Select 
ActiveSheet.Paste 
Application.CutCopyMode = False 

上面的代碼應該解釋我的意思,儘管不是最有效的方法。一個更有效的方法是使用:

Sheets("Source1").Range("A1:B10").Copy Destination:=Sheets("Destination").Range("A1:B10") 

Sheets("Source2").Range("A1:B10").Copy Destination:=Sheets("Destination").Range("<range>") 
+0

謝謝@基蘭, 這對我有效! 十分讚賞, 周杰倫 –

1

正如評論sugguested:

Sub sbCopyRangeToAnotherSheet() 
    Sheets("Source1").Range("A1:B10").Copy Sheets("7").Range("A1") 
    Sheets("Source2").Range("A1:B10").Copy Sheets("7").Range("A1").end(xlDown).offset(1,0) 
    Sheets("Source3").Range("A1:B10").Copy Sheets("7").Range("A1").end(xlDown).offset(1,0) 
    Sheets("Source4").Range("A1:B10").Copy Sheets("7").Range("A1").end(xlDown).offset(1,0) 
    Sheets("Source5").Range("A1:B10").Copy Sheets("7").Range("A1").end(xlDown).offset(1,0) 
    Sheets("Source6").Range("A1:B10").Copy Sheets("7").Range("A1").end(xlDown).offset(1,0) 
End Sub 
+0

您好@Kiralancer,我試過這個代碼,你有建議,我得到一個錯誤,說'下標超出範圍' - Sub sbCopyRangeToAnotherSheet() 表(「來源1「)。範圍(」A1:J15「)。複印紙(」7「)。範圍(」A1「) –

+0

什麼是紙張名稱和範圍。以上範圍只是從你的。 – Kiralancer

0

假設你想行(而不是覆蓋它)將數據粘貼,和你的牀單被命名爲源1至Source6,那麼下面應該工作:

Sub testSO() 

For i = 1 To 6 
    Sheets("Source" & i).Range("A1:B10").Copy Sheets("Destination").Range("A" & Rows.Count).End(xlUp).Offset(1) 
Next i 

End Sub 
+0

嗨@idktho 我得到它說:「下標越界」因爲同樣的錯誤; (1) (「Source」&i).Range(「A1:J15」)。Copy Sheets(「Destination」)。Range我唯一改變的就是範圍。 –

+0

Hi @JaySterling,請檢查工作表名稱是否正確並存在,並且它是活動工作簿(如果打開它,請關閉其他工作簿)。另外,「Source」和「1」之間是否有間隔? – idktho

相關問題