Gå till innehåll

VBA för copy-paste till sista rad


Gå till lösning Löst av Deppodi,

Recommended Posts

Hej,

 

A1, B1 och C1 är rubriker.

A2:C2 är värden som jag vill kopiera och klistra in på A3:C3.
Sen vill jag kopiera A2:C2 igen och klistra in på nästa lediga rad under A3:C3, dvs. A4:C4. Sen kopiera A2:C2 och klistra in på nästa lediga rad igen A5:C5. Osv. Osv. Osv. 

Det är alltid A2:C2 som kommer att kopieras, så den är ju lätt att sätta upp som ett fast värde, men sen förstår jag inte hur jag skapar en range som kopierar detta, xlfilldown och offset 1. 

Jag förstår rent teoretiskt att jag ska köra någon uppsättning blir i stil med nedan, men jag får inte till det. Någon som vill hjälpa mig? 😊

Sub CopyAndPaste()    
Dim i As Long    
For i = 1 To 1        
Range("a2:c2").Copy Destination:=Range(.ActiveCell).Offset(i, 0)    
Next i
End Sub

 

Förlåt för min okunskap och tack på förhand för hjälpen! 

Länk till kommentar
Dela på andra webbplatser

Om du ändrar

Range("A2").Select
till
Range("A1").Select

Så funkar det även första gången (när A3:C3 är tomt)

en annan metod för att hitta den sista ifyllda är att söka "baklänges" efter jokertecknet "*" i kolumnen

Range("A:A").Find(What:="*", SearchDirection:=xlPrevious).Offset(1, 0).Activate

Då räcker det att det finns en enda cell med data. xlDown kräver minst två rader data för att funka bra. Dessutom behöver du inte veta vilket format filen har (hur många rader den klarar av) - vilket kräv som du vill köra XlUpp

 

Du kan även skippa klipp/klistra och köra en tilldelning istället. Då blir din kod bara en rad:

Sub Makro3()
Range("A1").End(xlDown).Offset(1, 0).Resize(1, 3).Value = Range("A2:C2").Value
End Sub

Men jag misstänker att din kod är enklare att förstå om två år. 

  • Like 1
Länk till kommentar
Dela på andra webbplatser

10 timmar sedan, MH_ sade:

Om du ändrar

Range("A2").Select
till
Range("A1").Select

Så funkar det även första gången (när A3:C3 är tomt)

en annan metod för att hitta den sista ifyllda är att söka "baklänges" efter jokertecknet "*" i kolumnen

Range("A:A").Find(What:="*", SearchDirection:=xlPrevious).Offset(1, 0).Activate

Då räcker det att det finns en enda cell med data. xlDown kräver minst två rader data för att funka bra. Dessutom behöver du inte veta vilket format filen har (hur många rader den klarar av) - vilket kräv som du vill köra XlUpp

 

Du kan även skippa klipp/klistra och köra en tilldelning istället. Då blir din kod bara en rad:

Sub Makro3()
Range("A1").End(xlDown).Offset(1, 0).Resize(1, 3).Value = Range("A2:C2").Value
End Sub

Men jag misstänker att din kod är enklare att förstå om två år. 

Bra tips, tack! Det här ska jag testa. Det är ju det det handlar om, att hitta andra vägar som fungerar på ett lite smidigare sätt! Jag uppskattar att du delar ditt svar, dels för att jag har förstått att det är en sport i sig att försöka filtrera bort så mycket onödig kod som möjligt - i alla fall med de utvecklare som jag har pratat med. Och dels för att det utvecklar mina kunskaper när jag får ta del av era tips och tricks. Nu har jag inte hålla på med makro så länge, men upplever du ibland att du går tillbaka till gamla makro och tänker "Vad är det jag har gjort här egentligen?!"

Oavsett, pluspoäng för att få ner hela makro till en rad. Jag tycker det var snyggt! 

Länk till kommentar
Dela på andra webbplatser

Delta i dialogen

Du kan skriva svaret nu och registrera dig senare, Om du har ett konto, logga in nu för att svara på inlägget.

Gäst
Svara i detta ämne...

×   Du har klistrat in innehåll med formatering.   Ta bort formatering

  Only 75 emoji are allowed.

×   Din länk har automatiskt bäddats in.   Visa som länk istället

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Skapa nytt...