Supportnet / Forum / Tabellenkalkulation
ersetzen in allen Arbeitsblättern
Frage
Hi
ich brauche ein Möglichkeit einen Wert durch einen anderen zu ersetzen und das ganze in mehreren Arbeitsblättern innerhalb einer Datei!
Ich habe dafür auch schon ein VBA Code Lösung gefunden. Das Problem ist nur, dass bei dieser Lösung nur nach einem festen Wert gesucht wird! Ich würde es aber gerne so haben, dass man z.B. in A1 den Wert eingibt nach dem man suchen möchte und in A2 den Wert durch den der gesucht ersetzt wird!
Ich Excel 2003 ist diese Art des Ersetzen schon in der standard "ersetzen" Funktion gelöst! Ich suche aber eine Lösung für Excel 2000.
Ich hoffe mir kann einer helfen! Und bedanke mich schonmal bei allen fürs lesen und die Hilfe.
Achso hier noch mal der suchen und ersetzen Code den ich schon habe:
Sub ersetzen()
Dim WS As Worksheet
For Each WS In Worksheets
WS.Cells.Replace What:="hallo", _
Replacement:="test bestanden", LookAt:=xlPart, MatchCase:=False
Next
End Sub
So dann noch mal Danke
Mit freundlichen Grüßen
Thomas Reimann
Antwort 1 von schnallgonz
N´abend, dazu fällt mir folgendes ein:
Letzte Codezeile schreibt den Suchbegriff wieder rein, der durch das Makro auch durch den Ersetzenbegriff getauscht wurde.
"Tabelle3" ist in meinem Beispiel das Blatt, in dem die Eingaben erfolgen, mußt Du anpassen.
gruß
schnallgonz
Sub ersetzen()
Dim WS As Worksheet
Dim such As String, ersetz As String
such = Sheets("Tabelle3").Range("A1").Value
ersetz = Sheets("Tabelle3").Range("A2").Value
For Each WS In Worksheets
WS.Cells.Replace What:=such, _
Replacement:=ersetz, LookAt:=xlPart, MatchCase:=False
Next
Sheets("Tabelle3").Range("A1").Value = such
End SubLetzte Codezeile schreibt den Suchbegriff wieder rein, der durch das Makro auch durch den Ersetzenbegriff getauscht wurde.
"Tabelle3" ist in meinem Beispiel das Blatt, in dem die Eingaben erfolgen, mußt Du anpassen.
gruß
schnallgonz
Antwort 2 von Handybike
Hi,
danke für die Antwort. Das funzktioniert super. Ich habe es gleich übernommen und es och leicht abgewandelt.
Allerdings fiel mir bei der benutzung auf, dass es schöner wäre wenn man angezeigt bekommt was er ersetzen will um es bevor er es ersetzt. Eventuell kann man auch noch abbrechen und weiter suchen!
Ich habe dafür auch schon ein bisschen mit der find und findnext methode rumprobiert aber so richtig klappt das alles nicht. Die Methode replace ersetzt ja auch immer gleich alle Werte innerhalb eines sheets. Habe nämlich schon versucht mit Msgbox eine Nachricht einzubinden, die es ermöglicht per Abbrechen oder Weiter auf die replace methode bzw. die for Schleife einzuwirken. Aber das ergebnis war nicht das gewollte.
Hat jemand eine Idee wie man sowas realisieren könnte?
Dann nochmals Danke für Eure Hilfe
MfG
Handybike
danke für die Antwort. Das funzktioniert super. Ich habe es gleich übernommen und es och leicht abgewandelt.
Allerdings fiel mir bei der benutzung auf, dass es schöner wäre wenn man angezeigt bekommt was er ersetzen will um es bevor er es ersetzt. Eventuell kann man auch noch abbrechen und weiter suchen!
Ich habe dafür auch schon ein bisschen mit der find und findnext methode rumprobiert aber so richtig klappt das alles nicht. Die Methode replace ersetzt ja auch immer gleich alle Werte innerhalb eines sheets. Habe nämlich schon versucht mit Msgbox eine Nachricht einzubinden, die es ermöglicht per Abbrechen oder Weiter auf die replace methode bzw. die for Schleife einzuwirken. Aber das ergebnis war nicht das gewollte.
Hat jemand eine Idee wie man sowas realisieren könnte?
Dann nochmals Danke für Eure Hilfe
MfG
Handybike
Antwort 3 von coros
HAllo Handybike,
ich hätte da folgende Lösung anzubieten. Kopiere das Makro in ein StandardModul und starte es über z.B. eine Befehlsschaltfläche.
In dem Makro wird der Wert aus Tabellenblatt "Tabelle3" aus Zelle A1 gesucht. Wird er gefunden, erscheint eine Abfrage, ob der gefundene Wert durch den Wert aus Tabellenblatt "Tabelle3" Zelle A2 ersetzt werden soll. Zusätzlich wird die Zelle markiert. Bei Ja, wird der Wert ersetzt, bei Nein, wird er nicht ersetzt und bei Abbruch wird das Makro sofort beendet. Durchsucht werden alle Tabellenblätter in der Arbeitsmappe.
Ich hoffe, Du meintest das so. Ansonsten noch mal melden.
MfG,
Oliver
Da hier der einzige Lohn für die Helfer eine Rückmeldung ist, wäre es nett, wenn Du ein
Feedback abgeben könntest, ob der Lösungsvorschlag Dein Problem gelöst hat.
ich hätte da folgende Lösung anzubieten. Kopiere das Makro in ein StandardModul und starte es über z.B. eine Befehlsschaltfläche.
Option Explicit
Sub Duplikate_finden_und_loeschen()
Dim WS As Worksheet
Dim Zeile As Integer, Bereich As Integer
Dim Spalte As Integer
Dim such As String, ersetz As String
such = Sheets("Tabelle3").Range("A1").Value
ersetz = Sheets("Tabelle3").Range("A2").Value
For Each WS In Worksheets
WS.Activate
For Spalte = 1 To WS.Cells.Find("*", [A1], , , xlByColumns, xlPrevious).Column
Bereich = WS.Cells(WS.Cells.Rows.Count, Spalte).End(xlUp).Row
For Zeile = Bereich To 3 Step -1
If WS.Cells(Zeile, Spalte) = such Then
WS.Cells(Zeile, Spalte).Select ´Gefundene Zeile wird markiert
Select Case MsgBox("Der Eintrag """ & WS.Cells(Zeile, Spalte).Value & """ befindet sich in Zelle " & WS.Cells(Zeile, Spalte).Address _
& Chr(13) & "Soll dieser Eintrag durch """ & ersetz & """ ersetzt werden?", vbYesNoCancel, "Sicherheitsabfrage...")
Case 6 ´Schaltfläche Ja
WS.Cells(Zeile, Spalte) = ersetz
Case 2 ´Schaltfläche Abbruch
Exit Sub
Case 7 ´Schaltfläche Nein
End Select
End If
Next
Next
Next
MsgBox "Es wurden keine weiteren Einträge gefunden!", , "Info..."
End SubIn dem Makro wird der Wert aus Tabellenblatt "Tabelle3" aus Zelle A1 gesucht. Wird er gefunden, erscheint eine Abfrage, ob der gefundene Wert durch den Wert aus Tabellenblatt "Tabelle3" Zelle A2 ersetzt werden soll. Zusätzlich wird die Zelle markiert. Bei Ja, wird der Wert ersetzt, bei Nein, wird er nicht ersetzt und bei Abbruch wird das Makro sofort beendet. Durchsucht werden alle Tabellenblätter in der Arbeitsmappe.
Ich hoffe, Du meintest das so. Ansonsten noch mal melden.
MfG,
Oliver
Da hier der einzige Lohn für die Helfer eine Rückmeldung ist, wäre es nett, wenn Du ein
Feedback abgeben könntest, ob der Lösungsvorschlag Dein Problem gelöst hat.
Antwort 4 von Handybike
Hallo Oliver,
zuerst möchte ich dir danken für diese Lösung. Sie funktioniert auch soweit ganz gut! Allerdings habe ich einen kleinen BUG gefunden. Immer wenn der gesuchte Wert in einem sheet/Tabelle nicht enthalten wird das Programm gestoppt an dieser Zeilt:
For Spalte = 1 To WS.Cells.Find("*", [A1], , , xlByColumns, xlPrevious).Column
Hast du oder auch ein anderer eine Idee woran das liegen kann? Wenn ja wäre würde ich mich über eine Lösung freuen.
Mit freundlichen Grüßen
Thomas Reimann
zuerst möchte ich dir danken für diese Lösung. Sie funktioniert auch soweit ganz gut! Allerdings habe ich einen kleinen BUG gefunden. Immer wenn der gesuchte Wert in einem sheet/Tabelle nicht enthalten wird das Programm gestoppt an dieser Zeilt:
For Spalte = 1 To WS.Cells.Find("*", [A1], , , xlByColumns, xlPrevious).Column
Hast du oder auch ein anderer eine Idee woran das liegen kann? Wenn ja wäre würde ich mich über eine Lösung freuen.
Mit freundlichen Grüßen
Thomas Reimann
Antwort 5 von schnallgonz
Hi,
an den Makroanfang:
Makroende wie folgt:
gruß
schnallgonz
an den Makroanfang:
On Error Goto NixFindMakroende wie folgt:
Next
MsgBox "Es wurden keine weiteren Einträge gefunden!", , "Info..."
Exit Sub
NixFind:
MsgBox "Es wurde kein Eintrag gefunden!", , "Info..."
End Subgruß
schnallgonz

