Live-Forum - Die aktuellen Beiträge
Datum
Titel
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
1680to1684
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Replace Funktion

Replace Funktion
11.03.2019 12:45:55
Torsten
Hallo,
ich möchte per VBA einzelne Wörter in einem Text ersetzten, habe mir dafür die Replace-Funktion rausgepickt.
Ein Ausgangstext wird von Zelle A1 nach A2 kopiert und der Text in A1 bleibt im Original erhalten.
In A3 steht das Suchwort “Otto“ und in A4 ein weiteres Suchwort “Max“.
Der Text in A2 soll nach und nach durchlaufen und das Suchwort “Otto“ durch ein # ersetzt werden, allerding nacheinander und nicht jedes “Otto“ auf einen Schlag.
Das Wort “Ottos“ soll dabei aber nicht ersetzt werden weil die Randbedingung mit dem zusätzlichen s am Ende nicht zutrifft.
Ich möchte folgendes Ergebnis haben: # Ottos #.
Leider bekomme ich folgendes Ergebnis: # #s #.
Ich steh ein bissel auf dem Schlauch. Wenn ich die Anfang meiner Replace-Funtion verändere, wird die erste # weggeschnitten.
Was muss ich verändern um mein gewünschtes Ergebnis zu bekommen?
Sub Ersetzten()
Dim strText As String 'Text, welcher durchsucht werden soll
Dim strSuchwort As String 'Wort, welches gesucht werden soll
Dim arrGefunden(0 To 6, 2) As String 'Array, um Suchergebnis zu speichern
Dim intLaufArr As Integer 'Laufvaraibel für Array
Dim intLaufSpalteSuchwort As Integer 'Laufvariable für For
Dim intStartpositionSuche As Integer 'Suchposition
'Text von Zelle A1 nach A2 kopieren
'Text in Zelle A1 bleibt im Original erhalten, Text in Zelle A2 wird verändert
With Sheets("Tabelle1")
.Cells(1, 1).Copy .Cells(1, 2)
End With
'Werte zuweisen
ThisWorkbook.Worksheets("Tabelle1").Activate
intLaufSpalteSuchwort = 3
strText = Cells(1, 2).Value
'Schleife zum Spaltenwechsel
For intLaufSpalteSuchwort = 3 To 4
strSuchwort = Cells(1, intLaufSpalteSuchwort).Value
intStartpositionSuche = 1
'Do Loop bis Suchwort nicht mehr im Text zu finden ist
Do Until InStr(intStartpositionSuche, strText, strSuchwort) = 0
'If Schleife zum Suchen und Erstezten
If InStr(intStartpositionSuche, strText, strSuchwort) > 0 Then
'Randbedingung, gucken ob ein bestimmter Wert nach dem Suchwort vorhanden ist.
If Mid(strText, (InStr(intStartpositionSuche, strText, strSuchwort)) + (Len(strSuchwort)) _
, 1) = " " _
Or Mid(strText, (InStr(intStartpositionSuche, strText, strSuchwort)) + (Len(strSuchwort)) _
, 1) = "," _
Or Mid(strText, (InStr(intStartpositionSuche, strText, strSuchwort)) + (Len(strSuchwort)) _
, 1) = "." _
Or Mid(strText, (InStr(intStartpositionSuche, strText, strSuchwort)) + (Len(strSuchwort)) _
, 1) = "!" _
Or Mid(strText, (InStr(intStartpositionSuche, strText, strSuchwort)) + (Len(strSuchwort)) _
, 1) = "?" Then
'Wenn ja, dann Speichen im Array:
'Suchwort
arrGefunden(intLaufArr, 0) = strSuchwort
'Anfangsposition des Suchwortes
arrGefunden(intLaufArr, 1) = InStr(intStartpositionSuche, strText, strSuchwort)
'Länge des Suchwortes
arrGefunden(intLaufArr, 2) = Len(strSuchwort)
'Laufvariable für Array hochzählen
intLaufArr = intLaufArr + 1
'Zelle A2 Suchwort ersetzten
Cells(1, 2).Value = Replace(strText, strSuchwort, "#", , 1)
'Suchtext aktualisieren für nächste Suche
strText = Cells(1, 2).Value
'Startposition aktualisieren
intStartpositionSuche = 1
'Wenn kein Suchwort mit Randbedingungen gefunden, dann Startposition hochzählen
Else: intStartpositionSuche = InStr(intStartpositionSuche, strText, strSuchwort) + 1
End If
End If
Loop
Next intLaufSpalteSuchwort
End Sub

8
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Replace Funktion
11.03.2019 12:50:29
Torsten
Ich hab noch vergessen das der Text wie folgt lautet:
Otto Ottos Otto.
Otto_ (_=Leerstelle) als zu ersetzen! (owT)
11.03.2019 13:24:30
EtoPHG

AW: Otto_ (_=Leerstelle) als zu ersetzen! (owT)
11.03.2019 13:52:15
Torsten
Ich verstehe die Antwort leider nicht, warum Otto_ (_=Leerstelle) als zu ersetzen?
Der Text heißt Otto Ottos Otto. Der Ausgangstext soll ja im eigentlichen Sinn nicht verändert werden.
ok falsche Annahme, sorry (owT)
11.03.2019 15:15:23
EtoPHG

AW: Otto_ (_=Leerstelle) als zu ersetzen! (owT)
11.03.2019 15:27:34
Daniel
Naja, wenn du immer nur ganze Wörter ersetzen willst und nicht nur Teiltexte, dann musst du die Leerzeichen vor und nach dem Wort mit hinzunehmen, sowohl beim gesuchten Text, genauso wie beim Ersatztext.
damit erreichst du, dass nur ganze Wörter ausgetauscht werden, aber Teile eines Wortes erhalten bleiben.
dh in "_Otto_Ottos_Otto_" musst du eben "_Otto_" durch "_#_" ersetzen, wenn das Ergebnis "_#_Ottos_#_" sein soll.
die Leerzeichen am Anfang und Ende des gesamttextes solltest du halt immer noch hinzufügen , falls die fehlen.
Damit erreichst du, dass keinen Unterschied macht, ob das Wort "Otto" am Anfang, in der Mitte oder am Ende steht (diese Sonderfälle zu berücksichtigen wäre wesentlich aufwenidiger, als für die Bearbeitung als Zwischenschritt die Leerzeichen anzufügen und ggf am schluss wieder zu entfernen)
Gruß Daniel
Anzeige
AW: Otto_ (_=Leerstelle) als zu ersetzen! (owT)
11.03.2019 16:35:02
Torsten
Ich verstehe.
Danke für den Tip.
Aber dann wird der Punkt am Ende zum Problem.
AW: Otto_ (_=Leerstelle) als zu ersetzen! (owT)
11.03.2019 17:37:35
Daniel
Hi
dann musst nur nicht nur vor dem Ersetzten des Wortes die Leerzeichen am Anfang und Ende des Langtextes hinzufügen, sondern auch jedes Satzzeichen durch Leer+Satzzeichen ersetzen (und hinterher wieder rückgängig machen).
wenn du nur ganze Wörter austauschen willst, dann muss man ja irgendwie erkennen, wo die Grenzen des Wortes sind und dazu nutzt man ja in der Regel das Leerzeichen um Wörter voneinander abzugrenzen.
jetzt muss man nur dafür sorgen, dass es von dieser Regel keine Ausnahmen mehr gibt, direkt vor und nach jedem Wort ein Leerzeichen steht. (ansonsten musst du das Suchen und Ersetzen selber programmieren und dabei dann alle Ausnahmen beachten)
Gruß Daniel
Anzeige
AW: Otto_ (_=Leerstelle) als zu ersetzen! (owT)
12.03.2019 20:27:46
Torsten
Danke, habs hinbekommen. Der Tip mit dem Leerzeichen hats gebracht.

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige