• Privacywetgeving
    Het is bij Helpmij.nl niet toegestaan om persoonsgegevens in een voorbeeld te plaatsen. Alle voorbeelden die persoonsgegevens bevatten zullen zonder opgaaf van reden verwijderd worden. In de vraag zal specifiek vermeld moeten worden dat het om fictieve namen gaat.

Rijen naar kolommen met unieke waarde als eerste kolom.

Status
Niet open voor verdere reacties.

Killerclown

Gebruiker
Lid geworden
30 dec 2007
Berichten
181
Goeiemorgen,

Misschien een simpele vraag maar ik weet niet hoe ik het moet oplossen.
In bijlage zit een excel met blad 1 met daarin 2 kolommen.

Nu zou ik dat willen aanpassen zodat er in de eerste kolom telkens 1 waarde staat (unieke waarde) en dat de waardes uit kolom die bij die unieke waarde horen niet onder elkaar staan maar naast elkaar. (hopelijk is dat wat duidelijk)
Voorbeeld zoals op blad 2.

Ik was begonnen met dit manueel te doen met transponeren maar mijn excel is nogal groot en dat is nogal veel werk.

Kan dit op een automatische manier in excel?

Alvast dank.

mvg,

Davy
 

Bijlagen

  • Lijst.xlsx
    11,8 KB · Weergaven: 46
Zie blad 3 (je moet alles nog verder doortrekken). Als je office 365 hebt kan het wat makkelijker. Het kan ook simpel met een draaitabel
 

Bijlagen

  • Lijst.xlsx
    36,9 KB · Weergaven: 43
Laatst bewerkt:
Met een draaitabel was me dit niet gelukt. Misschien doe ik daarbij iets verkeerd.
Jouw voorbeeld met formule op blad 3 werkt, maar zeer traag in mijn uitgebreide excel. (+/- 8000 lijnen)

Kan dit sneller?

mvg,

Davy
 
met een macrootje
 

Bijlagen

  • Lijst.xlsb
    24,9 KB · Weergaven: 46
Code:
Sub hsv()
Dim sv, sq, i As Long, n As Long, j As Long, b As Long
sv = Blad1.Cells(1).CurrentRegion
ReDim a(UBound(sv), UBound(sv))
For i = 2 To UBound(sv)
 a(0, 0) = sv(1, 1)
 If sv(i, 1) <> sq Then j = 0: n = n + 1
                   a(n, 0) = sq
                   j = j + 1
                   a(0, j) = sv(1, 2)
                   a(n, j) = sv(i, 2)
         If b < j Then b = j
     sq = sv(i, 1)
   Next i
 Blad2.Cells(1, 10).Resize(n + 1, b + 1) = a
End Sub

Of:
Code:
Sub hsv_2()
Dim sv, sq, i As Long
sv = Blad1.UsedRange.Resize(, 2)
With CreateObject("scripting.dictionary")
     For i = 1 To UBound(sv)
        .Item(sv(i, 1)) = .Item(sv(i, 1)) & sv(i, 2) & IIf(sv(i, 2) = "", "", "|")
     Next i
  Blad2.Cells(1, 10).Resize(.Count, 2) = Application.Transpose(Array(.keys, .items))
 End With
  Blad2.Columns(11).TextToColumns , , , , , , , , -1, "|"
End Sub
 
Laatst bewerkt:
YES!!! The VBA code was wat ik nodig had.
Bedankt!!! 8000 lijnen op halve minuut ofzo.
 
Heb je zo'n trage Pc?

10.000 lijnen: een halve seconde met de tweede code.
 
10.000 rijen in < 0.1 sec met #4 en eigenlijk ex aequo met HSV2 (valt binnen dezelfde foutmarge van meten, logisch zelfde methodiek).
Ergens rond de seconde voor HSV1
 
Laatst bewerkt:
Inderdaad iets sneller.

Nu zonder Option Explicit en de declaraties
Bij mij 0,418 Cow t.o. 0,500 hsv_2.

Waarschijnlijk de Iif constructie.
 
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan