Kopiuj do następnego pustego wiersza - porady dotyczące programu Excel

Spisie treści

NYARCH pisze

Chcę, aby program Excel skopiował cały wiersz do nowego arkusza programu Excel na podstawie wpisu w komórce. Na przykład mam dane w komórkach A8: AG8, chcę, aby program Excel skopiował cały wiersz do arkusza „a”, jeśli wartość w H8 to „ir”, i arkusz „b”, jeśli wartość w H8 to „RR”. Najbardziej skomplikowana część, a nie tylko skopiowana, potrzebuję, aby została skopiowana do następnego pustego wiersza w arkuszu. Spośród około 150 wierszy tylko około 15 każdego typu zostanie skopiowanych do nowego arkusza.

MrExcel przyzna 50 dodatkowych punktów każdemu czytelnikowi, który pamięta artykuł Lotus Magazine zawierający 10 świetnych wskazówek, w którym wskazówka nr 4 brzmiała: „Użyj klawisza końca, aby przejść do końca zakresu”. Wracając do czasów Lotus, można było umieścić wskaźnik komórki w dowolnym miejscu w bloku danych, nacisnąć przycisk END, a następnie nacisnąć w dół, a wskaźnik komórki przemieściłby się do końca zakresu. Excel ma podobną funkcjonalność, VBA ma podobną funkcjonalność i jest to klucz do znalezienia ostatniego wiersza danych w arkuszu.

Technika VBA polega na użyciu End (xlDown) do symulacji klawisza End + Down lub End (xlUp) do symulacji klawisza End + Up. Naciśnięcie tej sekwencji klawiszy spowoduje przeniesienie wskaźnika komórki do następnej krawędzi ciągłego zakresu danych. Wyobraź sobie, że w A1: A10 i A20: A30 są wartości. Zacznij w A1. Naciśnij End + Down, a wskaźnik komórki przesunie się do A10. Naciśnij End + Down i przejdź do A20, która jest górną krawędzią następnego ciągłego zakresu danych. Naciśnij End + Down, a przejdziesz do A30. Właściwie nie wiem, jak wyjaśnić to zachowanie prostym angielskim. Po prostu spróbuj, a zobaczysz, jak to działa.

Sztuczka, której używam, polega na rozpoczęciu od kolumny A w ostatnim wierszu arkusza kalkulacyjnego, a następnie naciśnięciu przycisku End + Up. To przeniesie mnie do ostatniego wiersza z danymi. Wiem wtedy, że następny wiersz poniżej będzie pusty.

Oto makro brutalnej siły, które rozwiązuje problem z tego tygodnia. Tak, z pewnością możesz to zrobić bardziej elegancko dzięki Autofiltrowi. Dane znajdują się obecnie w arkuszu Sheet1, z nagłówkami w wierszu 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

Biorąc pod uwagę, że Excel 2007 ma ponad 65 536 wierszy, można użyć tego makra, aby było zgodne z przyszłymi wersjami. Zauważ, że używam CELLS (Row, Column) zamiast RANGE tutaj:

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

Aby uzyskać porady dotyczące używania makra, zobacz Wprowadzenie do edytora Excel VBA.

Interesujące artykuły...