0
votes

VBA Coupez une chaîne d'un caractère si le caractère est trouvé

Cela a probablement été posé un million de fois dans différentes variations, mais je ne trouve pas de réponse qui convient.

J'ai une chaîne contenant jusqu'à 4 identifiants Mut ("mut" suivi de 5 numéros, par exemple Mut00761). S'il y a plus d'un identifiant, ils sont séparés par un espace. À une occasion, il y aura également un * entre deux identifiants (par exemple, Mut00761 * Mut00684). Le * est associé à l'ID Mut à gauche. Je dois supprimer tous ces identifiants de mut (et leur *), le cas échéant.

par exemple, "Mut00111 Mut00222 * Mut00333 Mut00444 *" "doit devenir" Mut00111 Mut00333 ".

vba

3 commentaires

Avez-vous déjà essayé quelque chose?


La seule solution que j'ai pensé était une boucle sur le nombre de * dans la chaîne où j'utiliserais des instruments et des concatenations à plusieurs reprises pour reconstruire la chaîne après avoir retiré la partie que je ne voulais pas, mais cela semble trop complexe pour ce qu'il Est-ce que.


Utilisez Split (vide comme séparateur). Boucle sur la gamme de résultats et copier uniquement des éléments à votre chaîne de résultats si un élément n'est pas suivi d'un élément qui ne contient qu'une étoile.


5 Réponses :


0
votes

Formule de la feuille de calcul

= iferror (assaut (substitut (A1, milieu (A1, retrouver ("*", A1) -9,10), ""), A1)


vba udf xxx


1 commentaires

Cette! La boucle sur le nombre de * dans la chaîne et cela fonctionne parfaitement. Merci!



0
votes

1) Obtenez la position de 1er mut avec quelque chose d'instr (1, entièresext, "mut" [ ...])

2) Découpez Mut Plus x caractères ou jusqu'à la prochaine "", "avec

3) faire à nouveau jusqu'à ce que pas de mut ne soit trouvé


0 commentaires

0
votes

Utilisez la bibliothèque Microsoft VBScript régulière Expressions 5.5 pour remplacer les instances de 'mut *' avec vbnullstring.

ou p>

Si vous n'avez pas la fonction simple comme p>

Public Function StripStarredIds(ByVal IdString As String) As String

    Do While InStr(IdString, "*")

        IdString = Replace(IdString, Mid$(IdString, InStr(IdString, "*") - 10, 10), vbNullString)

    Loop

    StripStarredIds = IdString

End Function


0 commentaires

0
votes

J'utiliserais une fonction personnalisée pour le faire. Il peut être un peu maladroit, mais cela devrait fonctionner:

Function StripText(ByVal fullText As String) As String

newText = ""
lastIndex = 1
curIndex = InStr(1, fullText, " *")

If curIndex = 0 Then   '// if no instances of " *" are found then just copy the full text
    newText = fullText
Else
    Do While (curIndex > 0)   '// do until no instances of " *" are found
        newText = newText & Mid(fullText, lastIndex, curIndex - lastIndex - 9)
        lastIndex = curIndex + 2
        curIndex = InStr(lastIndex + 1, fullText, " *")
    Loop
End If

StripText = newText

End Function


0 commentaires

0
votes

Vous pouvez utiliser split () fonction comme ceci: xxx


0 commentaires