Jump to content

VBA för copy-paste till sista rad


Go to solution Solved by 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! 

Link to comment
Share on other sites

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
Link to comment
Share on other sites

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! 

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

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

×
×
  • Create New...