Avatar billede Ditte_L Nybegynder
20. august 2009 - 15:47 Der er 5 kommentarer

samling af data fra 22 ark i et ark med nogle fælles overskrifter

Hej Eksperter!

Jeg håber at I kan hjælpe mig.

Jeg har brug for hjælp til at samle en mængde ret kompleks data fra 22 seperate ark i et ark (en oversigt). Arkene der skal samles er ret store (kolonne A-BU og ca. 100 rækker) Dog har jeg ikke nødvendigvis behov for at overføre alle kolonner, evt. bare f.eks. A-G og R-AB

Hver af de 22 ark er sat op på nøjagtig samme måde. Dataen er registreret under 10 overskrifter.

Jeg vil gerne samle dataen fra alle 22 ark således at det samlede ark får samme udseende som de enkelte ark altså inddelt under hver overskrift. Jeg har forsøgt at illustrere det nedenfor.

Overskrift 1
Dataark 1
Dataark 2
Dataark 3
...
Dataark 22

Overskrift 2
Dataark 1
Dataark 2
Dataark 3
...
Dataark 22

Er dette overhovedet muligt? Jeg er ikke i tvivl om at det skal være noget med en VBA kode, og håber at der er nogen der måske kan hjælpe mig?! ;o)
Avatar billede acore Ekspert
20. august 2009 - 17:16 #1
Jeg kan foreslå brug af INDIRECT (dk: INDIREKTE tror jeg).

Hvis du fx i en celle har teksten "Dataark2!E14" så giver INDIRECT("Dataark2!E14") den værdi, der står i cellen.

Dvs. hvis du i kolonne A fra A2 til A23 har navnene på dine dataaark stående og du i B1 har stående cellenavnet på den celle, du vil hente (fx "BU102"), så kan du lægge INDIRECT(A$2&"!"&B$1) ind i B2 og når du så kopierer den til B3-B23, så får du værdier fra de andre ark.

Jeg ved ikke om forklaringen lykkedes - det er ikke så let at forklare, men princippet er, at så længe du kan konstruere referencen til de celler, du vil have fat i, så kan du også hente værdierne med INDIRECT.
Avatar billede Ditte_L Nybegynder
21. august 2009 - 10:05 #2
Desværre er dette ikke nok.

Jeg har brug for at mit samlede ark er dynamisk, altså at det automatisk registreres hvis jeg indsætter/sletter linier i de 22 ark.

Jeg har fundet denne VBA-kode i en anden forespørgelse her på siden. Den er skrevet af Mowi.

Sub CollectData()
    Dim wks As Worksheet, NextRow As Integer

    Application.ScreenUpdating = False
    For Each wks In Worksheets
        If Not wks.Name = "Samlet2" Then
            wks.Activate
            Range("A2:C2").Select
            Range(Selection, Selection.End(xlDown)).Select
            Selection.Copy
            Worksheets("Samlet2").Activate
            NextRow = Range("A65536").End(xlUp).Row + 1
            Cells(NextRow, 1).PasteSpecial
        End If
    Next wks
   
    Application.ScreenUpdating = True
End Sub

Den gør i store træk det jeg skal have den til bortset fra at den ikke kan samle dataen under hver overskrift.

Kan man justere på ovenstående kode, så den kan samle dataene under hver overskrift?
Avatar billede acore Ekspert
21. august 2009 - 19:53 #3
En VBA-kode er ikke dynamisk forstået derhen at den kun opdaterer noget, når den eksekveres.

Med tilpas logik i ark-navngivningen tror jeg stadig, at du kan løse problemet uden VBA.
Avatar billede Ditte_L Nybegynder
24. august 2009 - 14:08 #4
Jeg var vist lidt hurtig med min sidste kommentar, jeg har siddet og fingereret lidt med den kommando du henviser til i dit første svar.

Jeg kan nogenlunde få det til at virke, men der er lige noget jeg ikke kan få til at fungere.

I hvert af mine ark er der for det meste flere rækker med data under hver overskrift. Altså noget lignende

Overskrift 1
Ark 1 Række 1
Ark 1 Række 2
Ark 2 Række 1
Ark 2 Række 2
Ark 2 Række 3 osv

Hvordan bruger jeg INDIRECT-funktionen til at få dataen med fra flere rækker?

Det skal lige siges at det endelige antal rækker under hver overskrift ikke er fast defineret, og jeg meget gerne vil have at det samlede ark ikke er afhængig af at man skal udvide med nye rækker. Mener du det er muligt med INDIRECT?
Avatar billede acore Ekspert
24. august 2009 - 17:43 #5
Ja, det mener jeg, men det kræver nogen disciplin omkring navngivning og nogle lidt længere formler. Lad mig prøve at skitsere princippet:

Lad os antage at du har antallet af ark i B1, antallet af rækker i B2, og den kolonne du vil hente fra i B3 (som bogstav).

Lad os antage, at dine ark hedder Ark1, Ark2, Ark3, ...

Og så vil du gerne starte med at hente fra C6 og nedefter.

Kolonne A er en hjælpekolonne til at holde styr på hvilket ark du er nået til og kolonne C er en hjælpekolonne til at holde styr på hvilken celle du er nået til. De kan evt skjules, når du er færdig.

I A6 og B6 skal der stå 1.

I A7 skal der stå:

=$A6+HVIS(OG(B7=$B$2;A6<$B$1);1;0)

som kopieres ned.

I B7 skal der stå:

=HVIS(B6=$B$2;1;B6+1)

som kopieres ned.

Som du vil se, så tæller de ark og række op. De slutter når det sidste ark nås.

Nu kan du konstruere navnet på den celle, du vil hente fra, og bruge INDIREKTE - dvs formlen i C6 bliver:

=INDIREKTE("Ark"&$A6&"!"&$B$3&$B6)

Jeg har prøvet at gøre dette eksempel simpelt. Du kan sikkert selv gøre det mere avanceret, når først du forstår principperne. Til den slags opgaver er INDIREKTE virkeligt stærkt, synes jeg.
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
Excel kurser for alle niveauer og behov – find det kursus, der passer til dig

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