Registriert seit: 09.05.2015
Version(en): 2013, Office 365
Hallo zusammen, habe wieder eine für mich knifflige Aufgabe und hoffe auf Eure Hilfe. In einer Tabelle in Spalte "C" beginnend ab Zeile 4 bis Zeile 250 stehen unterschiedliche Abkürzungen die ich gerne VBA-technisch aktualisieren/austauschen möchte. In der Spalte sind auch mehrere Leerzellen verteilt in die natürlich nichts geschrieben werden soll. Als Ansatz und Beispiel habe ich folgenden Code gefunden: Code: Sub mehrfachSuchenUndErsetzen() 'sucht im aktiven Tabellenblatt jeweils die Eintraege aus 'suchArray und ersetzt mit ersetzArray
Dim suchArray() Dim ersetzArray() Dim k As Long suchArray = Array("az", "bu", "cf") ersetzArray = Array("b", "z", "r") For k = LBound(suchArray) To UBound(suchArray) Call ActiveSheet.UsedRange.Replace(suchArray(k), ersetzArray(k), , , False) Next k End Sub
Wie müsste der Code angepasst werden damit nur in Spalte "C" die Werte ausgetauscht werden? Vielen Dank für Eure Hilfe!
Registriert seit: 12.10.2014
Version(en): 365 Insider (32 Bit)
Moin Erich! Da wärst Du doch selbst drauf gekommen? Call ActiveSheet.UsedRange.Replace(
Grenze den benutzten Bereich mit Spalte C ein: Call ActiveSheet.UsedRange.Columns("C").Replace(
Gruß Ralf
Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. Lehre einen Mann zu fischen und du ernährst ihn für sein Leben. (Konfuzius)
Folgende(r) 1 Nutzer sagt Danke an RPP63 für diesen Beitrag:1 Nutzer sagt Danke an RPP63 für diesen Beitrag 28
• sharky51
Registriert seit: 09.05.2015
Version(en): 2013, Office 365
(14.12.2015, 15:38)RPP63 schrieb: Moin Erich! Da wärst Du doch selbst drauf gekommen? Call ActiveSheet.UsedRange.Replace(
Grenze den benutzten Bereich mit Spalte C ein: Call ActiveSheet.UsedRange.Columns("C").Replace(
Gruß Ralf Moin Ralf, Du hast recht ...ich habe wieder zu kompliziert gedacht. Ich danke Dir vielmals!
Registriert seit: 09.05.2015
Version(en): 2013, Office 365
Hi, habe das nun wie folgt angepasst. Leider bekomme ich einen komischen Effekt. Code: Sub mehrfachSuchenUndErsetzen() 'sucht im aktiven Tabellenblatt jeweils die Eintraege aus 'suchArray und ersetzt mit ersetzArray '09-2006 'E.Bimczok http://profi-excel.de Dim suchArray() Dim ersetzArray() Dim k As Long endRow = ActiveSheet.Cells(Rows.Count, 3).End(xlUp).Row suchArray = Array("A", "AG", "B", "E", "F", "G", "HK", "HV", "K", "M", "P", "R", "Rep", "S", "SL", "SP", "SW", "Z") ersetzArray = Array("A", "G", "B", "E", "F", "T", "H", "V", "K", "M", "P", "D", "R", "O", "L", "S", "W", "Z") For k = LBound(suchArray) To UBound(suchArray) Call ActiveSheet.Range(Cells(4, 3), Cells(endRow, 3)).Replace(suchArray(k), ersetzArray(k), , , False) Next k End Sub
Das Teil funktioniert soweit, aber leider nicht bei allen Ersetzungen. Bei "SL" erwarte ich eigentlich "L" bekomme aber "OL" und bei "SW" erwarte ich "W" und nicht "OW" ! Komisch, was könnte die Ursache sein?
Registriert seit: 12.10.2014
Version(en): 365 Insider (32 Bit)
Hi! Beim Range.Replace fehlt der Parameter LookAt:=xlWhole. Aus der VBA-Hilfe (siehe rot markiertes): Zitat:Syntax Ausdruck.Replace(What, Replacement, LookAt, SearchOrder, MatchCase, MatchByte, SearchFormat, ReplaceFormat) ... Anmerkungen Die Angaben für LookAt, SearchOrder, MatchCase und MatchByte werden jedesmal gespeichert, wenn Sie diese Methode verwenden. Falls Sie beim nächsten Aufruf dieser Methode keine Werte für die Argumente angeben, werden die gespeicherten Werte verwendet. Die Angaben dieser Argumente ändern die Angaben im Dialogfeld Suchen, und eine Änderung der Angaben im Dialogfeld Suchen ändert die gespeicherten Werte, die verwendet werden, falls diese Argumente angegeben werden. Um Probleme zu vermeiden, sollten Sie die Argumente bei jeder Verwendung dieser Methode ausdrücklich angeben. bedeutet als Code: Code: ActiveSheet.Range(Cells(4, 3), Cells(endRow, 3)).Replace(suchArray(k), ersetzArray(k), xlWhole, , False)
Gruß Ralf
Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. Lehre einen Mann zu fischen und du ernährst ihn für sein Leben. (Konfuzius)
Folgende(r) 1 Nutzer sagt Danke an RPP63 für diesen Beitrag:1 Nutzer sagt Danke an RPP63 für diesen Beitrag 28
• sharky51
Registriert seit: 17.04.2014
Version(en): MS Office 365(32)
(14.12.2015, 16:42)RPP63 schrieb: Beim Range.Replace fehlt der Parameter LookAt:=xlWhole. Hi, aber selbst dann wird bei dieser Reihenfolge aus AG T . Gruß Uwe
Registriert seit: 09.05.2015
Version(en): 2013, Office 365
(14.12.2015, 16:42)RPP63 schrieb: Hi! Beim Range.Replace fehlt der Parameter LookAt:=xlWhole. Aus der VBA-Hilfe (siehe rot markiertes):
bedeutet als Code:
Code: ActiveSheet.Range(Cells(4, 3), Cells(endRow, 3)).Replace(suchArray(k), ersetzArray(k), xlWhole, , False)
Gruß Ralf Einfach Wahnsinn was DU / Ihr drauf habt. Danke es funktioniert und Du hast einem alten Mann geholfen!
Registriert seit: 12.10.2014
Version(en): 365 Insider (32 Bit)
14.12.2015, 16:57
(Dieser Beitrag wurde zuletzt bearbeitet: 14.12.2015, 16:57 von RPP63.)
@Uwe! :19: Zitat:aber selbst dann wird bei dieser Reihenfolge aus AG T . wohl wahr … AG -> G -> T @Erich: Vielleicht solltest Du die Arrays nochmal überdenken. Gruß Ralf
Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. Lehre einen Mann zu fischen und du ernährst ihn für sein Leben. (Konfuzius)
Folgende(r) 1 Nutzer sagt Danke an RPP63 für diesen Beitrag:1 Nutzer sagt Danke an RPP63 für diesen Beitrag 28
• sharky51
Registriert seit: 09.05.2015
Version(en): 2013, Office 365
14.12.2015, 17:08
(Dieser Beitrag wurde zuletzt bearbeitet: 14.12.2015, 17:08 von sharky51.)
(14.12.2015, 16:57)RPP63 schrieb: @Uwe! :19: wohl wahr … AG -> G -> T
@Erich: Vielleicht solltest Du die Arrays nochmal überdenken.
Gruß Ralf Hmm, was meinst Du mit überdenken? Gibt es noch eine andere einfache Möglichkeit ans Ziel zu kommen? Muss jetzt leider einige Stunden abschalten....die Familie ruft! Hoffentlich bis bald!
Registriert seit: 12.10.2014
Version(en): 365 Insider (32 Bit)
14.12.2015, 17:15
(Dieser Beitrag wurde zuletzt bearbeitet: 14.12.2015, 17:15 von RPP63.)
Für später: :21: Zunächst mal hast Du ja Dubletten drin Z -> Z bringt nicht viel. Die Arrays werden der Reihe nach abgearbeitet, so dass in Schritt 2 AG zu G wird, in Schritt 6 wird aus G T, also wird aus AG unbeabsichtigt T Mal ohne Dubletten und in logischer Reihenfolge: ("" und Kommata musst Du ergänzen) | A | B | C | D | E | F | G | H | I | J | K | 1 | Suche | G | AG | HK | HV | R | Rep | S | SL | SP | SW | 2 | Ersatz | T | G | H | V | D | R | O | L | S | W | Excel Tabellen im Web darstellen >> Excel Jeanie HTML 4.8 Gruß Ralf
Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. Lehre einen Mann zu fischen und du ernährst ihn für sein Leben. (Konfuzius)
|