Kopeerimine järgmisele tühjale reale - Exceli näpunäited

Lang L: none (table-of-contents)

NYARCH kirjutab

Ma tahan, et Excel kopeeriks terve rea uude Exceli töölehte lahtrikirje põhjal. Näiteks on mul lahtrites A8: AG8 andmed, ma tahan lasta Excelil kogu rida kopeerida lehele "a", kui H8 väärtus on "ir", ja lehel "b", kui H8 väärtus on "RR". Kõige keerulisem ja mitte lihtsalt kopeeritud osa, vajan, et see kopeeritakse töölehe järgmisele tühjale reale. Umbes 150-st reast kopeeritakse igale tüübile ainult umbes 15 uude lehele.

MrExcel annab 50 boonuspunkti igale lugejale, kes mäletab ajakirja Lotus Magazine artiklit, mis pakub 10 suurepärast näpunäidet, kus näpunäide nr 4 oli "Kasutage vahemiku lõppu liikumiseks klahvi Lõpeta". Lotuse päevade juurde tagasi tulles võite paigutada kärjepunkti ükskõik millisesse andmeplokki, vajutada END ja seejärel allapoole ning lahtrikursor sõidab vahemiku lõpuni. Excelis on sarnane funktsionaalsus, VBA-s sarnane funktsionaalsus ja see on võti lehelt viimase andmerea leidmiseks.

VBA tehnikana kasutatakse klahvi End + Down simuleerimiseks End (xlDown) või klahvi End + Up simuleerimiseks End (xlUp). Selle klahvijärjestuse vajutamine viib raku kursori külgneva andmevahemiku järgmisse serva. Kujutage ette, et väärtustes A1: A10 ja A20: A30 on väärtusi. Alustage A1-st. Vajutage End + Down ja lahtrikursor liigub punktile A10. Vajutage nuppu End + Down ja liikuge punktile A20, mis on järgmise külgneva andmevahemiku ülemine serv. Vajutage End + Down ja te lähete A30-le. Mul on tegelikult kahju, kuidas seda käitumist lihtsas inglise keeles seletada. Lihtsalt proovige seda ja näete, kuidas see töötab.

Trikk, mida kasutan, on alustada tabeli viimase rea veerust A ja seejärel vajutada nuppu End + Up. See viib mind andmete viimasesse ritta. Seejärel tean järgmist rida kasutada tühja reana.

Selle nädala probleemi lahendamiseks on siin toore jõuga makro. Jah, kindlasti saaksite seda AutoFilteriga elegantsemalt teha. Praegu on andmed Sheet1-l ja pealkirjad 2. real.

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

Arvestades, et Excel 2007-l on rohkem kui 65 536 rida, võiksite seda makrot kasutada nii, et see oleks edasi ühilduv. Pange tähele, et siin kasutan RANGE asemel RAKKEID (rida, veerg):

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

Makro kasutamise näpunäiteid leiate teemast Exceli VBA-redaktori tutvustus.

Huvitavad Artiklid...