0
votes

VBA pour remplacer la même lettre avec des valeurs différentes

J'essaie d'écrire un code VBA qui recherchera une lettre dans une chaîne et la remplacera par une valeur de cellule spécifique.

problème est que la lettre peut apparaître dans la chaîne un maximum de 3 fois et chaque fois que la la lettre doit être remplacée par une valeur différente.

Exemple string J'ai x et x et x

Le premier x doit être remplacé par 1, seconde avec 2 et troisième avec 3.

mon code jusqu'à présent xxx

Le problème avec le code ci-dessus est que cela remplacera chaque x avec la même valeur; Je voudrais le faire avec un ordre de remplacement spécifique.

Idéalement, le deuxième et troisième remplacement proviendrait d'une valeur cellulaire différente de mon choix.


3 commentaires

Quelle (s) forme (s) "x" prend-elle la réalité?


x sera remplacé par des valeurs numériques.


Pouvez-vous poster des instantanés de quelques exemples sur la feuille de calcul elle-même?


3 Réponses :


2
votes

Essayez la fonction Split:

Sub XTest()
Dim s As String
s = "I have x and x and x"
Dim parts As Variant
parts = Split(s, "x")
Dim i As Long
For i = 0 To UBound(parts) - 1
    parts(i) = parts(i) & i + 1
Next i
s = Join(parts, "")
Debug.Print s
End Sub


0 commentaires

1
votes

Mettez vos remplacements dans l'ordre dans une matrice, puis pour chaque cellule remplacez le 1st "x" avec la valeur de la 1ère graphique, le 2e avec la 2e valeur de la matrice, etc.

Dim newString As String, i As Long, j As Long, replacements As Variant

For i = 0 To lim

    replacements = Array(1, 2, "some other value or cell", "4th replacement")

    newString = Range("B" & i + 13).value

    For j = 0 To UBound(replacements)
        If InStr(newString, "x") = 0 Then Exit For
        newString = Replace$(newString, "x", replacements(j), 1, 1)
    Next

    Range("B" & i + 13).value = newString

Next


0 commentaires

3
votes

Vous pouvez utiliser remplacer () Fonction: xxx

afin que vous puissiez le envelopper dans une fonction : xxx

à utiliser comme: xxx


2 commentaires

Belle solution hth.


Votre approche d'utilisation d'une boucle DO est simple, propre et élégante.