Cellules divisées Excel 2010 avec des virgules sans espaces (vs. virgules avec espaces)

0

J'ai fait beaucoup de recherches pour le comprendre, mais toutes les réponses nécessitent soit de séparer toutes les données par toutes les virgules (c'est-à-dire chaque fois qu'une virgule apparaît, elles sont scindées) ou de connaître l'emplacement exact de la virgule (c'est-à-dire , c’est la troisième virgule).

Ce dont j'ai besoin est plus variable que cela. Les données sont exportées dans une liste d'une cellule, les données devant rester dans la même cellule étant séparées par des virgules avec des espaces (par exemple, "chien, chat" et non "chien, chat"). J'ai besoin que les divisions se produisent à ce dernier ("chien, chat"), mais pas au premier ("chien, chat"). Cela se produit plusieurs fois en fonction des données.

Par exemple, une cellule pourrait dire ceci:

Dog Walk, Talk, et Wag, Cat Meow, Sifflement et Ronronnement, Perroquet Squawk et Talk, Canard Quack and Talk

Où j'en aurais besoin pour ressembler à ceci:

cellule 1: Promenade, conversation et mouvement de chien

cellule 2: chat miaou, sifflement et ronronnement

cellule 3: Squawk Parrot et Talk

cellule 4: charlatan et conversation

Mais une autre cellule aura des mots différents et un placement différent par une virgule.

Est-ce qu'il y a un moyen de faire ça?

Je vous remercie!!

Allysonb
la source
VBA est le seul moyen d'effectuer une scission basée sur une virgule suivie par autre chose qu'un espace. Êtes-vous ouvert à une solution dans VBA? Si vous répondez, merci de mettre @Eric F devant vous pour que je voie votre réponse.
Eric F

Réponses:

1

Lorsque j'ai dû faire quelque chose comme cela, j'ai utilisé la fonction Rechercher et remplacer pour "masquer" temporairement la combinaison de caractères avant de séparer les colonnes.

Le processus se déroule fondamentalement comme ceci:

  1. Sélectionnez tout le texte à diviser en colonnes.
  2. Utilisez Rechercher et remplacer pour remplacer toutes les combinaisons espace-virgule par quelque chose qui ne se trouve pas dans les données (j’utilise habituellement quelque chose comme @@@).
  3. Exécutez la fonction Texte en colonnes en séparant les virgules.
  4. Sélectionnez toutes les colonnes nouvellement créées.
  5. Exécutez à nouveau la commande Rechercher et remplacer , mais inversez-la pour la @@@replacer dans la paire virgule-espace.
techturtle
la source
1
+1 sur ceci, j'utilise aussi cette méthode mais au lieu de rechercher et remplacer, je préfère utiliser une formule du type: = SUBSTITUTE (A1, ",", "@@@") dans la colonne B, puis copier / coller comme valeurs spéciales , et à utiliser avec la fonction Text to Columns . peut-être un peu plus, mais garantit que le texte original reste intact. Me donne la tranquillité d'esprit.
arana
0

Il s'agit d'une macro VBA mettant en œuvre la solution de Techturtle. Sélectionnez les cellules que vous souhaitez traiter et exécutez cette courte macro:

Sub splitText()
    Dim rng As Range, r As Range, a As Variant, i As Long
    Set rng = Selection.Cells.SpecialCells(2)

    For Each r In rng
        v = r.Value
        If InStr(1, v, ",") > 0 Then
            ary = Split(Replace(v, ", ", Chr(1)), ",")
            i = 1
            For Each a In ary
                r.Offset(0, i).Value = Replace(a, Chr(1), ", ")
                i = i + 1
            Next a
        End If
    Next r
End Sub

entrez la description de l'image ici

Les données d'origine sont intactes.

REMARQUE:

Ce code est spécifique aux cellules contenant des constantes plutôt que des formules.

Gary's Student
la source