Avatar billede hpo Nybegynder
05. september 2006 - 15:49 Der er 14 kommentarer og
1 løsning

makro til tabeloprettelse

Jeg har en tabel med kunder i række og varegruppe som kolonne.
Denne tabel opdateres med data et andet sted fra, men er dynamisk, og kan ændre sig efter f.eks. hver måned.

Jeg skal danne en tabel, hvor jeg i hver række får kunde i en kolonne og varegruppe i næste kolonne. Hvis en kunde køber vare fra 10 varegrupper skal der altså være 10 rækker med kundenummer i kolonne A mens varegruppe 1-10 fremgår af kolonne B.

Hvis en kunde ikke køber fra en varegruppe, er dette felt tomt, og jeg vil ikke have kunden med, hvis ikke han køber noget fra varegruppen.

Jeg har ca. 500 rækker med kundenumre, som skal løbes igennem, men antallet af rækker kan vokse.

Help anyone?
Avatar billede gibber Nybegynder
05. september 2006 - 17:25 #1
Har du prøvet med en pivottabel?
Avatar billede supertekst Ekspert
05. september 2006 - 17:32 #2
Vil det sig at udgangspunktet er følgende:

række 1 Knr1...Knr2...Knr7...Knr9...Knr10
------2 vgr1...vgr7...vgr2..........vgr3
------3 vgr7...vgr8......................

ny tabel/Ark

kolonne.....A......B
rækk1 1....knr1...vgr1
......2....knr1...vgr7
......3....knr2...vgr7
......4....knr2...vgr8
......5....knr7...vgr2
......6....knr10..vgr3

Eller ????
Avatar billede hpo Nybegynder
06. september 2006 - 08:00 #3
Jeg vil helst ikke bruge en pivottabel ,da jeg skal bruge resultaterne videre i nogle lopslagsfunktioner. Desuden vil jeg med en pivottabel også have "blanke" linier med.

Tabellen ser således ud:
        Varegrp1  Varegrp2  varegr3 . . . . . . . .
kunde1
kunde2
kunde3
.
.
.
.

Jeg skal så lave en tabel der ser således ud:
Kunde1,varegrp1
kunde1,varegrp3
kunde2,varegrp2

Nogle kunder køber ikke fra fra alle varegrupper, og så vil jeg ikke have en record med dem.
Avatar billede hpo Nybegynder
06. september 2006 - 09:16 #4
hm.

Jeg har løst det på anden vis.
Avatar billede hpo Nybegynder
06. september 2006 - 09:17 #5
Men hvis nogen falder over dette spm. og kan lave en makro, der kan ovenstående vanker der stadig 120 point.

VH
HPO - takker supertekst og gibber for deltagelsen.
Avatar billede supertekst Ekspert
06. september 2006 - 09:28 #6
Selv tak - men jeg mener stadig at kunne skrive makroen - men har følgende spørgsmål:

Hvordan er forbindelse mellem kundenr i kolonneA og de 10 varegrp i række1  - er det et X eller?
Avatar billede mrjh Novice
06. september 2006 - 09:59 #7
Det er forudsat at din tabel ligger i A : K i ark4. Tilret selv området og arknavn.
Resultattabellen indsættes i Ark7 som også skal rettes til dit eget ark


Sub nytabel()
Dim nyeposter()
Worksheets("Ark4").Activate
maxrk = Range("a65536").End(xlUp).Row
poster = Range("a2:k" & maxrk)
kol = Range("iv2").End(xlToLeft).Column
rk = UBound(poster)
ReDim nyeposter(rk * kol, 1)
For i = 2 To rk
    For j = 2 To kol
        If poster(i, j) <> "" Then
        nyeposter(k, 0) = poster(i, 1)
        nyeposter(k, 1) = poster(1, j)
        k = k + 1
        End If
    Next j
Next i
Worksheets("Ark7").Range("a1:b" & UBound(nyeposter) + 1) = nyeposter
End Sub
Avatar billede mrjh Novice
06. september 2006 - 10:00 #8
Yderligere forudsat at dine overskrifter (varegrp.1 osv.) ligger i række 2, samt dine kundenavne i A-kolonnen
Avatar billede hpo Nybegynder
06. september 2006 - 11:01 #9
>>supertekst
Forbindelsen mellem kundenr. i kolonne A og varegrupperne i rækken er en omsætning - altså et tal.

>> Mrjh
Jeg har rettet din makro således:
Sub nytabel()
Dim nyeposter()
Worksheets("FI_kunde").Activate
maxrk = Range("a65536").End(xlUp).Row
poster = Range("a49:h" & maxrk)
kol = Range("iv2").End(xlToLeft).Column
rk = UBound(poster)
ReDim nyeposter(rk * kol, 1)
For i = 50 To rk
    For j = 2 To kol
        If poster(i, j) <> "" Then
        nyeposter(h, 0) = poster(i, 1)
        nyeposter(h, 1) = poster(1, j)
        k = k + 1
        End If
    Next j
Next i
Worksheets("Test").Range("a1:B" & UBound(nyeposter) + 1) = nyeposter
End Sub

- jeg har ikke 100% styr på makroer, men min data-tabel har ordregivere i kolonne A, men tabelhovedet med varegrupper findes i række 49, dvs. første record med data er række 50.

Jeg har lavet et nyt ark, der hedder "Test", hvor jeg i første omgang ville have indsat tabellen. Umiddelbar fungerer det ikke :(
Hvad gør jeg galt?
Avatar billede hpo Nybegynder
06. september 2006 - 11:24 #10
Den sidste kolonne jeg har med varegrupper er kolonne h.
Avatar billede mrjh Novice
06. september 2006 - 11:26 #11
Prøv at rette
kol = Range("iv2").End(xlToLeft).Column
til
kol = Range("iv49").End(xlToLeft).Column

og i løkken: udskift h med k, altså nyeposter(k,0) og nyeposter(k,1)
Avatar billede mrjh Novice
06. september 2006 - 11:40 #12
Ups ser også lige at du skal ændre:
For i = 50 To rk
til
For i = 2 To rk
Håber det var det, har ikke testet, men bare kigget koden igennem.
Avatar billede hpo Nybegynder
06. september 2006 - 13:03 #13
Det virker bedre. Jeg får bare en linje i min nye tabel - det er den nederste kunde med korrekt varegruppe - men rsten mangler.
Avatar billede mrjh Novice
06. september 2006 - 13:12 #14
Dette er den samlede kode som jeg tror virker. Test lige


Sub nytabel()
Dim nyeposter()
Worksheets("FI_kunde").Activate
maxrk = Range("a65536").End(xlUp).Row
kol = Range("iv49").End(xlToLeft).Column
poster = Range("a49:h" & maxrk)
rk = UBound(poster)
ReDim nyeposter(rk * kol, 1)
For i = 2 To rk
    For j = 2 To kol
        If poster(i, j) <> "" Then
        nyeposter(k, 0) = poster(i, 1)
        nyeposter(k, 1) = poster(1, j)
        k = k + 1
        End If
    Next j
Next i
Worksheets("Test").Range("a1:b" & UBound(nyeposter) + 1) = nyeposter
End Sub
Avatar billede hpo Nybegynder
06. september 2006 - 13:21 #15
http://www.eksperten.dk/spm/730686

Det funker bare mrjh.

takker mange gange.

/HPO
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