[Excel] Meerdere waarden zoeken en retourneren in één cel

Pagina: 1
Acties:

Vraag


Acties:
  • 0 Henk 'm!

  • ingevd
  • Registratie: Mei 2024
  • Laatst online: 01-06-2024
Ik heb een tabel met 'ruwe' data:
[naam 1] [vraag 1] [antwoord 1]
[naam 1] [vraag 1] [antwoord 2]
[naam 1] [vraag 2] [antwoord 1]
[naam 1] [vraag 3] [antwoord 1]
enz.

Ik wil graag per persoon zien wie wat heeft geantwoord per vraag. Wanneer er 2 antwoorden zijn op eenzelfde vraag, zie ik die liefst in één cel.
Bv [naam 1] [vraag 1] [antwoord 1, antwoord 2]

Ik heb al deze formule toegepast maar dan krijg ik uiteraard enkel de eerste waarde terug ipv alle waarden.
=INDEX($A$2:$C$9,VERGELIJKEN(1,($A16=$A$2:$A$9)*(B$15=$B$2:$B$9),0),3)

Hieronder een voorbeeld tabel. De echte tabel bevat honderden rijen en een 15-tal vragen met telkens mogelijk meerdere antwoorden per persoon.

https://docs.google.com/s...963909&rtpof=true&sd=true

Alvast bedankt!!

Beste antwoord (via ingevd op 01-06-2024 14:50)


  • Belindo
  • Registratie: December 2012
  • Laatst online: 21:20

Belindo

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

Ok, gisteravond helaas niet gelukt, sorry. Bij deze alsnog.

In cel A27 staat de formule: =SORT(UNIQUE(A2:A9))
Het deel UNIQUE() kijkt naar de kolom met namen en retourneert de (twee) unieke namen. Deze formule zit in een SORT() functie die de namen van A naar Z sorteert. Dit is een zgn. 'spill' formule. Hij staat dan wel in 1 cel, maar als er meer dan 1 unieke naam voorkomt zal hij de cellen eronder automatisch vullen. Cel A27 bevat dus technisch gezien niet de tekst 'Inge', als je dit verwijderd blijft het gewoon staan omdat het wordt ingevuld door de spill formule erboven.

In cel B25 staat een soortgelijke formula als hierboven; =TRANSPOSE(SORT(UNIQUE(B2:B9))) .Maar hier kijken we naar de kolom met vragen. Wederom pakken we de unieke waarden, sorteren die A-Z, maar dan zetten we dat in een extra functie; TRANSPOSE() die de waarden niet in rijen, maar kolommen zet. In C25 en D25 staat dus 'niets' maar de waarde wordt gevuld door die formule ernaast.

In cel B26 staat de formule:
=TEXTJOIN("
";TRUE;FILTER($C$2:$C$9;$A$2:$A$9=$A26;$B$2:$B$9=B$25))

Deze formule begint met een FILTER() functie waar we de colom C (antwoorden) willen filteren. De kolom A met namen moet gelijk zijn aan de naam in cel A26, en de kolom met vragen moet gelijk zijn aan cel B25.

Dit retourneert een spill range met de antwoorden. Als je de formule zo zou gebruiken krijg je twee cellen onder elkaar voor Inge vraag 2 en Inge vraag 3, maar we willen het in één cel. Vandaar de TEXTJOIN() functie; deze voegt de twee (of meerdere) opties samen, met een linebreak tussen "" als scheidingsteken. Wanneer je 'wrap' aanzet in je cel, komen de antwoorden netjes onder elkaar te staan.

De dollartekens worden gebruikt om de celreferenties te 'locken' zodat wanneer je de kolom ergens anders plakt, de referenties niet veranderen naar de verkeerde kolom of rij.
Wanneer de $ voor de letter staat, locken we de kolom; als je de formule naar rechts plakt, blijft ie naar de goede kolom kijken. Als je de formule naar beneden plakt kijkt ie wél naar de nieuwe rij, maar de kolom veranderd niet.
Wanneer de $ voor het cijfer staat, locken we de rij; als je de formula naar beneden plakt blijft ie naar dezelfde rij kijken als de formule erboven. Als je de formule naar links plakt, kijkt hij naar de kolom respectievelijk in welke de formule staat.
Wanneer de $ voor zowel de letter als het cijfer staan, lock je de complete range. Het maakt niet uit waar je de formule plakt, de celreferentie zal nooit veranderen.

Wat betreft de formule in B26; deze kun je nu plakken in het bereik afhankelijk van hoeveel vragen en namen je hebt. Helaas krijg ik het in Google Spreadsheets niet voor elkaar om er een spill formule van te maken zoals in Excel (daar kun je je referentie naar een spill aangeven met een #, waardoor de formule automatisch wordt gevuld voor het aantal rijen (en/of kolommen) van je spill ranges. Zo zou je technisch gezien maar 1 formule in B26 nodig hebben om de hele range (B26:D27) te voorzien van de resultaten.

Coding in the cold; <brrrrr />

Alle reacties


Acties:
  • +1 Henk 'm!

  • F_J_K
  • Registratie: Juni 2001
  • Niet online

F_J_K

Moderator CSA/PB

Front verplichte underscores

Welkom :)

Je kunt =TEKST.COMBINEREN() gebruiken.

ik heb je sheet niet bekeken, maar als de zoekwaarden staat in kolom A en de te tonen antwoorden in kolom B dan ben je er met =TEKST.COMBINEREN(";";WAAR;ALS(A2:A7=D1;B2:B7;""))

Althans, als je 1 zoekkolom hebt. Bij twee wordt dat nog wat complexer. Op te lossen bijvoorbeeld met een hulpkolom C2 = A2 &" " & B2. Maar dat wordt wat omslachtig.

Is bijvoorbeeld een draaitabel niet handiger? Of en "echte" databasetaal a la SQL.

'Multiple exclamation marks,' he went on, shaking his head, 'are a sure sign of a diseased mind' (Terry Pratchett, Eric)


Acties:
  • 0 Henk 'm!

  • ingevd
  • Registratie: Mei 2024
  • Laatst online: 01-06-2024
Dankjewel voor je snelle reactie!

Een draaitabel kan ik toch enkel gebruiken met getallen als waarde? Daarom dat ik werk met de combinatie index en vergelijken.

In mijn tabel zoek ik waar de opgegeven naam voorkomt in de kolom met namen EN waar de opgegeven vraag overeenkomt. Het probleem is dat er meerdere rijen zijn met deze combinatie en ik wil de antwoorden van die meerdere rijen gecombineerd krijgen. De functie tekst.combineren kan wel helpen maar dan weet ik nog niet hoe ik (via een matrix?) zoek naar alle rijen waarin diezelfde naam en vraag voorkomt.

Ik moet het nu in excel klaarspelen (vs SQL). SQL is bij mij ook al meer dan 20 jaar geleden dus ik vrees dat dat wel heel ver weg zit. :-)

Acties:
  • +1 Henk 'm!

  • Belindo
  • Registratie: December 2012
  • Laatst online: 21:20

Belindo

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

Ik heb een draaitabel in je file gezet. Gewoon alles in rijen, dan krijg je een soort tabelletje.

Coding in the cold; <brrrrr />


Acties:
  • 0 Henk 'm!

  • ingevd
  • Registratie: Mei 2024
  • Laatst online: 01-06-2024
Dag Belindo, bedankt voor de snelle hulp en voor de tip!

Dit geeft niet echt het resultaat dat ik zoek. Ik wil links een lijst van alle personen en bovenaan alle vragen met dan een nette overzichtelijke tabel met de antwoorden. Dat lukt me wanneer er 1 antwoord is per vraag per persoon maar niet wanneer er meerdere antwoorden zijn per vraag per persoon.

Vraag 1 Vraag 2 Vraag 3
Naam 1
Naam 2
Naam 3

(En ik ben helemaal fan van het 'pivot' principe en de bijhorende gif :-D)

[ Voor 8% gewijzigd door ingevd op 29-05-2024 16:11 ]


Acties:
  • +1 Henk 'm!

  • Belindo
  • Registratie: December 2012
  • Laatst online: 21:20

Belindo

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

Ik heb nog een voorbeeld gezet met Textjoin en FILTER. De namen en vragen worden ook dynamisch gegenereerd. De formula voor de resultaten helaas niet, zit nu op mobiel dus gaat iets moeilijker.

In Excel kun je door middel van # een dynamische reeks aanroepen waardoor je formule ook dynamisch groter wordt. Dat lukt nu ff niet ij Google Spreadsheets.

Edit: zal vanavond nog even wat uitleg van de gebruikte formules toevoegen aan dit topic

[ Voor 11% gewijzigd door Belindo op 30-05-2024 18:32 ]

Coding in the cold; <brrrrr />


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

  • Belindo
  • Registratie: December 2012
  • Laatst online: 21:20

Belindo

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

Ok, gisteravond helaas niet gelukt, sorry. Bij deze alsnog.

In cel A27 staat de formule: =SORT(UNIQUE(A2:A9))
Het deel UNIQUE() kijkt naar de kolom met namen en retourneert de (twee) unieke namen. Deze formule zit in een SORT() functie die de namen van A naar Z sorteert. Dit is een zgn. 'spill' formule. Hij staat dan wel in 1 cel, maar als er meer dan 1 unieke naam voorkomt zal hij de cellen eronder automatisch vullen. Cel A27 bevat dus technisch gezien niet de tekst 'Inge', als je dit verwijderd blijft het gewoon staan omdat het wordt ingevuld door de spill formule erboven.

In cel B25 staat een soortgelijke formula als hierboven; =TRANSPOSE(SORT(UNIQUE(B2:B9))) .Maar hier kijken we naar de kolom met vragen. Wederom pakken we de unieke waarden, sorteren die A-Z, maar dan zetten we dat in een extra functie; TRANSPOSE() die de waarden niet in rijen, maar kolommen zet. In C25 en D25 staat dus 'niets' maar de waarde wordt gevuld door die formule ernaast.

In cel B26 staat de formule:
=TEXTJOIN("
";TRUE;FILTER($C$2:$C$9;$A$2:$A$9=$A26;$B$2:$B$9=B$25))

Deze formule begint met een FILTER() functie waar we de colom C (antwoorden) willen filteren. De kolom A met namen moet gelijk zijn aan de naam in cel A26, en de kolom met vragen moet gelijk zijn aan cel B25.

Dit retourneert een spill range met de antwoorden. Als je de formule zo zou gebruiken krijg je twee cellen onder elkaar voor Inge vraag 2 en Inge vraag 3, maar we willen het in één cel. Vandaar de TEXTJOIN() functie; deze voegt de twee (of meerdere) opties samen, met een linebreak tussen "" als scheidingsteken. Wanneer je 'wrap' aanzet in je cel, komen de antwoorden netjes onder elkaar te staan.

De dollartekens worden gebruikt om de celreferenties te 'locken' zodat wanneer je de kolom ergens anders plakt, de referenties niet veranderen naar de verkeerde kolom of rij.
Wanneer de $ voor de letter staat, locken we de kolom; als je de formule naar rechts plakt, blijft ie naar de goede kolom kijken. Als je de formule naar beneden plakt kijkt ie wél naar de nieuwe rij, maar de kolom veranderd niet.
Wanneer de $ voor het cijfer staat, locken we de rij; als je de formula naar beneden plakt blijft ie naar dezelfde rij kijken als de formule erboven. Als je de formule naar links plakt, kijkt hij naar de kolom respectievelijk in welke de formule staat.
Wanneer de $ voor zowel de letter als het cijfer staan, lock je de complete range. Het maakt niet uit waar je de formule plakt, de celreferentie zal nooit veranderen.

Wat betreft de formule in B26; deze kun je nu plakken in het bereik afhankelijk van hoeveel vragen en namen je hebt. Helaas krijg ik het in Google Spreadsheets niet voor elkaar om er een spill formule van te maken zoals in Excel (daar kun je je referentie naar een spill aangeven met een #, waardoor de formule automatisch wordt gevuld voor het aantal rijen (en/of kolommen) van je spill ranges. Zo zou je technisch gezien maar 1 formule in B26 nodig hebben om de hele range (B26:D27) te voorzien van de resultaten.

Coding in the cold; <brrrrr />


Acties:
  • +1 Henk 'm!

  • ingevd
  • Registratie: Mei 2024
  • Laatst online: 01-06-2024
Dag Belindo,

dit doet exact wat ik nodig heb. Dikke merci voor je uitleg. Dat maakt het heel helder!

Dankjewel!
Groetjes
Pagina: 1