Avatar billede Laudman83 Nybegynder
25. juli 2012 - 15:23 Der er 3 kommentarer og
1 løsning

Transponer kolonne til rækker

Hej

Lad mig starte med at sige, at jeg ikke er VBA ekspert, derfor vil jeg sætte pris, på så meget forklaring som muligt. Så jeg kan forstå det bedst muligt.

Det jeg skal bruge hjælp til er en makro i excel der kan opdele en kolonne i flere antal rækker, alt efter hvor mange der er.
Jeg har forneden forsøgt at lave et forsimplet eksempel, hvor makroen skal opdele og fordele ordrene i en række ud fra Kunde id'et.

Håber virkeligt der er en der kan hjælpe mig, har søgt alle steder på nettet, men synes ikke jeg kan finde nogen i lignende situation:(


Nuværende situation:

Kunde ID:    Adresse:        Ordre:
123    Vestergade 10, 2100 København Ø    ABX
212    Østergade 3,  8000 Århus C    NNA
124    Nøregade 7, 5200 Odense V    VVY
123    Vestergade 10, København    NNA
   
           
Ønsket situation:                       
Kunde ID:    Adresse:    Ordre:    Ordre2:
123    Vestergade 10,  2100  København Ø    ABX    NNA
212    Østergade 3,  8000 Århus C    NNA   
124    Nøregade 7, 5200 Odense V    VVY
Avatar billede supertekst Ekspert
25. juli 2012 - 16:02 #1
Du er velkommen til at sende filen eller en model. @-adresse under min profil.

Det ser ikke ud til at der er tale om en egentlig transponering - men nærmere en samling af ordre til den pågældende kunde.

Det skulle VBA nok kunne klare..
Avatar billede supertekst Ekspert
26. juli 2012 - 00:35 #2
Rem VBA-kode anbringes under det aktuelle ark (Højreklik på ark / Vis programkode / Indsæt VBAKode her
Rem Koden kan eksekveres med Alt+F8 / Marker samlingAfOrdre / Afspil
Rem ================================================================

Dim sidsteRække As Long, ræk As Long
Dim kundeId As Variant, kundeRække As Long
Dim ræk2 As Long
Public Sub samlingAfOrdre()
Rem Beregn sidste række
    sidsteRække = ActiveCell.SpecialCells(xlLastCell).Row
    ræk2 = 2
       
Rem Traverser rækkerne
    For ræk = 2 To sidsteRække
        kundeId = Range("A" & ræk)
        ordre = Range("C" & ræk)
   
Rem findes kundeid i ny tabel
        kundeRække = findesKunde(kundeId)
        If kundeRække = 0 Then
Rem Opret kundedata
            opretKundeData
        Else
            indsætNyOrdre kundeRække, ordre
        End If
       
    Next ræk

Rem tilpas kolonnebredde
    Columns.AutoFit
End Sub
Private Function findesKunde(kundeId)
Dim r As Long
    For r = 2 To sidsteRække
        If Range("E" & r) = kundeId Then
            findesKunde = r
            Exit Function
        End If
    Next r
   
    findesKunde = 0
End Function
Private Sub opretKundeData()
    Range("E" & ræk2) = Range("A" & ræk)
    Range("F" & ræk2) = Range("B" & ræk)
    Range("G" & ræk2) = Range("C" & ræk)
    ræk2 = ræk2 + 1
End Sub
Private Sub indsætNyOrdre(række, ordre)
Dim kolonne As Integer
Rem find celle til ny ordre på eksisterendekundedata
    For kolonne = 8 To 16384
        If Cells(række, kolonne) = "" Then
            Cells(række, kolonne) = ordre
            Exit Sub
        End If
    Next kolonne
End Sub
Avatar billede Laudman83 Nybegynder
26. juli 2012 - 06:44 #3
Tak for hjælpen
Avatar billede supertekst Ekspert
26. juli 2012 - 08:55 #4
Selv tak..
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