Comment puis-je trouver et remplacer plusieurs valeurs dans les cellules sélectionnées?

1

Je veux lancer une recherche et remplacer sur plusieurs valeurs dans une plage dans Excel avec les valeurs de 2 colonnes: A avec la chaîne d'origine; B avec la chaîne de remplacement. J'ai déjà trouvé une macro qui fonctionne un peu (merci nixda), mais je ne peux pas gérer les tirets entre certaines des valeurs les plus longues de la chaîne d'origine.

Idéalement, j'aimerais pouvoir l'utiliser uniquement sur la plage que j'ai sélectionnée. Un bonus supplémentaire serait si je pouvais également sélectionner la plage de recherche.

Vous trouverez ci-dessous des exemples de valeurs des colonnes de valeurs d'origine et de remplacement:

Colonne des valeurs d'origine:

T1-D7-F2-F3-    
T1-D7-F2-F3-C33    
U4 U5 Q2 Q4    
U3-Q7.U1    
R42-43-22-23-

Colonne Valeurs de remplacement:

T1,D7,F2,F3    
T1,D7,F2,F3,C33    
U4,U5,Q2,Q4    
U3,Q7,U1    
R42,R43,R22,R23

Mise à jour en réponse à la réponse de Gary's Student

Valeurs dans l'onglet "Données", colonne A:

1000PF CAP
4 SCREWS
D21 D22 - 709
D4-U3-RV3-Q2-U3
D7 - 00004224
D7 - 0004224
D7 - 004224
D7-F2-C33-F3-U6
D7-F3-J1
END PLATE
END PLATES
F2 F3 - 219
F2-F3-T1
Q11-Q3-J2-J9-
Q2 Q10 U12
Q2 Q3 Q10 Q11
Q2 Q3 Q11 Q10
Q2- Q4- U4- U5
Q2-Q5-Q8-Q10
Q3-Q11.R95
Q5-C10-C35
Q5-C19

Valeurs dans la balise "table", la colonne A sera identique à celle ci-dessus

Valeurs dans la balise "table", colonne B (valeurs de remplacement):

1000PF_CAP
4SCREWS
D21,D22,000709
D4,U3,RV3,Q2,U3
D7,004224
D7,004224
D7,004224
D7,F2,C33,F3,U6
D7,F3,J1
END_PLATE(S)
END_PLATE(S)
F2,F3,000219
F2,F3,T1
Q11,Q3,J2,J9
Q2,Q10,U12
Q2,Q3,Q10,Q11
Q2,Q3,Q11,Q10
Q2,Q4,U4,U5
Q2-Q5-Q8-Q10
Q3,Q11,R95
Q5,C10,C35
Q5,C19

Après avoir exécuté la macro, j'obtiens les résultats suivants au lieu de ce que j'attendais:

1000PF_CAP CAP
4SCREW(S)S
D21,D22 - 709
D4,U3,RV3-Q2-U3
D700004224
D70004224
D7004224
D7,F2-C33-F3-U6
D7,F3-J1
END_PLATE(S)
END_PLATE(S)S
F2,F3 - 219
F2,F3-T1
Q11-Q3-J2,J9-
Q2,Q10 U12
Q2 Q3 Q10,Q11
Q2,Q3,Q11 Q10
Q2,Q4- U4,U5
Q2-Q5Q8-Q10
Q3,Q11.R95
Q5C10,C35
Q5C19

Des idées?


modifier

Après avoir couru cette macro pour remplacer les valeurs, j'ai des problèmes avec les valeurs suivantes:

Colonne de gauche ci-dessous = Les colonnes de recherche A et B ont les mêmes valeurs (ne devraient pas changer, sauf que R 3 deviendrait R3).

Colonne droite ci-dessous = Résultat après l'exécution de la macro.

Q?  Q?
Q1  Q?
Q2  Q?
Q3  Q?
Q4  Q?
Q5  Q?
Q6  Q?
Q7  Q?
Q8  Q?
Q9  Q?
QR? QR?
R 3 R?
R?  R?
R0  R?
R1  R?
R2  R?
R3  R?
R4  R?
R5  R?
R6  R?
R7  R?
R8  R?
R9  R?
RE  R?
RV  R?
Daniel
la source
Donc, vous devez changer les trois caractères {& lt; space & gt; -.} tout en virgules ??
Gary's Student
Eh bien, pas exactement. Par exemple, il se peut que la lettre R manque aux valeurs d'origine (voir la dernière ligne de l'exemple ci-dessus) et qu'elles sont corrigées (lettre R incluse) dans les valeurs de remplacement.
Daniel
La valeur de remplacement peut être complètement différente de la valeur d'origine. Chaque fois que la valeur d'origine est trouvée dans la feuille de calcul, elle doit être remplacée par la valeur de remplacement correspondante de l'onglet "Surveillance".
Daniel
@ Daniel S'il vous plaît tester mon code fixe . J'ai fait une petite erreur avec xlPart et xlWhole
nixda
@ Nixda je l'ai testé et il n'a pas de remplacement? Est-ce que je fais quelque chose de mal? Mes onglets sont nommés "données" et "recherche".
Daniel

Réponses:

1

Voici un petit exemple de macro. La table de traduction se trouve dans un onglet appelé "tabl" et les données à modifier se trouvent dans un onglet appelé "données":

Sub ChangeValues()
    Dim N As Long, L As Long
    Dim rLook As Range
    Sheets("tabl").Select
    N = Cells(Rows.Count, "A").End(xlUp).Row
    aryA = Range("A1:A" & N)
    aryB = Range("B1:B" & N)
    Sheets("data").Select
    Set rLook = Application.InputBox(Prompt:="Select replacement range", Type:=8)
    For L = 1 To N
        rLook.Replace aryA(L, 1), aryB(L, 1)
    Next L
End Sub
Gary's Student
la source
Merci pour la macro! Il fait ce que la macro que j'avais auparavant faisait - certaines valeurs ont été remplacées ok, d'autres - pas. Comment puis-je joindre un exemple de feuille de calcul ici pour montrer ce que je veux dire?
Daniel
Pas possible dans ce forum
Gary's Student
Puis-je envoyer un exemple de feuille de calcul par courrier électronique?
Daniel
@Daniel Il suffit de le télécharger sur ge.tt et modifier le lien dans votre question. Vous avez parlé de moi, pouvez-vous me lier à la question initiale? Peut-être que je peux réparer ce code
nixda
@nixda j'ai vu votre solution pour un problème similaire ici: superuser.com/questions/620484/…
Daniel
0

Si vous installez le Addon RegEx Rechercher / Remplacer , vous pouvez utiliser les expressions régulières suivantes pour accomplir cela, et je l’ai testé. Ça marche.

Find:           \s*[-.]\s*
Replacement:    ,
Find:           \s+(?!$)
Replacement:    _
supercheetah
la source
Je viens de remarquer que vous avez un tiret à la fin de l’une des lignes et que cela finit par être remplacé indifféremment. Vous voudrez peut-être exécuter une autre recherche RegEx / remplacement. Trouver ,$ et remplacer avec rien. Cela éliminera toutes les virgules pendantes.
supercheetah
Merci beaucoup, c'est prometteur! Faisons un essai dès que possible. La macro fournie par nixda fonctionne parfaitement. Je viens de trouver un type d’entrées qui ne peuvent pas être remplacées correctement. Si j'ai "Q?" dans la plage de recherche, toutes les valeurs "Q1" à "Q9" sont remplacées par "Q?". Q11, Q12, etc. n’ont pas ce problème. Même avec "R?" Hope RegEx pourra s'en occuper.
Daniel