Dans ma table, la colonne A a des noms de lignes et les autres colonnes ont des valeurs:
+------+---+
| M100 | D |
| M130 | B |
| M340 | |
| P304 | F |
| P400 | |
| P499 | C |
+------+---+
Je voudrais joindre des valeurs non vides, les précédant avec des noms de lignes et en les séparant par des virgules. La sortie souhaitée est donc:
M100A, M130B, P304A, P499C
Ceci est un peu similaire à Concaténer uniquement les cellules remplies sauf que j'ai aussi des noms de lignes.
Si la fonction query
permet la concaténation de valeurs de chaîne, une solution pourrait ressembler à quelque chose comme select concat(A,B) where B!=''
, jointe par la suite. À l'heure actuelle, cela n'est toutefois pas pris en charge.
Je publie ma solution en guise de réponse, mais j'aimerais voir d'autres approches, car la formule de double filtre semble un peu répétitive.
Une formule qui fait le nécessaire dans la question
=JOIN(",",
QUERY(
{ArrayFormula({A1:A6}&{B1:B6}),B1:B6},
"Select Col1 Where Col2<>''"
)
)
La formule ci-dessus a imbriqué trois fonctions, utilisez la fonctionnalité de gestion de matrice de Google Sheets et l'opérateur de concaténation.
ArrayFormula({A1:A6}&{B1:B6})
: concatène les valeurs de cellule de chaque ligne.{ArrayFormula({A1:A6}&{B1:B6}),B1:B6}
: crée une plage avec deux colonnes. La deuxième colonne sera utilisée pour le filtrage.QUERY
est utilisé pour effectuer le filtrage.JOIN
est utilisé pour créer la chaîne séparant les éléments par une virgule.Voici une formule qui fait ce qui précède, avec des lignes brisées et en retrait pour plus de lisibilité:
=JOIN(",", ARRAYFORMULA(
FILTER($A2:$A7, NOT(ISBLANK(B2:B7))) & FILTER(B2:B7, NOT(ISBLANK(B2:B7)))
))
Il existe également une formule plus simple, mais elle laisse une virgule dans le résultat:
=CONCATENATE(ARRAYFORMULA(
IF(B2:B7="", "", $A2:$A7 & B2:B7 & ",")
))