web-dev-qa-db-fra.com

Générez une liste de contenus cellulaires séparées par des virgules, à l'exclusion des blancs

Pour concaténer une certaine quatre cellules, j'utiliserais:

=CONCATENATE(A2,",",C2",",D2,",",F2)

Cela ferait cela pour que ...

  • A2 = "Matthew"
  • C2 = "Mark"
  • D2 = "Luke"
  • F2 = "John"

aboutirait à Matthew,Mark,Luke,John.

Mais nous rencontrons des problèmes de quelque chose comme ...

  • A2 = "Jésus"
  • C2 = ""
  • D2 = "Mary"
  • F2 = "Joseph"

qui aboutirait à Jesus,,Mary,Joseph.

Ici, la virgule supplémentaire est indésirable. Existe-t-il un moyen de manipuler gracieusement cela afin que toutes les cellules non blanches soient incluses dans la liste séparée par des virgules, tout en évitant l'ajout de virgules inutiles lorsque certaines cellules sont vides?

Certes, cela peut être fait avec un nombre équitable d'IFS imbriqués, mais je veux vraiment éviter cela si possible. Peut-on faire avec des fonctions d'Excel natif, ou peut-être une formule de matrice? Ou il faudrait-il recourir à VB Script pour quelque chose comme ça?

7
Iszi

Dans Excel 2016, vous pouvez utiliser TEXTJOIN:

=TEXTJOIN(delimiter,ignore_blanks?,values_to_be_joined)

Donc, dans votre cas, vous utiliseriez cette formule:

=TEXTJOIN(",",TRUE,A2,C2,D2,F2)
11
sdf

Je présume que vous recherchez une solution simple et de ne pas améliorer vos compétences.

Vous pouvez utiliser un complément si cela est autorisé (c'est-à-dire que vous avez la permission d'installer Adines). ASAP Utilitaires est un élément que je recommande vivement qui est gratuit pour une utilisation non commerciale.

Voici ce que vous pouvez faire avec l'une de leurs fonctions

Cet utilitaire fusionne les données des colonnes de votre sélection. Pour chaque ligne de votre sélection, les données des colonnes adjacentes seront concaténées dans la première cellule de la ligne.

Vous pouvez spécifier les éléments suivants: Délimiteur à mettre entre les valeurs de cellule Ignorer les cellules vides Utilisez la valeur, la formule ou la valeur formatée des cellules.

Screenshot

2
Parivar Saraff

Je supposerai que vos données ont des en-têtes et mènent en A2.

  1. Allez dans une colonne de rechange, je vais utiliser b dans cet exemple
  2. Dans la cellule B2 Entrez simplement = A2
  3. Dans la cellule B3 Entrée = si (A3 = "", B2, Concaténate (B2, ",", A3)
  4. Copier la colonne B de B3 (non B2!) À la dernière ligne contenant des données dans la colonne A

Voila, votre liste séparée par des virgules est dans la dernière cellule de la colonne B :)

Je suis venu ici à la recherche d'une solution, n'a trouvé aucun et je suis donc proposé ce qui précède. Mes données ont 1000 lignes, l'ajout manuellement à la concaténate n'est donc pas une option.

1
Rich Harding

Si vous souhaitez une solution générale, la meilleure réponse va impliquer VBA.

Si votre exemple de données est proche du problème intégral que vous adressez, vous pouvez simplement procéder comme suit pour supprimer Double-Commas:

=SUBSTITUTE(CONCATENATE(A2,",",C2",",D2,",",F2),",,",",")

Ce qui précède ne fonctionnera que si vous n'avez jamais eu que des lacunes une valeur de grande valeur. Vous aurez besoin de formules de substitution imbriquée () pour gérer des lacunes plus larges.

=SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(CONCATENATE(A2,",",C2,",",D2,",",F2),",,,,,,,,,,,,,,,,",","),",,,,,,,,",","),",,,,",","),",,,",","),",,",",")

Ce qui précède réduira jusqu'à 398 virgules séquentielles à une. Cela réduira également beaucoup de valeurs supérieures à 399, mais 399 elle-même et plusieurs autres entraîneront plus d'une virgule.

1
Dane

Il suffit de combiner concaténate () avec if () dans une fonction de tableau:

=arrayformula(concatenate(if(not(isempty(a2:f2)),a2:f2&", ","")))

Cette fonction laissera une virgule à la fin de votre liste. Si vous avez besoin d'éviter cela et que vous savez exactement où la fin de la liste est (dans votre exemple, la colonne F) gérer simplement celle-ci séparément:

=arrayformula(concatenate(if(not(isempty(a2:d2)),a2:d2&", ","")))&if(not(isempty(f2)),f2,"")

Acclamations!

0
Phillip Winkler

Je ne me souviens pas d'où j'ai trouvé cette solution, mais cela fonctionne bien pour obtenir une liste de chaînes.

Pour les données dans les cellules A1 à A3

=CONCATENATE(TRANSPOSE(A1:A3)

Appuyez sur ENTER, puis revenez dans la barre de formule et mettez en surbrillance A1: A3 dans la formule, puis appuyez sur F9. Cela transformera votre gamme en une liste délimitée semi-points avec des citations autour de chaque article.

=CONCATENATE(TRANSPOSE({"Matthew", "Mark", "John"}))

Après avoir appuyé sur F9, mettez en surbrillance et copiez la liste, puis coller dans une autre cellule. À partir de là, vous pouvez trouver et remplacer à utiliser des virgules au lieu de demi-couches ou de citation simple au lieu de double.

0
user2913433