2015-06-19 95 views
0

我有工作簿中的多個工作表中的數據,我希望將其全部複製到同一工作簿中的一個工作表中。當我運行宏時,我希望它首先刪除「iPage Data Export」表中的當前數據,然後用其他表中的數據替換它。如何移動到下一個空白單元格?

我希望該過程一次發生一列,因爲我可能無法完成所有工作。現在我正試圖學習如何做一列。

我能夠從一張紙上覆制列中的所有內容,但是當它移動到下一張時,它會覆蓋現有數據。最後,我只複製了一張價值數據。

這裏是我的問題4:

  1. 我如何讓它運行程序之前清除該表中的數據?

  2. 如何讓它在該行底部開始每個複製功能(即在具有值的最後一個單元格之後)?我曾嘗試過很多關於這個和其他董事會的建議,但都沒有成功。我承認我在這方面不是很有經驗。

  3. 如何我可以把它複製到一個特定的列(目前它只是似乎默認爲A.

  4. 我怎麼能連接多個列粘貼功能時即如果我想它插入? A2 & 「」 B2,而不只是A2

Sub CombineData()

Dim Sht As Worksheet For Each Sht In ActiveWorkbook.Worksheets If Sht.Name <> "iPage Data Export" Then Sht.Select Range("C:C").Copy Sheets("iPage Data Export").Select ActiveSheet.Paste Else End If Next Sht End Sub
+0

每個帖子最好只有一個問題。 @SO很慷慨,可以在別人不可能的地方解決所有問題。特別慷慨,因爲這些問題在本網站的其他地方重複。 [最後一行](http://stackoverflow.com/questions/11169445/error-in-finding-last-used-cell-in-vba/11169920#11169920)和[加入列](http://stackoverflow.com/questions/8482759/simple-vba-array-join-not-working/8482852#8482852)and [clearing](http://stackoverflow.com/questions/19593907/clear-contents-of-cells-in-vba-使用列參考/ 19594089#19594089) –

回答

2

這應該拷貝做:

Sub CombineData() 
    Dim sheet As Worksheet 

    For Each sheet In Worksheets 
     If (sheet.Name <> "iPage Data Export") Then 
      sheet.Select 
      Range("A1", ActiveCell.SpecialCells(xlLastCell)).Select 
      Selection.Copy 
      Worksheets("iPage Data Export").Activate 
      Cells(1, ActiveCell.SpecialCells(xlCellTypeLastCell).Column + 1).Select 
      ActiveSheet.Paste 
     End If 
    Next 
End Sub 

對於連接,你需要更具體 - 但我想你應該打開一個更清晰的焦點新問題,如果你需要特定的幫助。

6

如何在運行例程之前清除此表上的數據?

Sht.Cells.ClearContents 

我怎樣才能使在該行的底部開始,每個拷貝功能(即用一個值最後一個單元格之後)?我曾嘗試過很多關於這個和其他董事會的建議,但都沒有成功。我承認我在這方面不是很有經驗。

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

詳細:

  • Rows.Count將返回的行數的表,所以在傳統風格的* .xls工作簿將返回數65,536。因此"C" & Rows.Count相同C65536

  • Range("C" & Rows.Count).End(xlUp)是一樣的去C65536和緊迫按Ctrl + - 命令End(xlDirection)告訴程序要走的最後一個單元格在這個範圍內。在這種情況下,我們將在包含在列數據的最後一個單元結束C.

  • .Offset(1, 0)意味着我們想要返回的範圍內的行和/或列的偏移量。 VBA使用RC(行列)引用,因此,無論何時您看到類似Offset()函數的函數都將兩個數字作爲參數傳遞,它通常與該行和列按照該順序相關。在這種情況下,我們需要比我們引用的最後一個單元格低一行的單元格。總之短語Range("C" & Rows.Count).End(xlUp).Offset(1, 0)表示轉到C列中的最後一個單元格,直到我們用數據命中最後一個單元格,然後返回下面的單元格 - 這將是下一個空單元格。

我怎樣才能把它複製到一個特定的列(目前它只是似乎默認爲A.

Range("C:C").Copy Destination:=Sheets("iPage Data Export").Range("A:A") 

您可以通過Destination參數在同一直線上,實際上繞過剪貼板(更快,更清潔)

如何在粘貼功能中連接多個列? 。如果我想它插入:A2 & 「」 B2,而不只是A2

比方說,你想引用列A,B和F - 只需使用:

Range("A1, B1, F1").EntireColumn 

總而言之,你可以簡化你現有的代碼到類似的東西(未經測試):

Sub CombineData() 

Dim Sht As Worksheet 
    For Each Sht In ActiveWorkbook.Worksheets 
     If Sht.Name <> "iPage Data Export" Then 
      Sht.Range("C1:C" & Cells(Sht.Rows.Count, 3).End(xlUp).Row).Copy Destination:=Sheets("iPage Data Export").Range("A:A") 
     End If 
    Next 

End Sub 
+0

具有良好解釋的可靠答案。我認爲連接位指的是將所有的值放在一個單元格中,因爲OP調用了普通的'&'操作符,但他們可能會澄清這一點。 –

+0

@Byron是最後一個有點不清楚,所以只是做了我能做的。 –

+1

教一個人釣魚;) –

相關問題