Jak mogę znaleźć i zastąpić wiele wartości w wybranych komórkach?

1

Chcę uruchomić wyszukiwanie i zastąpienie wielu wartości w zakresie w programie Excel wartościami z 2 kolumn: A z oryginalnym łańcuchem; B z ciągiem zastępczym. Znalazłem już makro, które działa trochę (dzięki nixda), ale nie może obsłużyć myślników między niektórymi dłuższymi wartościami w oryginalnym łańcuchu.

Idealnie chciałbym móc uruchomić go tylko w wybranym zakresie. Dodatkowym bonusem byłaby możliwość wyboru zakresu wyszukiwania.

Poniżej znajdują się przykładowe wartości kolumn wartości oryginalnej i zastępczej:

Kolumna wartości oryginalnych:

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

Kolumna Wartości zastępcze:

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

Aktualizacja w odpowiedzi na odpowiedź Gary'ego Studenta

Wartości w zakładce „dane”, kolumna 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

Wartości w znaczniku „tabela”, kolumna A będą takie same jak powyżej

Wartości w znaczniku „tabela”, kolumna B (wartości zastępcze):

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

Po uruchomieniu makra otrzymuję następujące wyniki, zamiast tego, czego oczekuję:

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

Jakieś pomysły?


Edytować

Po bieganiu to makro aby zastąpić wartości, mam problemy z następującymi wartościami:

Lewa kolumna poniżej = Wyszukiwane kolumny A i B mają te same wartości (nie powinny się zmieniać, z wyjątkiem tego, że R 3 powinno stać się R3).

Prawa kolumna poniżej = Wynik po uruchomieniu makra.

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
źródło
Więc zmień trzy znaki {& lt; space & gt; -.} wszystko do przecinków ??
Gary's Student
Cóż, nie do końca. Na przykład oryginalnym wartościom może brakować litery R (patrz ostatni wiersz przykładu powyżej) i są korygowane (w tym litera R) w wartościach zastępczych.
Daniel
Wartość zastępcza może być zupełnie inna niż oryginalna wartość. Za każdym razem, gdy oryginalna wartość znajduje się w arkuszu kalkulacyjnym, powinna zostać zastąpiona odpowiednią wartością zastępczą z zakładki „obserwacja”.
Daniel
@ Daniel Proszę przetestuj mój poprawiony kod . Popełniłem mały błąd w xlPart i xlWhole
nixda
@nixda Przetestowałem to i nie zastąpiłem? czy robię coś źle? Moje karty mają nazwy „dane” i „wyszukiwanie”.
Daniel

Odpowiedzi:

1

Oto małe przykładowe makro. Tabela tłumaczeń znajduje się w zakładce o nazwie „tabl”, a dane do edycji znajdują się w zakładce „dane”:

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
źródło
Dzięki za makro! Robi to, co robiłam wcześniej - niektóre wartości zostały zastąpione ok, niektóre - nie. Jak mogę tutaj dołączyć przykładowy arkusz kalkulacyjny, aby pokazać, co mam na myśli?
Daniel
Nie jest możliwe na tym forum
Gary's Student
Czy mogę wysłać przykładowy arkusz kalkulacyjny pocztą e-mail?
Daniel
@Daniel Po prostu prześlij go na ge.tt i edytować link do twojego pytania. Wspomniałeś o mnie, czy możesz połączyć mnie z oryginalnym pytaniem? Może uda mi się naprawić ten kod
nixda
@nixda Widziałem tutaj twoje rozwiązanie podobnego problemu: superuser.com/questions/620484/…
Daniel
0

Jeśli zainstalujesz Dodatek RegEx Find / Replace , możesz użyć następujących wyrażeń regularnych, aby to osiągnąć, i przetestowałem to. To działa.

Find:           \s*[-.]\s*
Replacement:    ,
Find:           \s+(?!$)
Replacement:    _
supercheetah
źródło
Właśnie zauważyłem, że masz kreskę na końcu jednej z linii, a to kończy się na równi z innymi. Możesz uruchomić jeszcze jeden RegEx znajdź / zamień. Odnaleźć ,$ i zastąp z niczym. Pozwoli to pozbyć się takich wiszących przecinków.
supercheetah
Wielkie dzięki, wygląda obiecująco! Spróbuję jak najszybciej. Makro dostarczone przez nixda działa doskonale, właśnie znalazłem jeden typ wpisów, których nie można poprawnie zastąpić. Jeśli mam „Q”? w zakresie wyszukiwania wszystkie wartości „Q1” do „Q9” zostają zastąpione przez „Q?”. Q11, Q12 itp. Nie mają tego problemu. To samo z „R?”. Hope RegEx będzie w stanie się tym zająć.
Daniel