Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Suchen und Ersetzen mit VBA

Suchen und Ersetzen mit VBA
09.07.2020 11:48:42
Marc
Hallo liebe Excel und VBA-Freunde,
ich bin ein DAU in VBA, aber da ich nach einer besseren Funktion als die "suchen und ersetzen" Funktion von Excel gesucht habe.
Denn dann wird die Formatierung einzelner Wörter nicht übernommen und anstelle, dass ich nur 1 Wort ändern muss, müsste ich dann 4.
Ich habe nämliche ca. 200 Zellen in den ich mehr als 255 Zeichen habe und viele Wörter innerhalb der Zellen sind redundant.
Nun habe ich dieses Script gefunden:
Sub CharactersReplace(Rng As Range, FindText As String, ReplaceText As String, Optional  _
MatchCase As Boolean = False)
'UpdatebyExtendoffice20160711
Dim I As Long
Dim xLenFind As Long
Dim xLenRep As Long
Dim K As Long
Dim xValue As String
Dim M As Long
Dim xCell As Range
xLenFind = Len(FindText)
xLenRep = Len(ReplaceText)
If Not MatchCase Then M = 1
For Each xCell In Rng
If VarType(xCell) = vbString Then
xValue = xCell.Value
K = 0
For I = 1 To Len(xValue)
If StrComp(Mid$(xValue, I, xLenFind), FindText, M) = 0 Then
xCell.Characters(I + K, xLenFind).Insert ReplaceText
K = K + xLenRep - xLenFind
End If
Next
End If
Next
End Sub

Sub Test_CharactersReplace()
Dim xRg As Range
Dim xTxt As String
Dim xCell As Range
On Error Resume Next
If ActiveWindow.RangeSelection.Count > 1 Then
xTxt = ActiveWindow.RangeSelection.AddressLocal
Else
xTxt = ActiveSheet.UsedRange.AddressLocal
End If
Set xRg = Application.InputBox("Select a range:", "Kutools for Excel", xTxt, , , , , 8)
If xRg Is Nothing Then Exit Sub
Call CharactersReplace(xRg, "Ersetze das Wort", "Gegen das Wort", True)
End Sub

Das Skript funktioniert...… aber leider nur mit Zellen weniger als 255 Zeichen...… Jetzt habe ich allerhand gelesen wegen eines Umweges mit Arrys und so weiter.
Aber als DAU kann ich leider das nicht integrieren, geschweige, dass ich coden könnte.
Könnt ihr mich dahingehend unterstützen?
Vielen Dank und Beste Grüße
Marc St.
Anzeige

15
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Suchen und Ersetzen mit VBA
10.07.2020 12:35:43
Matthias
Moin!
Wenn du dir Funktion hier so austauschst, sollte es klappen. Dein Matchcase habeich da nicht integriert. Ich lasse nur einen Textvergleich durchführen.
Sub CharactersReplace(Rng As Range, FindText As String, ReplaceText As String, Optional _
MatchCase As Boolean = False)
'UpdatebyExtendoffice20160711
Dim I As Long
Dim xLenFind As Long
Dim xLenRep As Long
Dim K As Long
Dim xValue As String
Dim M As Long
Dim xCell As Range
xLenFind = Len(FindText)
xLenRep = Len(ReplaceText)
If Not MatchCase Then M = 1
For Each xCell In Rng
If VarType(xCell) = vbString Then
xValue = xCell.Value
xCell = Replace(xValue, FindText, ReplaceText, , , vbTextCompare)
End If
Next
End Sub

Einfach mal an einer Beispielmappe testen.,
VG
Anzeige
AW: Suchen und Ersetzen mit VBA
10.07.2020 17:00:10
Marc
Moin Matthias,
danke für deine Hilfe, es ist jedoch so, dass durch die Replacefunktion die Formatierung gelöscht wird.
Ich habe in den Zellen mehrere Wörter, wobei manche Fett und andere kursive sind und das soll natürlich erhalten bleiben sonst ändere ich statt 1 Wort immer 5. :(
Beste Grüße
Anzeige
AW: Suchen und Ersetzen mit VBA
10.07.2020 22:49:14
Matthias
Moin!
Kannst du ggf. mal den Link bzw. die Seite zu dem Hinweis mit dem Array schicken!?
Wenn das geht, das ein einzubauen wäre wohl möglich. Mir fehlt aber grad die Idee dazu. Also mit einem Array den Text aufsplitten und dann ersetzen wäre nicht das Problem. Du brauchst ja aber das Format. Dann müsste man das Array wieder an die Character Funktion übergeben. Die nimmt aber nur 255 Zeichen. Was man jetzt machen könnte: Die String aufsplitten und dabei auch die Formate mit auslesen. Dann ersetzen und die Formate wieder eintragen. Das geht auch bei mehr als 250 Zeichen. Jetzt wäre noch die Fragen, was du da für Formate hast (Fett, kursiv, andere Schriftgröße usw.).
VG
Anzeige
AW: Suchen und Ersetzen mit VBA
11.07.2020 00:45:24
Marc
Also...
wie gesagt ich bin ein DAU und verstehe leider die Codes nicht, aber bspw. hier:
https://stackoverflow.com/questions/51997789/how-to-bypass-255-character-limit-of-vba-mass-replace-function.
Aber interessant fand ich den Ansatz hier:
https://stackoverflow.com/questions/40419678/find-and-replace-in-excel-2010-without-losing-cell-formatting-unable-to-run-on
Keine Ahnung was der untere User gemacht hat, aber der obere hat fast den gleichen code wie ich.
Also ich habe Fett und Kursive und Standard... Die Schriftart und Größe bleibt gleich.
Ich hoffe, ich konnte dich unterstützen :)?!
Viele Grüße
Anzeige
AW: Suchen und Ersetzen mit VBA
11.07.2020 12:13:01
Matthias
Moin!
Ja, das hilft (glaube ich :-) ). Die Idee ist so wie gestern zum Ende beschrieben.
Beim 1. Link wird aber das Format verloren gehen (so meine Einschätzung). Der zweite ist hilfreicher. Der obere hat da zwar ähnlichen Code wie du, er funktioniert aber auch nicht. :-)
Werde morgen mal was dazu basteln.
Noch als Frage: Es kommen in der Zelle nur die Formatierungen vor: Standard oder Fett oder Kursiv oder Kursiv mit Fett. Würde jetzt nur nach den 4 Sachen prüfen.
Ergebnis dann morgen.
VG
Anzeige
AW: Suchen und Ersetzen mit VBA
11.07.2020 12:22:10
Marc
Guten Morgen,
Alle 3 zusammen:
In EINER Zelle gibt es ein Text mit über 255 Zeichen mit den Formaten: Normal, Fett UND Kursiv!
So jetzt sollten wir es haben.
Sauber, danke dass du dich damit beschäftigst ein vllt. einen Mehrwert für unser ganzes Projekt schaffst :)!!
Aber kein Druck und wenn es nicht klappt, ist es auch okay.
Grüße!
Anzeige
AW: Suchen und Ersetzen mit VBA
12.07.2020 18:11:30
Matthias
Moin!
Hier mal mein Ergebnis. Habe aus beiden Code was genommen und den Code noch ein wenig nach meinen Vorstellungen abgeändert. Habe ihn auch mal an meinen Daten getestet. Kannst es aber mal an Testdaten bei dir probieren. Der Funktionsname ist gleich geblieben, so dass man nur die Funktion tauschen muss. Das mit der Match Option habe ich nicht mit drin - wußte nicht was ihr da dann wie haben wollt. Kann man aber noch einbauen. Wenn du Erklärungen zum Code brauchst, einfache melden.
Sub CharactersReplace(Rng As Range, FindText As String, ReplaceText As String, Optional _
MatchCase As Boolean = False)
'UpdatebyExtendoffice20160711
Dim daten As Variant, neutext As Variant
Dim xLenFind As Long, xLenRep As Long, xLenText As Long
Dim i As Long, j As Long, k As Long, stellen As Long, position As Long
Dim xCell As Range
Dim austext As String
Dim altzustand
altzustand = Application.ScreenUpdating
Application.ScreenUpdating = False
xLenFind = Len(FindText)
xLenRep = Len(ReplaceText)
For Each xCell In Rng
If VarType(xCell) = vbString Then
austext = xCell
xLenText = Len(austext)
'Daten auslesen
ReDim daten(1 To xLenText + 1, 1 To 2)   'Zeichenanzahl, Format
ReDim neutext(1 To xLenText)
For i = 1 To xLenText
neutext(i) = Mid(austext, i, 1)
daten(i, 1) = 1
j = 0
If xCell.Characters(Start:=i, Length:=1).Font.FontStyle = "Kursiv" Or xCell. _
Characters(Start:=i, Length:=1).Font.FontStyle = "Fett Kursiv" Then j = j + 1        'Kursiv
If xCell.Characters(Start:=i, Length:=1).Font.Bold = True Then j = j + 2             _
'Fett
daten(i, 2) = j
Next
'Daten ersetzen
position = InStr(1, austext, FindText, vbTextCompare)
If position = 0 Then GoTo weiter
While position > 0
neutext(position) = ReplaceText
daten(position, 1) = xLenRep
For j = position + 1 To position + xLenFind - 1
daten(j, 1) = ""
neutext(j) = ""
Next
position = InStr(position + xLenFind, austext, FindText, vbTextCompare)
Wend
'Daten zurückschreiben
xCell = Join(neutext, "")
k = daten(1, 2)
position = 1
For i = 1 To xLenText + 1
If k = daten(i, 2) Then
If daten(i, 1)  "" Then
stellen = stellen + daten(i, 1)
End If
Else
'formatieren
If k = 1 Or k = 3 Then
'kursiv machen
xCell.Characters(Start:=position, Length:=stellen).Font.FontStyle = "Kursiv" _
End If
If k = 2 Or k = 3 Then
'fett machen
xCell.Characters(Start:=position, Length:=stellen).Font.Bold = True
End If
k = daten(i, 2)
position = position + stellen
stellen = 1
End If
Next
End If
weiter:
Next
Application.ScreenUpdating = altzustand
End Sub

VG
Anzeige
AW: Suchen und Ersetzen mit VBA
13.07.2020 09:13:02
Marc
Moin Matthias,
erstmal super, dass du das machst!!
Ich habe den Code kopiert und eingesetzt und die Call Funktion dazugesetzt (Also bloß die obere Funktion ausgetauscht)?
Leider funktioniert der Code nicht so wie gewünscht oder ich mache etwas falsch.
Wenn ich etwas ein Wort ersetze wie z.B. "Auto" mit "Bushaltestelle", dann verschiebt der Code die "Fett-Markierung" um die zusätzliche Anzahl an Buchstaben Auto = 4, Bushaltestelle = 14 (also so um 10 Stellen). Der Code merkt sich also eher die Position als das Wort...
Beste Grüße
Anzeige
AW: Suchen und Ersetzen mit VBA
13.07.2020 20:57:32
Matthias
Moin!
Genau du musst nur die obere Funktion austauschen. Habe am Code noch ein paar Sachen geändert. Jetzt sollte er eigentlich laufen. Bitte nochmal testen.
Sub CharactersReplace(Rng As Range, FindText As String, ReplaceText As String, Optional _
MatchCase As Boolean = False)
'UpdatebyExtendoffice20160711
Dim daten As Variant, neutext As Variant
Dim xLenFind As Long, xLenRep As Long, xLenText As Long
Dim i As Long, j As Long, k As Long, stellen As Long, position As Long
Dim xCell As Range
Dim austext As String
Dim altzustand
altzustand = Application.ScreenUpdating
Application.ScreenUpdating = False
xLenFind = Len(FindText)
xLenRep = Len(ReplaceText)
For Each xCell In Rng
If VarType(xCell) = vbString Then
austext = xCell
xLenText = Len(austext)
'Daten auslesen
ReDim daten(1 To xLenText + 1, 1 To 2)   'Zeichenanzahl, Format
ReDim neutext(1 To xLenText)
For i = 1 To xLenText
neutext(i) = Mid(austext, i, 1)
daten(i, 1) = 1
j = 0
If xCell.Characters(Start:=i, Length:=1).Font.Italic = True Then j = j + 1        ' _
Kursiv
If xCell.Characters(Start:=i, Length:=1).Font.Bold = True Then j = j + 2             _
'Fett
daten(i, 2) = j
Next
'Daten ersetzen
position = InStr(1, austext, FindText, vbTextCompare)
If position = 0 Then GoTo weiter
While position > 0
neutext(position) = ReplaceText
daten(position, 1) = xLenRep
For j = position + 1 To position + xLenFind - 1
daten(j, 1) = ""
neutext(j) = ""
Next
position = InStr(position + xLenFind, austext, FindText, vbTextCompare)
Wend
'Daten zurückschreiben
xCell = Join(neutext, "")
xCell.Characters.Font.Bold = False
xCell.Characters.Font.Italic = False
k = daten(1, 2)
position = 1
For i = 1 To xLenText + 1
If k = daten(i, 2) Then
If daten(i, 1)  "" Then
stellen = stellen + daten(i, 1)
End If
Else
'formatieren
If k = 1 Or k = 3 Then
'kursiv machen
xCell.Characters(Start:=position, Length:=stellen).Font.Italic = True
End If
If k = 2 Or k = 3 Then
'fett machen
xCell.Characters(Start:=position, Length:=stellen).Font.Bold = True
End If
k = daten(i, 2)
position = position + stellen
stellen = daten(i, 1)
End If
Next
End If
weiter:
Next
Application.ScreenUpdating = altzustand
End Sub
VG
Anzeige
AW: Suchen und Ersetzen mit VBA
14.07.2020 09:06:48
Marc
Guten Morgen,
wir haben es fast!!
Also bei der Textersetzung in der ersten ZELLE passt es! :)
Jedoch; bei jeder weiteren Zelle ist die Formatierung, wieder um einige Zeichen weiter verschoben.... Die Verschiebung geschieht aber nur 1x nach dem Wechsel von der 1. zur 2. Zelle, sodass bspw. die "Fett-Formatierung" konstant bei Zelle 2-40 verschoben verbleibt.
Hat das etwas mit der Speicherbelegung zu tun? Müsste da etwas "resettet" werden? (Ich versuche ein wenig mit zu Brainstormen).
Darüber hinaus ist die Performance bei ca 40 Zellen á 400 Zeichen nahe des Absturzes... Aber wo gehobelt wird, da fallen auch Späne.
Vielen Dank und Beste Grüße
Anzeige
AW: Suchen und Ersetzen mit VBA
14.07.2020 12:17:56
peterk
Hallo
Bitte markierte Zeile einfügen:

k = daten(1, 2)
position = 1
stellen = 0    ' Bitte einfügen !!!
For i = 1 To xLenText + 1

AW: Suchen und Ersetzen mit VBA
14.07.2020 12:50:58
Marc
Super!
Ich glaube wir haben es geschafft!!
Ich habe es ein paar Beispiele ausprobiert und der Code funktioniert.
Performance ist so ein Thema, aber egal er schafft 40 Zeilen in knapp 40 Sekunden :D.
Danke an Matthias für die ganzen Mühen und danke an peterk für sein hilfreichen Input zu guter Letzt.
Wenn mir noch etwas auffällt melde ich mich zurück :)!
Bis dahin und eine schöne Woche!
Anzeige
AW: Suchen und Ersetzen mit VBA
14.07.2020 14:37:26
peterk
Hallo Marc
Anbei noch eine kleine Verbesserung bzgl. Performance (wenn nur wenige Formatierungen im Text dann cCharRange höher setzen)

Sub CharactersReplace(Rng As Range, FindText As String, ReplaceText As String, _
Optional MatchCase As Boolean = False)
'UpdatebyExtendoffice20160711
Const cCharRange = 10
Dim daten As Variant, neutext As Variant
Dim xLenFind As Long, xLenRep As Long, xLenText As Long
Dim i As Long, j As Long, k As Long, stellen As Long, position As Long
Dim xCell As Range
Dim austext As String
Dim altzustand
Dim foundItalic As Boolean
Dim foundBold As Boolean
altzustand = Application.ScreenUpdating
Application.ScreenUpdating = False
xLenFind = Len(FindText)
xLenRep = Len(ReplaceText)
Debug.Print Time, "Start"
For Each xCell In Rng
If VarType(xCell) = vbString Then
austext = xCell
xLenText = Len(austext)
'Daten auslesen
ReDim daten(1 To xLenText + 1, 1 To 2)   'Zeichenanzahl, Format
ReDim neutext(1 To xLenText)
For i = 1 To xLenText
neutext(i) = Mid(austext, i, 1)
daten(i, 1) = 1
j = 0
If (i Mod cCharRange = 1) Then
' liefert
' False (keine Formatierung)
' True(alles formatiert),
' Null (teilweise formatiert)
foundItalic = IsNull(xCell.Characters(Start:=i, Length:=cCharRange).Font. _
Italic)
If Not foundItalic Then
foundItalic = xCell.Characters(Start:=i, Length:=10).Font.Italic
End If
foundBold = IsNull(xCell.Characters(Start:=i, Length:=cCharRange).Font.Bold) _
If Not foundBold Then
foundBold = xCell.Characters(Start:=i, Length:=10).Font.Bold
End If
End If
If foundItalic Then
If xCell.Characters(Start:=i, Length:=1).Font.Italic = True Then j = j + 1 ' _
Kursiv
End If
If foundBold Then
If xCell.Characters(Start:=i, Length:=1).Font.Bold = True Then j = j + 2   ' _
Fett
End If
daten(i, 2) = j
Next
'Daten ersetzen
position = InStr(1, austext, FindText, vbTextCompare)
If position = 0 Then GoTo weiter
While position > 0
neutext(position) = ReplaceText
daten(position, 1) = xLenRep
For j = position + 1 To position + xLenFind - 1
daten(j, 1) = ""
neutext(j) = ""
Next
position = InStr(position + xLenFind, austext, FindText, vbTextCompare)
Wend
'Daten zurückschreiben
xCell = Join(neutext, "")
xCell.Characters.Font.Bold = False
xCell.Characters.Font.Italic = False
k = daten(1, 2)
position = 1
stellen = 0
For i = 1 To xLenText + 1
If k = daten(i, 2) Then
If daten(i, 1)  "" Then
stellen = stellen + daten(i, 1)
End If
Else
'formatieren
If k = 1 Or k = 3 Then
'kursiv machen
xCell.Characters(Start:=position, Length:=stellen).Font.Italic = True
End If
If k = 2 Or k = 3 Then
'fett machen
xCell.Characters(Start:=position, Length:=stellen).Font.Bold = True
End If
k = daten(i, 2)
position = position + stellen
stellen = daten(i, 1)
End If
Next
End If
weiter:
Next
Application.ScreenUpdating = altzustand
Debug.Print Time, "Ende"
End Sub

Anzeige
AW: Suchen und Ersetzen mit VBA
14.07.2020 15:30:58
Matthias
Moin!
Hier nochmal geändert. Wobei ich das bei meinen Testläufen nicht reproduzieren kann. Falls der Fehler noch da ist, wenn möglich mal eine Datei oder so ein paar Teststrings hochladen.
Bei der Performance habe ich schon versucht so viel wie möglich auf Zugriffe auf die Zellen zu vermeiden. Ist beim Auslesen / Setzen der Formatierung aber notwendig (wobei ich das da auch schon beim Neuformatieren gerafft habt). Auf Grund dessen dauert es da ein wenig. Wenn der Suchstring nicht vorkommt, überpsringe ich jetzt sämtlichen Code. Mehr lässt sich jetzt auf die schnelle wohl nicht verbessern. Bitte mal testen.
Sub CharactersReplace(Rng As Range, FindText As String, ReplaceText As String, Optional _
MatchCase As Boolean = False)
'UpdatebyExtendoffice20160711
Dim daten As Variant, neutext As Variant
Dim xLenFind As Long, xLenRep As Long, xLenText As Long
Dim i As Long, j As Long, k As Long, stellen As Long, position As Long
Dim xCell As Range
Dim austext As String
Dim altzustand
altzustand = Application.ScreenUpdating
Application.ScreenUpdating = False
xLenFind = Len(FindText)
xLenRep = Len(ReplaceText)
For Each xCell In Rng
If VarType(xCell) = vbString Then
austext = xCell.Value
position = InStr(1, austext, FindText, vbTextCompare)
If position = 0 Then GoTo weiter
xLenText = Len(austext)
'Daten auslesen
ReDim daten(1 To xLenText + 1, 1 To 2)   'Zeichenanzahl, Format
ReDim neutext(1 To xLenText)
For i = 1 To xLenText
neutext(i) = Mid(austext, i, 1)
daten(i, 1) = 1
j = 0
If xCell.Characters(Start:=i, Length:=1).Font.Italic = True Then j = j + 1        ' _
Kursiv
If xCell.Characters(Start:=i, Length:=1).Font.Bold = True Then j = j + 2             _
'Fett
daten(i, 2) = j
Next
'Daten ersetzen
While position > 0
neutext(position) = ReplaceText
daten(position, 1) = xLenRep
For j = position + 1 To position + xLenFind - 1
daten(j, 1) = ""
neutext(j) = ""
Next
position = InStr(position + xLenFind, austext, FindText, vbTextCompare)
Wend
'Daten zurückschreiben
xCell = Join(neutext, "")
xCell.Characters.Font.Bold = False
xCell.Characters.Font.Italic = False
k = daten(1, 2)
position = 1
For i = 1 To xLenText + 1
If k = daten(i, 2) Then
If daten(i, 1)  "" Then
stellen = stellen + daten(i, 1)
End If
Else
'formatieren
If k = 1 Or k = 3 Then
'kursiv machen
xCell.Characters(Start:=position, Length:=stellen).Font.Italic = True
End If
If k = 2 Or k = 3 Then
'fett machen
xCell.Characters(Start:=position, Length:=stellen).Font.Bold = True
End If
k = daten(i, 2)
position = position + stellen
stellen = daten(i, 1)
End If
Next
End If
weiter:
Erase daten
Erase neutext
Next
Application.ScreenUpdating = altzustand
End Sub

VG
Anzeige
AW: Suchen und Ersetzen mit VBA
15.07.2020 09:59:35
Marc
Guten Morgen,
super danke euch beiden!!
Die Performance hat noch mal ein guten Schritt nach vorne geschafft.
Ich habe eure beiden Codes ausprobiert... ich sehe Abweichungen in den Zeilen... ,aber verstehe sie nicht.
Jedoch, funktionieren beide Codes gleich schnell, das habe es mir der Stoppuhr validiert.
Excel schafft nun 167 Zellen mit knapp 400 Zeichen in 48 Sekunden.
Ich bin damit sehr zu frieden und muss endlich nicht immer jedes einzelne Wort 3-fach anklicken, um anschließend str+v zu drücken :D
Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige
Anzeige

Infobox / Tutorial

Suchen und Ersetzen mit VBA in Excel


Schritt-für-Schritt-Anleitung

Um die Suchen und Ersetzen-Funktionalität in Excel durch VBA zu erweitern, kannst du folgendes Skript verwenden. Dieses Skript ermöglicht es dir, Texte innerhalb von Zellen zu ersetzen, ohne die Formatierung zu verlieren.

  1. Öffne Excel und drücke ALT + F11, um den VBA-Editor zu öffnen.
  2. Klicke auf Einfügen > Modul, um ein neues Modul zu erstellen.
  3. Füge den folgenden Code in das Modul ein:
Sub CharactersReplace(Rng As Range, FindText As String, ReplaceText As String, Optional MatchCase As Boolean = False)
    Dim daten As Variant, neutext As Variant
    Dim xLenFind As Long, xLenRep As Long, xLenText As Long
    Dim i As Long, j As Long, k As Long, stellen As Long, position As Long
    Dim xCell As Range
    Dim austext As String
    Dim altzustand
    altzustand = Application.ScreenUpdating
    Application.ScreenUpdating = False
    xLenFind = Len(FindText)
    xLenRep = Len(ReplaceText)

    For Each xCell In Rng
        If VarType(xCell) = vbString Then
            austext = xCell
            xLenText = Len(austext)
            ReDim daten(1 To xLenText + 1, 1 To 2)
            ReDim neutext(1 To xLenText)
            For i = 1 To xLenText
                neutext(i) = Mid(austext, i, 1)
                daten(i, 1) = 1
                j = 0
                If xCell.Characters(Start:=i, Length:=1).Font.Italic = True Then j = j + 1
                If xCell.Characters(Start:=i, Length:=1).Font.Bold = True Then j = j + 2
                daten(i, 2) = j
            Next
            position = InStr(1, austext, FindText, vbTextCompare)
            While position > 0
                neutext(position) = ReplaceText
                daten(position, 1) = xLenRep
                For j = position + 1 To position + xLenFind - 1
                    daten(j, 1) = ""
                    neutext(j) = ""
                Next
                position = InStr(position + xLenFind, austext, FindText, vbTextCompare)
            Wend
            xCell = Join(neutext, "")
            xCell.Characters.Font.Bold = False
            xCell.Characters.Font.Italic = False
            k = daten(1, 2)
            position = 1
            For i = 1 To xLenText + 1
                If k = daten(i, 2) Then
                    If daten(i, 1) <> "" Then
                        stellen = stellen + daten(i, 1)
                    End If
                Else
                    If k = 1 Or k = 3 Then
                        xCell.Characters(Start:=position, Length:=stellen).Font.Italic = True
                    End If
                    If k = 2 Or k = 3 Then
                        xCell.Characters(Start:=position, Length:=stellen).Font.Bold = True
                    End If
                    k = daten(i, 2)
                    position = position + stellen
                    stellen = daten(i, 1)
                End If
            Next
        End If
    Next
    Application.ScreenUpdating = altzustand
End Sub
  1. Um das Skript auszuführen, kannst du eine weitere Subroutine verwenden:
Sub Test_CharactersReplace()
    Dim xRg As Range
    On Error Resume Next
    Set xRg = Application.InputBox("Select a range:", "Kutools for Excel", Selection.Address, Type:=8)
    If xRg Is Nothing Then Exit Sub
    Call CharactersReplace(xRg, "Ersetze das Wort", "Gegen das Wort", True)
End Sub
  1. Schließe den VBA-Editor und führe die Test_CharactersReplace-Subroutine aus, um die Funktion zu testen.

Häufige Fehler und Lösungen

  • Fehler: Der Code funktioniert nur für Zellen mit weniger als 255 Zeichen.

    • Stelle sicher, dass der Code die Zellen in kleinere Abschnitte aufteilt, um die Zeichenbeschränkung zu umgehen.
  • Fehler: Formatierungen werden nach der Textersetzung verschoben.

    • Überprüfe, ob der Code nach der Ersetzung die Formatierungen zurücksetzt. Es kann helfen, vor dem Ersetzen die Positionen neu zu berechnen.

Alternative Methoden

Wenn du nicht mit VBA arbeiten möchtest, kannst du auch die integrierte Suchen und Ersetzen-Funktion von Excel verwenden. Diese Methode hat jedoch Einschränkungen, insbesondere bei der Erhaltung von Formatierungen. Eine andere Möglichkeit besteht darin, die Power Query-Funktion von Excel zu nutzen, um Daten zu transformieren.


Praktische Beispiele

  1. Beispiel 1: Ersetze das Wort "Auto" mit "Bus".

    • Füge den Text "Mein Auto ist schnell." in eine Zelle ein und führe das Skript aus, um "Bus" anstelle von "Auto" zu erhalten.
  2. Beispiel 2: Ersetze mehrere Wörter in einer Zelle.

    • Ändere den Code, um mehrere Wörter gleichzeitig zu ersetzen, indem du eine Schleife hinzufügst, die eine Liste von Wörtern durchläuft.

Tipps für Profis

  • Optimierung der Performance: Verwende Application.ScreenUpdating = False, um die Bildschirmaktualisierung während des Skriptlaufs zu deaktivieren.
  • Verwendung von Arrays: Arbeite mit Arrays, um die Verarbeitungsgeschwindigkeit zu erhöhen, insbesondere bei großen Datenmengen.
  • Debugging: Nutze Debug.Print, um den Fortschritt des Skripts zu verfolgen und Probleme schnell zu identifizieren.

FAQ: Häufige Fragen

1. Wie kann ich den Code anpassen, um nur bestimmte Formatierungen zu berücksichtigen? Du kannst die Bedingungen im Code ändern, um spezifische Formatierungen (z.B. nur fett oder kursiv) zu berücksichtigen.

2. Funktioniert dieser Code in allen Excel-Versionen? Ja, der VBA-Code sollte in Excel-Versionen ab 2007 funktionieren, solange die VBA-Funktionalität verfügbar ist.

3. Kann ich auch mehrere Zellen gleichzeitig bearbeiten? Ja, das Skript funktioniert für eine Auswahl von Zellen. Wähle einfach den gewünschten Zellbereich aus, bevor du das Skript ausführst.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige