kruistabel converteren naar lijst-tabel

Status
Niet open voor verdere reacties.

jofred

Gebruiker
Lid geworden
16 dec 2006
Berichten
172
Ik wil graag een kruistabel omzetten naar een lijst-overzicht.
Is er toevallig iemand, die hiervoor een oplossing op de plank liggen?
In bijgevoegde bestandsbijlage heb ik nog even zichtbaar gemaakt wat ik precies bedoel
 
Laatst bewerkt:
Bedoel je met "kruistabel" een draaitabel?
Die is standaard opgebouwd vanuit een lijstoverzicht.
Dit lijstoverzicht bevindt zich normaal gesproken in een verborgen blad.
Controleer eens of je alle bladen zichtbaar hebt, zo niet, dan alles zichtbaar maken.
(Opmaak, blad, zichtbaar maken).
Kun je eventueel het blad hier gezipt plaatsen of bevat het teveel privacy informatie?
 
Jan,

Ik had al een bestandsbijlage toegevoegd aan mijn vraag, of is die niet te lezen?

Ik bedoel geen draaitabel, want daar weet ik wel mee om te gaan.
Nee, het gaat mij om een aangeleverde kruistabel of matrix. In de bestandsbijlage is die ook zichtbaar (linker opstelling). Mijn vraag is of iemand iets op de plank heeft liggen zodat deze kruistabel/matrix wordt omgetoverd tot de lijsttabel die rechts in de bestandsbijlage staat.

 
Standaard niets liggen dus even gemaakt.
Probeer het eens met onderstaande macro.
Code:
Sub KruisNaarLijst()
'
' KruisNaarLijst Macro
'
Dim k As Integer
Dim r As Integer
Dim r2 As Integer
Dim Gebied As String
Dim w As String
'
    
Gebied = "H3"
Range("B4").Select
r = 1
r2 = 0
k = 0
While ActiveCell.Value <> ""
    Range(Gebied).Offset(r, k).Value = ActiveCell.Value
    Range(Gebied).Offset(r, k + 1).Value = ActiveCell.Offset(-1 - r2, 1).Value
    Range(Gebied).Offset(r, k + 2).Value = ActiveCell.Offset(0, 1).Value
    Range(Gebied).Offset(r + 1, k).Value = ActiveCell.Value
    Range(Gebied).Offset(r + 1, k + 1).Value = ActiveCell.Offset(-1 - r2, 2).Value
    Range(Gebied).Offset(r + 1, k + 2).Value = ActiveCell.Offset(0, 2).Value
    Range(Gebied).Offset(r + 2, k).Value = ActiveCell.Value
    Range(Gebied).Offset(r + 2, k + 1).Value = ActiveCell.Offset(-1 - r2, 3).Value
    Range(Gebied).Offset(r + 2, k + 2).Value = ActiveCell.Offset(0, 3).Value
    Range(Gebied).Offset(r + 3, k).Value = ActiveCell.Value
    Range(Gebied).Offset(r + 3, k + 1).Value = ActiveCell.Offset(-1 - r2, 4).Value
    Range(Gebied).Offset(r + 3, k + 2).Value = ActiveCell.Offset(0, 4).Value
    ActiveCell.Offset(1, 0).Select
    r = r + 4
    r2 = r2 + 1
Wend

End Sub
 
Jan,

Hartelijk dank voor je oplossing. Uit een eerste test blijkt dit inderdaad op te leveren wat ik in gedachten had. :thumb:
Ik ben nu bezig om een schermpje erom heen te maken, om de gebruiker de kans te geven het begin van de matrix-formule aan te wijzen en de veldnamen op te geven. Met het schermpje kom ik er nog niet helemaal uit, ik ga nog even verder puzzelen. :confused:

 
Hier is kortere en meer efficiënte code. Je merkt het verschil wel als je veel gegevens te doen hebt.

Code:
Sub WigiKruisNaarLijst()

Dim rngNames As Range, c As Range, teller As Long

Set rngNames = Range("B4", Range("B4").End(xlDown))
teller = 0
Application.ScreenUpdating = False
For Each c In Range("C3", Range("C3").End(xlToRight))
    rngNames.Copy Range("H2").Offset(teller * rngNames.Count + 1, 0)
    c.Copy Range("H2").Offset(teller * rngNames.Count + 1, 1).Resize(rngNames.Count)
    c.Offset(1).Resize(rngNames.Count).Copy Range("H2").Offset(teller * rngNames.Count + 1, 2)
    teller = teller + 1
Next c
Application.ScreenUpdating = True
End Sub

Wigi
 
Ik ben aan het puzzelen geweest om een schermpje in elkaar te zetten, waarin de gebruiker de gelegenheid krijgt om de startcel van de te converteren kruistabel aan te wijzen. Dat wil echter niet zo lukken. Ik krijg het wel voor elkaar om een cel aan te wijzen, maar het celadres wordt niet vastgehouden.
Iemand een idee?
 
Post je code eens, en tevens je bestandje. (verkleind)
 
Wigi

Hierbij mijn bestandje. Ik ben nu zover dat het formulier automatisch opent bij het activeren van het werkblad. Het is de bedoeling dat de geactiveerde cel na het op start-klikken wordt meegegeven aan de op te starten procedure voor de conversie van de kruistabel.
Waar ik verder nog niet achter ben: hoe ik het kan regelen dat er maar één cel kan worden geselecteerd. Of anders dat alleen de cel links boven in het geselecteerde cellenbereik wordt meegegeven.

Ik ben benieuwd.
 
Laatst bewerkt:
Wigi,

Ik heb nog niets van je vernomen. Is het nog niet gelukt of ben ik tussen de bits en bytes gevallen?

Jofred

:)
 
Jofred

Ik heb het toen bekeken, maar herinner mij dat ik er geen bal van snapte, om het op z'n Vlaams te zeggen. Maar ben blijkbaar vergeten dat te melden. :o

Ik zal het nog eens bekijken en zeggen waar ik vast zit.
 
Wigi,

Geeft niet kan de beste overkomen. :thumb:
Ik zie wel waar je vast zit.

Op voorhand dan alvast dit:
ik wil graag via een userform een (1) cel (en niet meer dan 1) kunnen selecteren en deze gebruiken (via een variabele) als aanduiding van de linkerbovenhoek van de te converteren kruistabel. Daarmee wil ik de macro zo dynamisch mogelijk maken en dus niet in de code een cel "hard" te coderen.
Jofred
 
Zonder het bestand gezien te hebben, lees hier over ApplicationInputBox (midden op de pagina). Neem type:=8 om een range te krijgen. Experimenteer maar wat.

Met de eigenschap .Count tel je het aantal cellen dat je in de inputbox hebt aangeduid.

Wigi
 
Wigi,

Ik heb je raad opgevolgd en heb een enigzins werkbare oplossing gevonden.
Alleen zou ik met een (1) schermpje willen volstaan...
Heb jij nog suggesties?

Jofred
 

Bijlagen

Welke cel moet de gebruiker eigenlijk kiezen opdat de gewenste situatie zich voordoet (als de code zou werken)? Is B3, B4, C4, ...?
 
Wigi,

Ik zal de oplossing nog nader bestuderen, maar heb in ieder geval geconstateerd dat het werkt zoals ik had bedacht.

Bedankt :thumb:

Jofred
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan