web-dev-qa-db-fra.com

Concaténer deux colonnes en n'utilisant que des cellules remplies dans l'une d'entre elles

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.

3
user79865

Réponse courte

Une formule qui fait le nécessaire dans la question

=JOIN(",",
      QUERY(
            {ArrayFormula({A1:A6}&{B1:B6}),B1:B6},
            "Select Col1 Where Col2<>''"
      )
 )

Explication

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.
5
Rubén

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 & ",")
))
2
user79865