Kopiera till nästa tomma rad - Excel-tips

Innehållsförteckning

NYARCH skriver

Jag vill att Excel ska kopiera en hel rad till ett nytt Excel-kalkylblad baserat på en cellpost. Till exempel har jag data i cellerna A8: AG8, jag vill att Excel ska kopiera hela raden till ark "a" om värdet i H8 är "ir" och ark "b" om värdet i H8 är "RR". Den mest komplicerade delen och inte bara kopieras, jag behöver den kopieras till nästa tomma rad på kalkylbladet. Av de cirka 150 raderna kommer bara cirka 15 av varje typ att kopieras till ett nytt ark.

MrExcel kommer att tilldela 50 bonuspoäng till alla läsare som kommer ihåg Lotus Magazine-artikeln med 10 bra tips, där tip # 4 var "Använd End-tangenten för att flytta till slutet av ett intervall". Om vi ​​går tillbaka till Lotus dagar kan du placera cellpekaren var som helst i ett datablock, slå END och sedan ner, och cellpekaren skulle rida till slutet av intervallet. Excel har liknande funktioner, VBA har liknande funktioner, och detta är nyckeln till att hitta den sista raden med data på ett ark.

VBA-tekniken är att använda End (xlDown) för att simulera End + Down-tangenten eller End (xlUp) för att simulera End + Up-tangenten. Genom att trycka på denna tangentsekvens flyttas cellpekaren till nästa kant i ett sammanhängande dataområde. Tänk dig att det finns värden i A1: A10 och A20: A30. Börja i A1. Tryck på Slut + Ned och cellpekaren flyttas till A10. Hit End + Down och du går till A20, som är den övre kanten av nästa sammanhängande dataområde. Tryck på End + Down så går du till A30. Jag är faktiskt förlorad hur jag förklarar detta beteende på enkel engelska. Prova bara så får du se hur det fungerar.

Tricket som jag använder är att börja vid kolumn A i den sista raden i kalkylbladet och sedan trycka på Slut + Upp. Detta tar mig till den sista raden med data. Jag vet då att använda nästa rad ner som en tom rad.

Här är ett makro för brute-force för att lösa veckans problem. Ja, du kan säkert göra det mer elegant med ett autofilter. Uppgifterna finns för närvarande på Sheet1, med rubriker i rad 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

Med tanke på att Excel 2007 har mer än 65 536 rader kan du använda detta makro så att det är framåtkompatibelt. Observera att jag använder CELLS (rad, kolumn) istället för RANGE här:

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

För tips om hur du använder ett makro, se Introduktion till Excel VBA Editor.

Intressanta artiklar...