Avatar billede lubker Nybegynder
29. april 2015 - 14:02 Der er 4 kommentarer og
1 løsning

VB kode i Excel - Effektiv kopiering af data.

Jeg har et excel dokument (main) hvor I jeg importerer et andet excel dokument(data) med en lang række data.
- Dette gør jeg ved VB kode, og det virker rigtig fint.

I "main" arket kan jeg ud for hver enkelt post importeret fra "data" tilføje data i 3 ekstra kolonner.

Ved endt arbejde ønsker jeg at kopiere alt udfyldt data fra de ekstra 3 kolonner til et andet sheet i main.
Mit datadokument indeholder en ID kolonne og for at gøre det simpelt løber jeg pt. hele arket igennem og kopierer data fra de 3 ekstra kolonner til andet sheet på række nr. tilsvarende ID nummeret fra "data".

Funktionen virker ganske udmærket, men koden kører ufattelig langsom. (op til 5000 rækker data)

Det jeg i sidste ende gerne vil opnå er at jeg kan åbne et excel ark i et andet ark og tilføje yderligere data til hver enkelt række. Alt data skal være relateret til et ID nummer, da det "importerede" ark opdateres jævnligt fra 3. part og de yderligere data skal bibeholdes.

Når et ark åbnes skal modsatte øvelse køres hvor alle de gemte ekstra data kopieres til sheetet der viser den importerede data...

Filen kan downloades på:
http://lubker.dk/test.xlsm
Avatar billede natkatten Mester
29. april 2015 - 19:07 #1
Prøv at kigge på dette:

http://gratisupload.dk/f/8rentvqbor/
Avatar billede natkatten Mester
29. april 2015 - 19:08 #2
Ups forkert tråd - jeg beklager!
Avatar billede kabbak Professor
29. april 2015 - 22:57 #3
Jeg kan ikke teste på dit ark, men burde virke

  Dim RowData As Variant, NyData As Variant, HentetData As Variant, I As Long, X As Integer
    For I = 2 To 5000
        RowData = ActiveWorkbook.Worksheets("WP data").Range(Cells(2, 20), Cells(5000, 20))    ' kolonnen med rækkenummer
        NyData = ActiveWorkbook.Worksheets("data").UsedRange    ' finder dine data i Worksheets("data")
        HentetData = ActiveWorkbook.Worksheets("WP data").Range(Cells(2, 24), Cells(5000, 26))    ' Klargør variabel til at modtage data
        If Not IsEmpty(RowData(I)) Then    ' hvis ingen værdi i rækken, hopper man over
            For X = 1 To 3
                HentetData(I, X) = NyData(RowData(I), X)    ' tildeler værdi
            Next
        End If
    Next
    ActiveWorkbook.Worksheets("WP data").Range(Cells(2, 24), Cells(5000, 26)) = HentetData    ' skriver værdier til arket
Avatar billede lubker Nybegynder
06. maj 2015 - 13:12 #4
Tak.
Jeg fik optiveret hele arket ved at kopiere datasheetet fra kilden til arbejdsarket. - Resten af koden virkede stort set perfekt efter det.

Smider du et svar?
Avatar billede kabbak Professor
07. maj 2015 - 00:21 #5
et svar ;-))
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