Avatar billede mcvz Juniormester
29. november 2022 - 16:46 Der er 5 kommentarer og
1 løsning

VBA til at flytte data

Hej Eksperten

Jeg har en række data, hvor jeg gerne vil have Excel til at flytte hver anden celle op, så den står på linje med den lige over.

Jeg kan få den til at gøre det med de første to, men hvordan får jeg den til at fortsætte.


Sub Flyt
    Range("A2").Select
    Selection.Cut Destination:=Range("B1")
End Sub


Resultatet bliver, at værdien i A1 og A2 kommer til at stå i A1 og B1.
Nu skal Excel så fortsætte videre til A4 og flytte værdien fra den celle op i B3, så celle A3 og B3 står i samme række.

Når alt det så er gjort, så har jeg et Call til en VBA som sletter de tomme rækker, men den er som udgangspunkt løst.
Avatar billede jens48 Ekspert
29. november 2022 - 17:44 #1
Prøv med denne makro, som både flytter og sletter linjen efter flytning

Sub Flyt()
LastRow = Cells(65356, 1).End(xlUp).Row
For x = LastRow To 2 Step -2
Cells(x - 1, 2) = Cells(x, 1)
Rows(x).Delete
Next
End Sub
Avatar billede store-morten Ekspert
29. november 2022 - 17:50 #2
Prøv:
Sub Flyt()
    Dim Rk As Integer

    For Rk = 2 To 4 Step 2 'Flyt række 2 og 4
   
        Range("A" & Rk).Select
        Selection.Cut Destination:=Range("B" & Rk - 1)
   
    Next
End Sub
Avatar billede mcvz Juniormester
30. november 2022 - 11:59 #3
Hej jens48

Den virker ikke, hvis nr. er ulige, så forskyder den i rækker B
Avatar billede mcvz Juniormester
30. november 2022 - 12:10 #4
Hej igen jens48

Jeg fandt lige fejlen, men ikke løsningen på koden.

Hvis rækken som indeholder den sidste værdi er ulige, så kan den godt flyttet op rigtigt, men hvis rækken er lige, så forskyder den det den flytter med en op, da den mangler en værdi i den sidste den forsøger at flytte.
Avatar billede jens48 Ekspert
30. november 2022 - 12:56 #5
Jeg er ikke sikker på hvor der kommer til at mangle en værdi, men prøv med denne makro, hvor der lægges en til, hvis sidste række er lige

Sub Flyt()
LastRow = Cells(65356, 1).End(xlUp).Row
LastRow = LastRow + (Int(LastRow / 2) - LastRow / 2 = 0) * 1
For x = LastRow To 2 Step -2
Cells(x - 1, 2) = Cells(x, 1)
Rows(x).Delete
Next
End Sub
Avatar billede mcvz Juniormester
01. december 2022 - 21:42 #6
Der var løsningen, tak for hjælpen
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester