Copiați în rândul următor gol - Sfaturi Excel

Cuprins

NYARCH scrie

Vreau ca Excel să copieze un rând întreg într-o nouă foaie de lucru Excel pe baza unei intrări de celule. De exemplu, am date în celulele A8: AG8, vreau ca Excel să copieze întregul rând în foaia „a” dacă valoarea din H8 este „ir” și foaia „b” dacă valoarea din H8 este „RR”. Cea mai complicată parte și nu doar copiată, trebuie să fie copiată pe următorul rând gol de pe foaia de lucru. Din cele 150 de rânduri, aproximativ 15 din fiecare tip vor fi copiate într-o foaie nouă.

MrExcel va acorda 50 de puncte bonus oricărui cititor care își amintește articolul din revista Lotus care oferă 10 sfaturi grozave, în care sfatul # 4 era „Folosiți tasta End pentru a vă deplasa la sfârșitul unei game”. Revenind la zilele Lotus, ați putea pune indicatorul celular oriunde într-un bloc de date, apăsați END apoi jos, iar indicatorul de celulă ar merge până la sfârșitul intervalului. Excel are funcționalități similare, VBA are funcționalități similare și aceasta este cheia pentru a găsi ultimul rând de date pe o foaie.

Tehnica VBA este de a utiliza End (xlDown) pentru a simula tasta End + Down sau End (xlUp) pentru a simula tasta End + Up. Apăsarea acestei secvențe de taste va muta indicatorul de celulă la următoarea margine a unui interval contigu de date. Imaginați-vă că există valori în A1: A10 și A20: A30. Începeți în A1. Apăsați End + Down și indicatorul de celulă se deplasează la A10. Apăsați End + Down și mergeți la A20, care este marginea superioară a următoarei game adiacente de date. Apăsați End + Down și veți merge la A30. De fapt, am pierdut cum să explic acest comportament în engleză simplă. Încercați-l și veți vedea cum funcționează.

Trucul pe care îl folosesc este să încep de la coloana A din ultimul rând din foaia de calcul și apoi să apese End + Up. Acest lucru mă va duce la ultimul rând cu date. Știu apoi să folosesc următorul rând în jos ca un rând gol.

Iată un macro cu forță brută pentru a rezolva problema din această săptămână. Da, cu siguranță ați putea face acest lucru mai elegant cu un AutoFilter. Datele sunt în prezent pe Sheet1, cu titluri în rândul 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

Având în vedere că Excel 2007 are mai mult de 65.536 de rânduri, puteți utiliza această macrocomandă, astfel încât să fie compatibilă cu transmiterea. Rețineți că folosesc CELLS (Row, Column) în loc de RANGE aici:

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

Pentru sfaturi despre cum să utilizați o macro, consultați Introducerea editorului Excel VBA.

Articole interesante...