In nächste leere Zeile kopieren - Excel-Tipps

Inhaltsverzeichnis

NYARCH schreibt

Ich möchte, dass Excel eine ganze Zeile basierend auf einem Zelleneintrag in ein neues Excel-Arbeitsblatt kopiert. Zum Beispiel habe ich Daten in den Zellen A8: AG8. Ich möchte, dass Excel die gesamte Zeile in das Blatt "a" kopiert, wenn der Wert in H8 "ir" ist, und in das Blatt "b", wenn der Wert in H8 "RR" ist. Der komplizierteste Teil und nicht nur kopiert, ich muss ihn in die nächste leere Zeile des Arbeitsblatts kopieren. Von den rund 150 Zeilen werden nur etwa 15 von jedem Typ tatsächlich auf ein neues Blatt kopiert.

MrExcel vergibt 50 Bonuspunkte an jeden Leser, der sich an den Artikel im Lotus Magazine erinnert, der 10 großartige Tipps enthält, wobei Tipp 4 lautete: "Verwenden Sie die End-Taste, um zum Ende eines Bereichs zu gelangen". Wenn Sie zu den Tagen von Lotus zurückkehren, können Sie den Zellenzeiger an einer beliebigen Stelle in einem Datenblock platzieren, END drücken und dann nach unten drücken, und der Zellenzeiger fährt bis zum Ende des Bereichs. Excel verfügt über ähnliche Funktionen, VBA über ähnliche Funktionen und dies ist der Schlüssel zum Auffinden der letzten Datenzeile auf einem Blatt.

Die VBA-Technik besteht darin, End (xlDown) zu verwenden, um die End + Down-Taste zu simulieren, oder End (xlUp), um die End + Up-Taste zu simulieren. Durch Drücken dieser Tastenfolge wird der Zellenzeiger an die nächste Kante eines zusammenhängenden Datenbereichs verschoben. Stellen Sie sich vor, es gibt Werte in A1: A10 und A20: A30. Beginnen Sie in A1. Drücken Sie Ende + Ab und der Zellenzeiger bewegt sich zu A10. Drücken Sie Ende + Ab und Sie gelangen zu A20, der Oberkante des nächsten zusammenhängenden Datenbereichs. Drücken Sie Ende + Ab und Sie gelangen zu A30. Ich bin eigentlich ratlos, wie ich dieses Verhalten in einfachem Englisch erklären kann. Probieren Sie es einfach aus und Sie werden sehen, wie es funktioniert.

Der Trick, den ich benutze, besteht darin, in Spalte A in der letzten Zeile der Tabelle zu beginnen und dann auf Ende + Auf zu klicken. Dies bringt mich in die letzte Zeile mit Daten. Ich weiß dann, dass ich die nächste Zeile als leere Zeile verwenden muss.

Hier ist ein Brute-Force-Makro, um das Problem dieser Woche zu lösen. Ja, mit einem AutoFilter könnten Sie dies sicherlich eleganter machen. Die Daten befinden sich derzeit auf Blatt 1 mit Überschriften in Zeile 2.

Public Sub CopyRows() Sheets("Sheet1").Select ' Find the last row of data FinalRow = Range("A65536").End(xlUp).Row ' Loop through each row For x = 2 To FinalRow ' Decide if to copy based on column H ThisValue = Range("H" & x).Value If ThisValue = "ir" Then Range("A" & x & ":AG" & x).Copy Sheets("a").Select NextRow = Range("A65536").End(xlUp).Row + 1 Range("A" & NextRow).Select ActiveSheet.Paste Sheets("Sheet1").Select ElseIf ThisValue = "RR" Then Range("A" & x & ":AG" & x).Copy Sheets("b").Select NextRow = Range("A65536").End(xlUp).Row + 1 Range("A" & NextRow).Select ActiveSheet.Paste Sheets("Sheet1").Select End If Next x End Sub

Da Excel 2007 mehr als 65.536 Zeilen enthält, können Sie dieses Makro verwenden, damit es vorwärtskompatibel ist. Beachten Sie, dass ich hier CELLS (Row, Column) anstelle von RANGE verwende:

Public Sub CopyRows() Sheets("Sheet1").Select ' Find the last row of data FinalRow = Cells(Rows.Count, 1).End(xlUp).Row ' Loop through each row For x = 2 To FinalRow ' Decide if to copy based on column H ThisValue = Cells(x, 8).Value If ThisValue = "ir" Then Cells(x, 1).Resize(1, 33).Copy Sheets("a").Select NextRow = Cells(Rows.Count, 1).End(xlUp).Row + 1 Cells(NextRow, 1).Select ActiveSheet.Paste Sheets("Sheet1").Select ElseIf ThisValue = "RR" Then Cells(x, 1).Resize(1, 33).Copy Sheets("b").Select NextRow = Cells(Rows.Count, 1).End(xlUp).Row + 1 Cells(NextRow, 1).Select ActiveSheet.Paste Sheets("Sheet1").Select End If Next x End Sub

Tipps zur Verwendung eines Makros finden Sie unter Einführung in den Excel VBA-Editor.

Interessante Beiträge...