Avatar billede jensb Nybegynder
23. september 2008 - 13:49 Der er 4 kommentarer og
1 løsning

VBA, Excel - Kopiere rækker - optimering af script

Hej

Jeg skal have kopieret en masse række i et excelark, til et andet ark i samme excelfil.

Men rækkerne skal kopieres til andre rækker. Så f.eks. række 4 i Ark1 skal kopieres til række 8 i Ark2, og række 5 i Ark1 skal kopieres til række 13 i Ark2.

Der er en del rækker der skal kopieres, så jeg har lavet følgende 2 scripts, som begge fungerer:

FraListe = "1,2,3,4,5,6,7,8,9,10,11,12,13,14,15"
TilListe = "1,4,7,9,10,11,12,13,14,15,20,21,22,23,30"
ArrFraListe = Split(FraListe, ",")
ArrTilListe = Split(TilListe, ",")
For raekke = LBound(ArrFraListe) To UBound(ArrFraListe)
kolonne = 1
  For kolonne = 1 To 20
  Sheets("Ark2").Cells(ArrTilListe(raekke), kolonne) = Sheets("Ark1").Cells(ArrFraListe(raekke), kolonne)
Next
Next


ELLER


FraListe = "1,2,3,4,5,6,7,8,9,10,11,12,13,14,15"
TilListe = "1,4,7,9,10,11,12,13,14,15,20,21,22,23,30"
ArrFraListe = Split(FraListe, ",")
ArrTilListe = Split(TilListe, ",")
For raekke = LBound(ArrFraListe) To UBound(ArrFraListe)
Sheets("Ark1").Select
Range("B" & ArrFraListe(raekke) & ":K" & ArrFraListe(raekke)).Copy
Sheets("Ark2").Select
Range("B" & ArrTilListe(raekke) & ":K" & ArrTilListe(raekke)).Select
ActiveSheet.Paste


Men hvilken af disse metoder er den bedste?
I den første metode hvor jeg looper både rækker ned, og samtidig har et loop som skrive kolonnerne henad, kunne jeg forestille mig at det med mange rækker og kolonner bliver en stor proces.

I nummer to løsning har jeg kun ét loop, som skriver rækkerne. Men tilgengæld skiftes der hele tiden mellem arkene for at kopiere rækkerne, hvilket heller ikke virker optimalt.

Eller er der en bedre måde dette kan gøres på?
Avatar billede kabbak Professor
23. september 2008 - 19:04 #1
ArrFraListe = Array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15)
ArrTilListe = Array(1, 4, 7, 9, 10, 11, 12, 13, 14, 15, 20, 21, 22, 23, 30)
For raekke = LBound(ArrFraListe) To UBound(ArrFraListe)
Sheets("Ark1").Range("B" & ArrFraListe(raekke) & ":K" & ArrFraListe(raekke)).Copy _
Sheets("Ark2").Range("B" & ArrTilListe(raekke) & ":K" & ArrTilListe(raekke))
Next
Avatar billede kabbak Professor
23. september 2008 - 19:20 #2
den sidste linje kan kortes af, den skal bare bruge den første celle, startcellen

ArrFraListe = Array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15)
ArrTilListe = Array(1, 4, 7, 9, 10, 11, 12, 13, 14, 15, 20, 21, 22, 23, 30)
For raekke = LBound(ArrFraListe) To UBound(ArrFraListe)
Sheets("Ark1").Range("B" & ArrFraListe(raekke) & ":K" & ArrFraListe(raekke)).Copy _
Sheets("Ark2").Range("B" & ArrTilListe(raekke))
Next
Avatar billede jensb Nybegynder
23. september 2008 - 20:10 #3
Perfekt, det virker.

Tænkte nok at det måtte være muligt at bruge "copy" uden at skulle skifte mellem arkene, men har bare ikke selv lige fundet frem til den rigtige syntax.

Smid et svar, så er der point.
Avatar billede kabbak Professor
23. september 2008 - 21:50 #4
et svar ;-))
Avatar billede jensb Nybegynder
24. september 2008 - 12:50 #5
Endnu engang tak for hjælpen, det fungerer perfekt.
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
Kategori
Kurser inden for grundlæggende programmering

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