Cela a probablement été posé un million de fois dans différentes variations, mais je ne trouve pas de réponse qui convient. P>
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. P>
par exemple, "Mut00111 Mut00222 * Mut00333 Mut00444 *" "doit devenir" Mut00111 Mut00333 ". P>
5 Réponses :
vba udf strong> p> = iferror (assaut (substitut (A1, milieu (A1, retrouver ("*", A1) -9,10), ""), A1) code> p>
Cette! La boucle sur le nombre de * dans la chaîne et cela fonctionne parfaitement. Merci!
1) Obtenez la position de 1er mut avec quelque chose d'instr (1, entièresext, "mut" [ ...]) p>
2) Découpez Mut Plus x caractères ou jusqu'à la prochaine "", "avec p>
3) faire à nouveau jusqu'à ce que pas de mut ne soit trouvé p>
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
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
Vous pouvez utiliser split () code> fonction comme ceci:
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 code> (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.