Jeg har et datatræk hvor jeg har data for 12 måneder i kolonnerne, som jeg gerne vil have i en lang række. Er der en smart måde at transponere data på evt. via makro..
Eks.
Produkt Navn Januar Februar Marts April osv.... 1 A 100 350 150 2 B 200 100 400
ville gerne have det som
Produkt A Navn A Januar 100 Produkt A Navn A Februar 350 Produkt A Navn A Marts 150 Produkt A Navn A April Produkt B Navn A Januar 200 Produkt B Navn A Februar 100 Produkt B Navn A Marts 400 Produkt B Navn A April
Du ved formentligt hvordan man du ganske enkelt og helt uden makroer kan transposnere et område?
Markér området du vil transponere, højreklik og vælg "kopier".
Marker en anden celle et ledig sted i arket, højreklik og vælg indsæt speciel, transponer. Nu indsættes dine data således at kolonner og rækker er byttet om.
Med en sub i vba kan du evt gøre som her:
Hvor du blot skal stå i området hvor du vil tranponere fra. Området transponeres så til det område hvor celle B26 er øverste venstre celle.
sub transponerområde() ActiveCell.CurrentRegion.Select Selection.Copy
The tricky part er at hvis jeg gør det på den kendte måde så får jeg "bare" byttet rundt på kolonner og rækker - og der jeg gerne vil have er et datasæt hvor jeg får en kolonne med alle måneder med en tilsvarende kolonne med alle værdier. Så fra at have 12 dimensioner (en for hver måned) har jeg nu en dimension nemlig måneder.....
Er det korrekt forstået, at du for eksempel fra A2 og nedefter ønsker først 12 gange A,derefter 12 gange B osv. Fra B2 og nedefter Januar, februar,......, december og derefter forfra igen osv. og fra C2 og nedefter 100, 350, 150 osv.?
Hvis du (som jeg) skulle foretrække formelløsninger overalt hvor det er muligt at undgå VBA, så prøv med følgende:
Navngiv dit dataudtræk tbl.
Indsæt følgende formler
I A2: =INDEX(tbl;INT((ROW()-2)/12+2);1) I B2: =INDEX(tbl;1;MOD(ROW()-2;12)+2) I C2: =HLOOKUP(B2;tbl;INT((ROW()-2)/12+2);0)
Hvis dansk Excel: I A2: =INDEKS(tbl;HELTAL((RÆKKE()-2)/12+2);1) I B2: =INDEKS(tbl;1;REST(RÆKKE()-2;12)+2) I C2: =VOPSLAG(B2;tbl;HELTAL((RÆKKE()-2)/12+2);0)
Kopier formlerne nedad så langt som påkrævet.
Hans
Synes godt om
Slettet bruger
31. januar 2010 - 07:02#7
Oops Ret vedrørende formlen i B2 til: =INDEKS(tbl;1;REST(RÆKKE()-2;12)+3)
Hans
Synes godt om
Ny brugerNybegynder
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.