Supportnet Computer
Planet of Tech

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:

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 Sub


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

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

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.

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 Sub


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.

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

Antwort 5 von schnallgonz

Hi,
an den Makroanfang:

On Error Goto NixFind


Makroende wie folgt:

Next
MsgBox "Es wurden keine weiteren Einträge gefunden!", , "Info..."
Exit Sub

NixFind:
MsgBox "Es wurde kein Eintrag gefunden!", , "Info..."
End Sub


gruß
schnallgonz