Raksta NYARCH
Es gribu, lai Excel kopē visu rindu uz jaunu Excel darblapu, pamatojoties uz šūnu ierakstu. Piemēram, man šūnās A8: AG8 ir dati, es vēlos, lai Excel kopē visu rindu uz lapu "a", ja vērtība H8 ir "ir", un lapu "b", ja vērtība H8 ir "RR". Sarežģītākā daļa, nevis tikai nokopēta, man tā jāpārkopē uz nākamo tukšo darblapas rindu. No aptuveni 150 rindām tikai apmēram 15 no katra veida tiks kopētas uz jaunu lapu.
MrExcel piešķirs 50 bonusa punktus ikvienam lasītājam, kurš atceras Lotus Magazine rakstu, kurā tika piedāvāti 10 lieliski padomi, kur 4. padoms bija “Izmantojiet beigu taustiņu, lai pārietu uz diapazona beigām”. Atgriežoties pie Lotus laikiem, jūs varat ievietot mobilo rādītāju jebkurā datu bloka vietā, nospiediet END un pēc tam uz leju, un šūnu rādītājs virzīsies līdz diapazona beigām. Excel ir līdzīga funkcionalitāte, VBA ir līdzīga funkcionalitāte, un tas ir galvenais, lai lapā atrastu pēdējo datu rindu.
VBA paņēmiens ir izmantot End (xlDown), lai simulētu taustiņu End + Down vai End (xlUp), lai simulētu taustiņu End + Up. Nospiežot šo taustiņu secību, šūnu rādītājs tiks pārvietots uz blakus esošo datu diapazona nākamo malu. Iedomājieties, ka A1: A10 un A20: A30 ir vērtības. Sāciet ar A1. Noklikšķiniet uz Beigas + Uz leju, un šūnas rādītājs pāriet uz A10. Nospiediet Beigas + Leju un dodieties uz A20, kas ir nākamā blakus esošā datu diapazona augšējā mala. Nospiediet End + Down un jūs dosieties uz A30. Man patiesībā ir zaudējums, kā izskaidrot šo uzvedību vienkāršā angļu valodā. Vienkārši izmēģiniet to un redzēsiet, kā tas darbojas.
Triks, ko izmantoju, ir sākt ar A sleju izklājlapas pēdējā rindā un pēc tam nospiediet taustiņu End + Up. Tas mani aizvedīs uz pēdējo rindu ar datiem. Tad es zinu izmantot nākamo rindu lejup kā tukšu rindu.
Šeit ir brutālu spēku makro, lai atrisinātu šīs nedēļas problēmu. Jā, jūs noteikti to varētu izdarīt daudz elegantāk, izmantojot automātisko filtru. Pašlaik dati ir Sheet1 ar virsrakstiem 2. rindā.
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
Ņemot vērā to, ka programmā Excel 2007 ir vairāk nekā 65 536 rindas, varat izmantot šo makro, lai tas būtu saderīgs uz priekšu. Ņemiet vērā, ka šeit es RANGE vietā izmantoju CELLS (Row, Column):
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
Padomus par makro lietošanu skatiet sadaļā Iepazīšanās ar Excel VBA redaktoru.