2 votes

Excel : Fusionner les valeurs dupliquées dans un tableau 2D en sortie de la fonction FILTER()

J'ai un tableau 2D qui est le résultat d'une fonction FILTER(), similaire à :

=FILTER(
    INDEX(dataTable, SEQUENCE(ROWS(dataTable)), {5, 12, 2, 8}),
    dataTable[Status]=A1
)

Les données sources sont un tableau de commandes dans une feuille de calcul externe, et les données ci-dessus fournissent un résumé des commandes avec un statut donné.

Cela fonctionne bien, mais dans les données sources, il peut y avoir des lignes en double pour une même commande. Par exemple :

N° de commande

Articles

Commandé

Livré

...

...

...

...

123

Pommes

1 janvier

2 janvier

123

Oranges

1 janvier

5 janvier

...

...

...

...

Ce que je recherche est un moyen de condenser les résultats de manière à ce que :

  • Lorsqu'il y a des valeurs en double dans une colonne spécifique, seuls les détails de la première ligne sont affichés.
  • Toutes les valeurs dupliquées d'une colonne sont affichées/concaténées

Le tableau résultant ressemblerait donc à quelque chose comme :

N° de commande

Articles

Commandé

Livré

...

...

...

...

123

Pommes, orange

1 janvier

2 janvier

...

...

...

...

Pour faire le lien entre l'exemple de code ci-dessus et cet exemple, supposons que dans les données sources :

  • La colonne 5 correspond au "numéro d'ordre" (la colonne dont nous filtrons les doublons).
  • La colonne 12 est "Items" (la colonne dans laquelle nous cherchons à répertorier toutes les valeurs de ce numéro d'ordre s'il y a un doublon).
  • D'autres colonnes du tableau de sortie peuvent extraire des résultats de colonnes hors ordre, par exemple la colonne 1 ou la colonne 50.

Il est également exigé que les données sources ne puissent pas être modifiées et que cela soit fait à l'aide de formules (sans utiliser de macros, de plugins tiers, etc.).

Est-ce possible ?

2voto

JvdV Points 16691

Essayez :

enter image description here

Formule en F1 :

=REDUCE(A1:D1,UNIQUE(A2:A5),LAMBDA(x,y,VSTACK(x,HSTACK(y,TEXTJOIN(", ",,FILTER(B2:B5,A2:A5=y)),XLOOKUP(y,A2:A5,C2:D5)))))

0voto

Harun24HR Points 4148

Essayez la formule suivante

=LET(x,A2:A5,y,UNIQUE(x),a,MAP(y,LAMBDA(z,TEXTJOIN(", ",1,FILTER(B:B,A:A=z)))),HSTACK(y,a))

enter image description here

Si vous souhaitez ajouter d'autres colonnes, essayez-

=LET(x,A2:INDEX(A2:A50000,COUNTA(A2:A50000)),y,UNIQUE(x),
itms,BYROW(y,LAMBDA(items,TEXTJOIN(", ",1,UNIQUE(FILTER(B:B,A:A=items))))),
odt,BYROW(y,LAMBDA(ordt,TEXTJOIN(", ",1,TEXT(UNIQUE(FILTER(C:C,A:A=ordt)),"d/m/e")))),
ddt,BYROW(y,LAMBDA(drdt,TEXTJOIN(", ",1,TEXT(UNIQUE(FILTER(D:D,A:A=drdt)),"d/m/e")))),
HSTACK(y,itms,odt,ddt))

enter image description here

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X