-2
votes

Traitement des chaînes dans VBA

supposons avoir la table Excel suivante

image

J'essaie d'écrire une macro dans VBA qui scanne les cellules dans la colonne de routage et répandit les sous-chaînes dans les autres colonnes. Donc, cela devrait être le résultat final

image

Potentiellement si l'algorithme trouve n Substrings dans la chaîne principale sous la colonne RTG, il doit remplir n colonnes avec les substrings.

Pouvez-vous m'aider?

Merci d'avance


1 commentaires

Il sera plus facile d'aider si vous Modifiez votre question pour nous montrer ce que vous avez essayé jusqu'à présent. Vous pouvez également expliquer pourquoi le texte aux colonnes ne fonctionnera pas pour vous?


4 Réponses :


0
votes

comme indiqué sur ICI , vous pouvez utiliser texte sur colonnes :

Sélectionnez la cellule ou la colonne contenant le texte que vous souhaitez scinder.

Sélectionnez Données> Texte aux colonnes.

Dans l'assistant de convertir du texte en colonnes, sélectionnez Délimitée> Suivant.

Sélectionnez les délimiteurs pour vos données. Vous voudriez mettre un - dans "Autre" Zone.

Sélectionnez Suivant.

Sélectionnez le format de données de colonne ou utilisez ce que Excel a choisi pour vous.

Sélectionnez la destination, à savoir où vous souhaitez que les données divisées soient. apparaissent sur votre feuille de calcul.

Sélectionnez Terminer.


2 commentaires

Merci, puis-je enregistrer une macro pour cela et le faire pour une rangée?


@DavideTarsitano - oui vous pouvez. Vous pouvez également mettre en évidence toutes les lignes dont vous avez besoin pour courir et tout faire à la fois.



1
votes

Nous pouvons analyser en utilisant le caractère fort> caractère: xxx pré>

Entrez la description de l'image ici p>

Edit N ° 1: strong> P>

Le code va vous tromper s'il rencontre une cellule vide prématurément. Pour éviter cette utilisation: P>

Sub dural()
    Dim i As Long, N As Long
    N = Cells(Rows.Count, "B").End(xlUp).Row
    For i = 2 To N
        v = Cells(i, 2).Value
        If v <> "" Then
            arr = Split(v, "-")
            Cells(i, 3).Resize(1, UBound(arr) + 1) = arr
        End If
    Next i
End Sub


3 commentaires

Merci, la macro fonctionne, mais quand il l'exécute, cela me donne une erreur sur la dernière ligne "cellules (I, 2) .Offset (0, 1) .Resize (1, Ubound (arr) + 1) = Arr" Dire "" Dire " Erreur définie par l'application ou définie par objet "


Merci, la macro fonctionne, mais quand il l'exécute, cela me donne une erreur sur la dernière ligne "cellules (I, 2) .Offset (0, 1) .Resize (1, Ubound (arr) + 1) = Arr" Dire "" Dire " Erreur définie par l'application ou définie par objet "


@DavideTarsitano Voir mon Edit # 1



0
votes

Voici un simple sous pour fonctionner sur la cellule active actuelle.

Sub splitCell()
Dim cellSplit As Variant
Dim nextColumn As Long

nextColumn = 1
cellSplit = Split(ActiveCell.Value2, "-")
For Each Item In cellSplit
    ActiveCell.Offset(0, nextColumn).Value2 = Item
    nextColumn = nextColumn + 1
Next

End Sub


0 commentaires

0
votes

Aucune des autres solutions ne semble traiter correctement avec des traits d'union de pointe.

Ceci devrait traiter avec leading / Trailing / Double Thhens sur les cellules actuellement sélectionnées dans une colonne. La mise en garde est que les substrings individuelles ne doivent pas contenir d'espaces. xxx


0 commentaires