J'ai un tableur Google avec des articles et des prix. La colonne D
a les prix, la colonne C
a des noms d'éléments, dont certains contiennent plusieurs mots. Lorsqu'un élément contient plusieurs mots, seul le premier est vraiment significatif.
Ce que j'aimerais réaliser est la suivante:
Je générerai ensuite un camembert (c'est de la nourriture, après tout) avec les résultats. Ainsi, par exemple, je pourrais avoir:
1 C | D
-------------------+------------
2 Cheese | $9.08
3 Milk, 2L | $3.89
4 Avocado | $0.99
5 Avocado 3/$5 | $5.00
6 Apples Fuji | $2.75
7 Avocado | $1.49
8 Milk 4L | $4.75
9 Apples | $2.25
Le résultat final sera:
Cheese | $9.08
Milk | $8.64
Avocado | $7.48
Apples | $5.00
Je sais que je peux utiliser REGEXEXTRACT()
pour analyser un champ individuel:
=REGEXEXTRACT(C3; "^([A-Za-z]+)")
renvoie Milk
, comme je m'y attendais. De plus, je sais que je peux additionner les totaux d'une colonne en utilisant FILTER()
:
L | M
--------------------+----------
=UNIQUE( C2:C ) | =SUM( FILTER( D$2:D; L2=C$2:C ) )
=CONTINUE(C2, 2, 1) | =SUM( FILTER( D$2:D; L3=C$2:C ) )
...
Mais je veux les combiner et additionner les totaux des éléments tels que modifiés par REGEXEXTRACT()
. J'espérais pouvoir faire quelque chose comme:
=UNIQUE( REGEXEXTRACT( C2:C; "^([A-Za-z]+)" ) )
et
=SUM( FILTER( D$2:D; L2=REGEXEXTRACT(C$2:C, "^([A-Za-z]+)") ) )
Mais lorsqu'elle est présentée avec une plage, la fonction REGEXEXTRACT()
ne fournit qu'une chaîne, pas un tableau. Ceci est confirmé car lorsque j'essaie la formule:
=REGEXEXTRACT(UNIQUE(C2:C); "^([A-Za-z]+)")
l'erreur que j'obtiens est "pas une chaîne: Cheese".
Donc ma question est ... Comment puis-je faire ce travail?
Dois-je créer une feuille de travail "à gratter" en tant que pont? Est-il possible de REGEXEXTRACT()
chaque élément d'un résultat UNIQUE()
au sein d'une formule?
Mon approche serait de "normaliser" les données en premier:
=ArrayFormula(IF({1,0};IFERROR(REGEXEXTRACT(A2:A;"^([a-zA-Z]+)"));B2:B))
et ensuite vous pouvez envelopper directement ceci dans une fonction QUERY pour produire le résultat souhaité:
=ArrayFormula(QUERY(IF({1,0};IFERROR(REGEXEXTRACT(A2:A;"^([a-zA-Z]+)"));B2:B);"select Col1, sum(Col2) where Col1 != '' group by Col1 label sum(Col2) ''";0))
Vous pouvez même générer une ligne d'en-tête:
=ArrayFormula(QUERY(IF({1,0};IFERROR(REGEXEXTRACT(A2:A;"^([a-zA-Z]+)"));B2:B);"select Col1, sum(Col2) where Col1 != '' group by Col1 label Col1 'Food Item', sum(Col2) 'Total'";0))