Kopiraj v naslednjo prazno vrstico - Nasveti za Excel

Kazalo

Piše NYARCH

Želim, da Excel kopira celo vrstico v nov Excelov delovni list, ki temelji na vnosu celice. Na primer imam podatke v celicah A8: AG8, želim, da Excel kopira celotno vrstico na list "a", če je vrednost v H8 "ir", in list "b", če je vrednost v H8 "RR". Najbolj zapleten del in ne samo kopiran, ga moram kopirati v naslednjo prazno vrstico na delovnem listu. Od približno 150 vrstic bo le približno 15 vsake vrste dejansko kopirano na nov list.

MrExcel bo podelil 50 bonus točk vsakemu bralcu, ki se spomni članka iz revije Lotus, ki ponuja 10 odličnih nasvetov, pri čemer je bil nasvet št. 4 "Uporabite tipko za konec, da se premaknete na konec dometa". Če se vrnemo v Lotusove dni, lahko kazalnik celic postavite kamor koli v blok podatkov, pritisnete END in nato navzdol in kazalec celice se pripelje do konca obsega. Excel ima podobno funkcionalnost, VBA ima podobno funkcionalnost in to je ključ do iskanja zadnje vrstice podatkov na listu.

Tehnika VBA je uporaba End (xlDown) za simulacijo tipke End + Down ali End (xlUp) za simulacijo tipke End + Up. Če pritisnete to zaporedje tipk, se kazalec celice premakne na naslednji rob sosednjega obsega podatkov. Predstavljajte si, da so vrednosti v A1: A10 in A20: A30. Začnite v A1. Pritisnite End + Down in kazalec celice se premakne na A10. Pritisnite End + Down in preidete na A20, ki je zgornji rob naslednjega sosednjega obsega podatkov. Pritisnite End + Down in prešli boste na A30. Pravzaprav sem v težavah, kako to vedenje razložiti v preprosti angleščini. Preizkusite in videli boste, kako deluje.

Trik, ki ga uporabljam, je začeti v stolpcu A v zadnji vrstici preglednice in nato pritisniti End + Up. To me bo pripeljalo do zadnje vrstice s podatki. Nato znam uporabiti naslednjo vrstico navzdol kot prazno vrstico.

Tukaj je surovi makro za rešitev problema tega tedna. Da, to bi zagotovo lahko naredili bolj elegantno s samodejnim filtrom. Trenutno so podatki na Sheet1 z naslovi v vrstici 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

Glede na to, da ima Excel 2007 več kot 65.536 vrstic, lahko uporabite ta makro, da je združljiv z naprej. Upoštevajte, da tukaj namesto RANGE uporabljam 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

Za nasvete o uporabi makra glejte Uvod v urejevalnik Excel VBA.

Zanimive Članki...