2016-06-21 65 views
1

我正在搜索人員中的一列工作簿並將其複製到rota工作簿中的下一個空行。我遇到的問題是它也複製列標題(第一行)。根據下面的代碼,關於如何排除包含列標題的第一行的任何建議?vba - 複製除列標題外的所有數據

' find the column in the people workbook 
name = WorksheetFunction.Match("name", people.Sheets("Open").Rows(1), 0) 
num = WorksheetFunction.Match("num", people.Sheets("Open").Rows(1), 0) 

'find the next empty row 
Dim lastrow As Integer 
lastrow = rota.Sheets("Offer").Range("A" & Rows.Count).End(xlUp).Row + 1 

' copy from the people workbook into the next free space in rota workbook 
people.Sheets("Open").Columns(name).Copy Destination:=rota.Sheets("Offer").Range("A" & Rows.Count).End(xlUp).Offset(1) 
people.Sheets("Open").Columns(num).Copy Destination:=rota.Sheets("Offer").Range("B" & lastrow) 

林在以下點,我需要指定不第一行復制,而不是複製命名爲「民」整列猜測它...

people.Sheets("Open").Columns(num).Copy Destination:=rota.Sheets("Offer").Range("B" & lastrow) 
+0

檢查了這一點:http://superuser.com/questions/42304/select-an-entire-column-minus-header-row-in-an-excel-macro – Vityata

回答

3

要保留它,我建議只使用Intersect,UsedRangeOffset。只要改變你的最後部分:

' copy from the people workbook into the next free space in rota workbook 
With people.Sheets("Open") 
    Intersect(.Columns(Name), .UsedRange.Offset(1)).Copy Destination:=rota.Sheets("Offer").Range("A" & Rows.Count).End(xlUp).Offset(1) 
    Intersect(.Columns(num), .UsedRange.Offset(1)).Copy Destination:=rota.Sheets("Offer").Range("B" & lastrow) 
End With 
+0

完全像我需要的那樣工作,謝謝 –

+0

歡迎:) –

0

它確實是

.Columns(num).Copy 

由於它複製整個列(因此是「.Columns()。Copy」),因此它將採用標題。

我會建議使用,以便與陣列不同的方法來複制&粘貼數據在工作表中羅塔

Dim arrayCopied(), lastline as long 

' find the column in the people workbook 
Name = WorksheetFunction.Match("name", people.Sheets("Open").Rows(1), 0) 
num = WorksheetFunction.Match("num", people.Sheets("Open").Rows(1), 0) 

'Loading the data from sheet Open in the array 
' We load the array from the second line : .cells(2,name) 
With people.Sheets("Open") 
    arrayCopied = Range(.Cells(2, Name), .Cells(2, num).End(xlDown)) 
End With 

' Then we paste the data in the corresponding place in the rota sheet 
With rota.Sheets("Offer") 
    'First we calculate where the last row is: 
    lastline = .Range(.Cells(1, 1), .Cells(1, 1).End(xlDown)).Rows.Count 
    'Then we paste the array starting at the last line and finishing at the last line 
    '+ the number of lines of the corresponding copied array - 1 (because Excel cells start at 1 and not at 0) 
    .Range(.Cells(lastline, 1), .Cells(lastline + UBound(arrayCopied, 1) - 1, 2)) = arrayCopied 
End With 

這應該做的伎倆。

+0

因爲我很好奇:*「爲什麼你會建議使用數組來複制和粘貼數據?」* –

+0

上面的答案做了我所需要的而不必更改我的格式,但感謝您的答案 –

+0

沒問題Aaron C. 嗨Dirk Reichel,以及我很常用的數組,因爲它們的處理可以在複製和粘貼過程之間進行計算並且速度有點快(您可以在處理過程中添加列,同時保留初始數據)。 但我記下你的解決方案,這很好,尤其是在這種情況下更實用的方法。 –

相關問題