[Excel] Meerdere regels op 1 regel samenvoegen

Pagina: 1
Acties:

Vraag


Acties:
  • 0 Henk 'm!

  • SgtElPotato
  • Registratie: Juli 2008
  • Laatst online: 23:15
Mijn vraag:
Ik heb een Excel bestand waar ik gegevens van iets op meerdere regels heb staan. Laten we zeggen auto banden per kenteken.

Nu wil ik al deze losse regel op één lange regel achter elkaar zetten. Maar met de hand is dit niet te doen.

Zo is de data:
Afbeeldingslocatie: https://tweakers.net/i/VuszfzwnBe--jzKPWOlwDWFSVC4=/fit-in/4000x4000/filters:no_upscale():strip_exif()/f/image/DfD6R1Pj0NVpSZ8blZ9aiHqx.png?f=user_large

Zo wil ik de data hebben:
Afbeeldingslocatie: https://tweakers.net/i/nWY3y-fzFTWFlGREQTz0szOK_bA=/800x/filters:strip_exif()/f/image/X501uvRBlNfCstht4aUpvofs.png?f=fotoalbum_large

Relevante software en hardware die ik gebruik:
Excel

Wat ik al gevonden of geprobeerd heb:
Ik weet niet zo goed welke zoekterm ik moet gebruiken of wat voor formules. Het nogal om wat regels dus met de hand is het niet te doen. Iemand een idee die mij op weg kan helpen?

[ Voor 8% gewijzigd door SgtElPotato op 21-10-2024 12:05 ]

Zucht...

Beste antwoord (via SgtElPotato op 21-10-2024 13:18)


  • Belindo
  • Registratie: December 2012
  • Laatst online: 23:30

Belindo

▶ ─🔘─────── 15:02

Dit kan met twee formules.

Allereerst in H1 zet je:
code:
1
=UNIQUE(FILTER(A:A,A:A<>""))


Dit genereert een lijst met:
a
b
c

Dan, in J1 zet je deze formule:
code:
1
=TEXTSPLIT(TEXTJOIN(",",TRUE,FILTER(C:F,A:A=H1)),",")
en die trek je omlaag naar gelang hoeveel rijen je hebt uit die 1e formule.

Resultaat:
Afbeeldingslocatie: https://tweakers.net/i/kXWYUsOVhMeuxZX4WFp5zgsA2hM=/800x/filters:strip_exif()/f/image/cLJZmaBKFJqMHsm6Yo9uS7bt.png?f=fotoalbum_large

[ Voor 38% gewijzigd door Belindo op 21-10-2024 12:39 ]

Coding in the cold; <brrrrr />

Alle reacties


Acties:
  • +1 Henk 'm!

  • pagani
  • Registratie: Januari 2002
  • Niet online
Even voor de duidelijkheid, je wil ze en op een regel hebben en dan ook nog alle losse regels, behalve de eerste? Zo staat het namelijk in je voorbeeld.

Acties:
  • 0 Henk 'm!

  • Reinier
  • Registratie: Februari 2000
  • Laatst online: 07:08

Reinier

\o/

Je voorbeeld slaat nergens op eerlijk gezegd.

Acties:
  • 0 Henk 'm!

  • SgtElPotato
  • Registratie: Juli 2008
  • Laatst online: 23:15
pagani schreef op maandag 21 oktober 2024 @ 12:00:
Even voor de duidelijkheid, je wil ze en op een regel hebben en dan ook nog alle losse regels, behalve de eerste? Zo staat het namelijk in je voorbeeld.
Heb het tweede screenshot geupdate, ik wil het dus 'samenvoegen op één regel en de andere regels weg hebben.

Zucht...


Acties:
  • 0 Henk 'm!

  • SgtElPotato
  • Registratie: Juli 2008
  • Laatst online: 23:15
Reinier schreef op maandag 21 oktober 2024 @ 12:02:
Je voorbeeld slaat nergens op eerlijk gezegd.
En wat slaat nergens op?

Zucht...


Acties:
  • 0 Henk 'm!

  • pagani
  • Registratie: Januari 2002
  • Niet online
SgtElPotato schreef op maandag 21 oktober 2024 @ 12:05:
[...]


Heb het tweede screenshot geupdate, ik wil het dus 'samenvoegen op één regel en de andere regels weg hebben.
Is het een uitgebreide dataset (dus is bijvoorbeeld elk nummertje uniek) of is het altijd een reeks van 4 getallen tussen 0 en 15?

Acties:
  • 0 Henk 'm!

  • Reinier
  • Registratie: Februari 2000
  • Laatst online: 07:08

Reinier

\o/

Ja, nu wel omdat je een nieuwe afbeelding hebt geplaatst. Oude plaatje kwam niet overeen met je verhaal.

Maar je zult met VBA aan de gang moeten lijkt me. Ik kan me niet voorstellen dat dit met een handjevol formules te doen is.
Sorteer op kolom A.
Pak de waarde in A1.
Plak die waarde in een nieuw werkblad.
Selecteer naar rechts totdat je een lege cel tegenkomt.
Plak dit naast de eerder geplakte waarde op werkblad 2.
Terug naar werkblad 1.
Ga naar kolom A en ga 1 rij naar beneden.
Zelfde waarde? Weer naar rechts selecteren en op werkblad 2 plakken.
Andere waarde? Plak die op een nieuwe regel op werkblad 2.
Rinse, repeat.

Edit:
Als het altijd 4 waardes zijn zou je misschien wat kunnen vogelen met transpose() en draaitabellen o.i.d. maar ik denk niet dat dat beter is dan bovenstaande.

[ Voor 9% gewijzigd door Reinier op 21-10-2024 12:13 ]


Acties:
  • Beste antwoord
  • +3 Henk 'm!

  • Belindo
  • Registratie: December 2012
  • Laatst online: 23:30

Belindo

▶ ─🔘─────── 15:02

Dit kan met twee formules.

Allereerst in H1 zet je:
code:
1
=UNIQUE(FILTER(A:A,A:A<>""))


Dit genereert een lijst met:
a
b
c

Dan, in J1 zet je deze formule:
code:
1
=TEXTSPLIT(TEXTJOIN(",",TRUE,FILTER(C:F,A:A=H1)),",")
en die trek je omlaag naar gelang hoeveel rijen je hebt uit die 1e formule.

Resultaat:
Afbeeldingslocatie: https://tweakers.net/i/kXWYUsOVhMeuxZX4WFp5zgsA2hM=/800x/filters:strip_exif()/f/image/cLJZmaBKFJqMHsm6Yo9uS7bt.png?f=fotoalbum_large

[ Voor 38% gewijzigd door Belindo op 21-10-2024 12:39 ]

Coding in the cold; <brrrrr />


Acties:
  • 0 Henk 'm!

  • SgtElPotato
  • Registratie: Juli 2008
  • Laatst online: 23:15
Belindo schreef op maandag 21 oktober 2024 @ 12:35:
Dit kan met twee formules.

Allereerst in H1 zet je:
code:
1
=UNIQUE(FILTER(A:A,A:A<>""))


Dit genereert een lijst met:
a
b
c

Dan, in J1 zet je deze formule:
code:
1
=TEXTSPLIT(TEXTJOIN(",",TRUE,FILTER(C:F,A:A=H1)),",")
en die trek je omlaag naar gelang hoeveel rijen je hebt uit die 1e formule.

Resultaat:
[Afbeelding]
Thanks man! Het was eigenlijk zo simpel haha.. @Reinier @pagani bedankt voor jullie input iig!

Zucht...


Acties:
  • +1 Henk 'm!

  • Belindo
  • Registratie: December 2012
  • Laatst online: 23:30

Belindo

▶ ─🔘─────── 15:02

SgtElPotato schreef op maandag 21 oktober 2024 @ 13:19:
[...]


Thanks man! Het was eigenlijk zo simpel haha.. @Reinier @pagani bedankt voor jullie input iig!
Fijn, alleen vond ik de oplossing met twee formules toch een beetje lelijk. Dus; self-challenge accepted *insert Barney Stinson meme*

Duurde even, maar hier is één formule die de lijst dynamisch maakt voor je. Het retourneert een 'spill' range met een x aantal rijen afhankelijk van het aantal categorieën, en een y aantal kolommen afhankelijk van hoeveel waardes elke categorie heeft.

Hij heeft wel even tijd nodig om te calculeren, geen idee hoe lang het duurt op je echte data.
code:
1
2
3
4
5
6
7
8
9
10
=LET(
    categories, UNIQUE(FILTER(A:A, A:A<>"")),
    getData, LAMBDA(cat, TEXTJOIN(",", TRUE, FILTER(C:F, A:A=cat))),
    numCols, MAX(MAP(categories, LAMBDA(cat, COUNTA(FILTER(C:F, A:A=cat))))),
    output, MAKEARRAY(ROWS(categories), numCols + 1, LAMBDA(r,c,
        IF(c = 1, INDEX(categories, r),
        INDEX(TEXTSPLIT(getData(INDEX(categories, r)), ","), 1, c-1))
    )),
    IFERROR(output,"")
)

Coding in the cold; <brrrrr />


Acties:
  • 0 Henk 'm!

  • SgtElPotato
  • Registratie: Juli 2008
  • Laatst online: 23:15
Belindo schreef op maandag 21 oktober 2024 @ 14:42:
[...]

Fijn, alleen vond ik de oplossing met twee formules toch een beetje lelijk. Dus; self-challenge accepted *insert Barney Stinson meme*

Duurde even, maar hier is één formule die de lijst dynamisch maakt voor je. Het retourneert een 'spill' range met een x aantal rijen afhankelijk van het aantal categorieën, en een y aantal kolommen afhankelijk van hoeveel waardes elke categorie heeft.

Hij heeft wel even tijd nodig om te calculeren, geen idee hoe lang het duurt op je echte data.
code:
1
2
3
4
5
6
7
8
9
10
=LET(
    categories, UNIQUE(FILTER(A:A, A:A<>"")),
    getData, LAMBDA(cat, TEXTJOIN(",", TRUE, FILTER(C:F, A:A=cat))),
    numCols, MAX(MAP(categories, LAMBDA(cat, COUNTA(FILTER(C:F, A:A=cat))))),
    output, MAKEARRAY(ROWS(categories), numCols + 1, LAMBDA(r,c,
        IF(c = 1, INDEX(categories, r),
        INDEX(TEXTSPLIT(getData(INDEX(categories, r)), ","), 1, c-1))
    )),
    IFERROR(output,"")
)
Held! Ik ga deze ook wel even proberen.

Zucht...


Acties:
  • +1 Henk 'm!

  • dix-neuf
  • Registratie: Juli 2018
  • Niet online
SgtElPotato schreef op maandag 21 oktober 2024 @ 12:05:
Heb het tweede screenshot geupdate, ik wil het dus 'samenvoegen op één regel en de andere regels weg hebben.
Dan bedoel je dit denk ik:
Afbeeldingslocatie: https://tweakers.net/i/c-Y8BH8ZL1Deq5RmajMRGwQM61g=/fit-in/4000x4000/filters:no_upscale():gifsicle():strip_exif()/f/image/FG3gj2GU3Uo1UGa8I9QwoYKT.gif?f=user_large
En dat kun je bereiken met deze vba-macro:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
Sub macro1()
Dim a As Integer, fk As Integer, r As Integer
a = 1: r = 1
Do Until IsEmpty(Cells(r, 1))
While Cells(r + 1, 1) = Cells(r, 1)
fk = Cells(a, Columns.Count).End(xlToLeft).Column + 1
r = r + 1
Range(Cells(r, 3), Cells(r, 6)).Copy Cells(a, fk)
Wend
Rows(a + 1 & ":" & r).EntireRow.Delete
a = a + 1: r = a
Loop
End Sub
Pagina: 1