2016-06-21 10 views
1

ich für eine Spalte in Menschen Arbeitsmappe bin auf der Suche und es auf die nächste leere Zeile in rota Arbeitsmappe zu kopieren. Das Problem, das ich habe, ist, dass es auch den Spaltenkopf kopiert (erste Reihe). Auf der Grundlage des folgenden Codes Vorschläge zum Ausschließen der ersten Zeile mit den Spaltenüberschriften?vba - Kopieren Sie alle Daten in Spalte außer Spaltentitel

' 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) 

Im Erraten seiner am unten Punkt, dass ich nicht die erste Zeile angeben müssen stattdessen die vollständige Spalte des Kopierens dem Namen „num“ ...

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

Check this out: http://superuser.com/questions/42304/select-an-entire-column-minus-header-row-in-an-excel-macro – Vityata

Antwort

3

Um es so viel wie es ist zu verlassen, schlage ich vor, nur Intersect, UsedRange und Offset zu verwenden. ändern Sie einfach Ihren letzten Teil zu:

' 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

Arbeitete genau wie ich es brauchte, danke –

+0

Sie sind willkommen :) –

0

Es ist in der Tat die

kopieren

das nimmt den Header, aufgrund der Tatsache, dass es die gesamte Spalte kopiert (daher die ".Columns(). Kopieren").

würde ich mit Array, um mit einem anderen Ansatz vorschlagen & kopieren fügen Sie die Daten in dem Arbeitsblatt rota:

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 

Dies sollte den Trick.

+0

Weil ich bin gespannt: * "Warum würden Sie vorschlagen, ein Array zu verwenden, um die Daten zu kopieren und einzufügen?" * –

+0

die obige Antwort tat, was ich brauchte, ohne mein Format zu ändern, aber danke für die Antwort –

+0

Kein Problem Aaron C. Hallo Dirk Reichel, ich benutze recht häufig Arrays, da ihre Handhabung nützlich sein kann, um Berechnungen zwischen dem Copy & Paste-Prozess durchzuführen, und etwas schnell ist (Sie können immer noch Spalten während ihrer Verarbeitung hinzufügen, während die Anfangsdaten erhalten bleiben). Aber ich nehme Kenntnis von Ihrer Lösung, die in diesem Fall nett und vor allem praktischer ist. –

Verwandte Themen