Concaténer les valeurs de la table correspondante

Je search une approche non-VBA pour concaténer une list de produits à partir d'un tableau correspondant. Si possible, je préférerais utiliser une formule basée sur le tableau.

Par exemple, vous disposez d'un tableau de clients et de chaque article qu'ils ont acheté.

John Apple Steve Orange John Pear Steve Grapes John Tomato 

Ensuite, sur une table séparée, j'aimerais énumérer chaque personne (une par ligne) et énumérer les produits qu'ils ont achetés séparés par une virgule:

 John Apple, Pear, Tomato Steve Orange, Grapes 

La chose la plus proche que je puisse find est ce guide , que je peux m'adapter à concaténer mais que vous devriez connaître la quantité de produits qu'ils ont achetés.

Je supprimerai cette publication dès que vous acceptez la solution non vba d'une autre personne.

Si nous commençons par:

entrez la description de l'image ici

et exécutez cette macro:

 Sub ReOrganize() Dim i As Long, N As Long, j As Long, st As Ssortingng Dim M As Long Range("A:A").Copy Range("E1") Range("E:E").RemoveDuplicates Columns:=1, Header:=xlNo N = Cells(Rows.Count, "E").End(xlUp).Row M = Cells(Rows.Count, "B").End(xlUp).Row For i = 1 To N st = "" v1 = Cells(i, "E").Value For j = 1 To M v2 = Cells(j, "A").Value If v1 = v2 Then st = st & ", " & Cells(j, "B").Value End If Next j Cells(i, "F").Value = Mid(st, 2) Next i End Sub 

Nous obtiendrons:

entrez la description de l'image ici

Comme indiqué dans les commentaires, il peut être fait avec des formules, mais VBA serait vraiment idéal. Limiter uniquement les formules ajoute un peu de complexité.

Cela dit, je suis un sucker pour un défi Excel-Only. Voir l' exemple de classur ici

Capture d'écran de l'exemple de travail

Les données brutes sont en fonte bleue, les formules en noir. Les tables auxiliaires ont des rubriques vertes.

  • E5: = COUNTIF(B$5:B5,B5) . Indique combien d'exemples de Nom l'ont précédé dans le tableau.
  • F5: =B5&"_"&E5
  • E14: =IFERROR(INDEX($C$5:$C$9,MATCH($B14&"_"&E$13,$F$5:$F$9,0)),"") . Cela regarde 'John_1' ou similaire de la table auxiliaire. Si aucune correspondance n'est trouvée, elle renvoie une string vierge "".
  • F14: identique à E14, avec "," ajouté à la sortie