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?

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

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:    _

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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.