Másolás a következő üres sorba - Excel tippek

Tartalomjegyzék

NYARCH írja

Azt akarom, hogy az Excel egy teljes sort másoljon egy új Excel munkalapra egy cella bejegyzés alapján. Például vannak adataim az A8: AG8 cellákban, azt akarom, hogy az Excel a teljes sort átmásolja az "a" lapra, ha a H8 értéke "ir", és a "b" lapra, ha a H8 értéke "RR". A legbonyolultabb és nemcsak átmásolt rész, hanem a munkalap következő üres sorára van szükségem. A körülbelül 150 sorból minden típusból csak körülbelül 15 kerül átmásolásra egy új lapra.

A MrExcel 50 bónuszpontot ad minden olyan olvasónak, aki emlékszik a Lotus Magazine 10 nagyszerű tippet kínáló cikkére, ahol a 4. tipp a következő volt: "Használja a Vége gombot a tartomány végére lépéshez". Visszatérve a Lotus napjaira, a cellpointer-t bárhová teheti egy adatblokkban, megnyomhatja az END-t, majd lefelé, és a cella mutató a tartomány végéig halad. Az Excel hasonló funkcionalitással rendelkezik, a VBA hasonló funkcionalitással rendelkezik, és ez a kulcs ahhoz, hogy megtalálja az utolsó adatsort egy lapon.

A VBA technika az End (xlDown) használatával szimulálja az End + Down billentyűt, vagy az End (xlUp) szimulációt az End + Up billentyű szimulálásához. Ennek a gombsornak a megnyomásával a cella mutató egy összefüggő adattartomány következő élére kerül. Képzelje el, hogy az A1: A10 és A20: A30 értékek vannak. Induljon A1-ben. Nyomja meg a Vége + Le gombot, és a cella mutató az A10-re mozog. Nyomja meg a Vége + Le gombot és lépjen az A20-hoz, amely a következő összefüggő adatsor felső széle. Nyomd meg a Vége + Le gombot, és elmész az A30-ra. Igazából tanácstalan vagyok, hogyan magyarázzam el ezt a viselkedést egyszerű angol nyelven. Csak próbáld ki, és meglátod, hogyan működik.

Az a trükk, amelyet használok, hogy a táblázat utolsó sorában az A oszlopnál kezdem, majd az End + Up billentyűt lenyomom. Ezzel az adatokkal rendelkező utolsó sorba jutok. Ezután tudom, hogy a következő sort lefelé használom üres sorként.

Itt van egy brutális erő makró a heti probléma megoldására. Igen, ezt bizonyára elegánsabban megteheti egy AutoFilter segítségével. Az adatok jelenleg az 1. lapon találhatók, a címsorokkal a 2. sorban.

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

Tekintettel arra, hogy az Excel 2007 több mint 65 536 sorral rendelkezik, használhatja ezt a makrót, így előre kompatibilis. Vegye figyelembe, hogy itt a CELLS-t (Row, Column) használom a RANGE helyett:

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

A makró használatával kapcsolatos tippeket lásd: Az Excel VBA szerkesztő bemutatása.

érdekes cikkek...