web-dev-qa-db-fra.com

Concaténer uniquement les cellules remplies

J'ai actuellement un tableur pour garder une trace des scores dans un jeu de cartes. Il peut y avoir entre deux et cinq joueurs. J'ai le suivant:

| Players  |
|----------|
| Dave     |
| Paul     |
| John     |
|          |
|          |

Pour le moment j'utilise:

= JOIN( " vs " ; C10:C14 )

Mais le problème est que je me retrouve alors avec Dave vs Paul vs John vs vs.

Y a-t-il un moyen de le faire dire Dave vs Paul vs John mais si j'avais plus de joueurs, Dave vs Paul vs John vs Rob avec une formule?

19
Djave

Oui, en FILTERing le tableau:

= JOIN( " vs " ; FILTER(C10:C14; NOT(C10:C14 = "") ))

Ainsi, la méthode JOIN ne fonctionnera que sur des cellules non vides.

J'ai mis en place un exemple feuille de calcul .

Consultez également la liste liste de fonctions Google Spreadsheets (recherchez FILTER).

26
Vidar S. Ramdal

Essayez TEXTJOIN :

=textjoin(" vs ",1,C10:C14)
10
pnuts

Les deux solutions ci-dessus fonctionnent s'il existe au moins une cellule contenant du texte. Pourtant:

= JOIN(" vs ",SPLIT(JOIN("%",C10:C14),"%",0))

Renverrait %%%% si C10: C14 étaient tous vides et.

= JOIN( " vs " ; FILTER(C10:C14; NOT(C10:C14 = "") ))

Renverrait #N/A si C10: C14 étaient tous vides.

Cependant, vous pouvez légèrement modifier la première solution pour remplacer les signes % par des chaînes vides en encapsulant la formule avec la fonction SUBSTITUTE de la manière suivante:

=SUBSTITUTE(
   JOIN(" vs ",SPLIT(JOIN("%",C10:C14),"%",0)),    // text_to_search
   "%",                                            // search_for
   ""                                              // replace_with
 )

(Affiché sur plusieurs lignes pour plus de clarté)

5

J'ai trouvé une autre solution:

=JOIN(" vs ",SPLIT(JOIN("%",C10:C14),"%",0))

Le% peut être tout symbole réellement absent de la liste, comme une virgule, une esperluette ou un point d'interrogation.

4
dan