Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Einzelne Wörter in einer Zelle suchen und mit Format ersetzen

1,831 views
Skip to first unread message

smaenner

unread,
Jun 21, 2012, 3:44:00 AM6/21/12
to
In einer großen Tabelle soll nach einzelnen Wörtern in einer Zelle
gesucht und diese dann ersetzt werden. Das wäre kein Problem, mit der
Funktion [b]=ERSETZEN(B3;SUCHEN("Wert1";B3);LÄNGE("Wert1");"Wertx")[/b]
klappt es auch. Aber jetzt die eigentliche Schwierigkeit: Der zu
ersetzende Wert soll in der Zelle [b]Fett [/b]formatiert werden, also
nur ein Wort von vielen im Text einer Zelle, der Rest bleibt Standard.
Die Wörter ändern sich immer wieder, manchmal sind es auch längere
Textteile.

Aus meiner Sicht ist das ohne VBA nicht lösbar, Problem ist, dass die
Person keine Ahnung hat, sie müsste den VBA-Code auch immer wieder
anpassen. Ich wäre über jede Antwort froh.

Siegfried

Claus Busch

unread,
Jun 21, 2012, 4:06:08 AM6/21/12
to
Hallo Siegfried,
es stimmt, das ist nur mit VBA zu machen. Aber es geht auch nur in
Texten. D.h. in Formeln geht es auch nicht. Die Formel müsste noch in
Werte gewandelt werden.
Aber das könnte man in einem Rutsch mit VBA machen.
Wo soll gesucht werden? Nur in einer bestimmten Spalte oder in der
ganzen Tabelle? Kommt das gesuchte Wort nur einmal in der Zelle vor oder
mehrmals?


Mit freundlichen Grüßen
Claus Busch
--
Win XP Prof SP3 / Vista Ultimate SP2
Office 2003 SP3 /2007 Ultimate SP3

Claus Busch

unread,
Jun 21, 2012, 11:39:36 AM6/21/12
to
Hallo Siegfried,

Am Thu, 21 Jun 2012 10:06:08 +0200 schrieb Claus Busch:

> es stimmt, das ist nur mit VBA zu machen. Aber es geht auch nur in
> Texten. D.h. in Formeln geht es auch nicht. Die Formel müsste noch in
> Werte gewandelt werden.
> Aber das könnte man in einem Rutsch mit VBA machen.
> Wo soll gesucht werden? Nur in einer bestimmten Spalte oder in der
> ganzen Tabelle? Kommt das gesuchte Wort nur einmal in der Zelle vor oder
> mehrmals?

du hast nicht mehr geantwortet, um das Makro so einfach wie möglich zu
halten. Deshalb nun eine universelle Variante, die alle deine
Bedürfnisse abdecken sollte. Makrocode in eine Standardmodul kopieren
und über Makros starten:

Sub Ersetzen()
Dim i As Integer
Dim k As Integer
Dim Laenge As Integer
Dim intAnz As Integer
Dim rngC As Range
Dim strSuch As String
Dim strErsetz As String
Dim myRange As Range

Such:
strSuch = Application.InputBox("Bitte das gesuchte Wort eingeben", _
"Suchwort", Type:=2)
If strSuch = "" Or strSuch = "Falsch" Then
MsgBox "Bitte Suchwort eingeben"
GoTo Such
End If

Ersatz:
strErsetz = Application.InputBox("Bitte das Ersatzwort eingeben", _
"Ersatzwort", Type:=2)
If strErsetz = "" Or strErsetz = "Falsch" Then
MsgBox "Bitte Ersatzwort eingeben"
GoTo Ersatz
End If

Set myRange = Application.InputBox("Bitte den zu durchsuchenden" _
& "Bereich markieren", "Bereich", Default:="A1", Type:=8)
If myRange Is Nothing Then
MsgBox "Bitte Bereich markieren"
Exit Sub
End If

Laenge = Len(strErsetz)

For Each rngC In myRange
i = 0
rngC = Replace(rngC, strSuch, strErsetz)
intAnz = (Len(rngC) - Len(Replace(rngC, strErsetz, ""))) / Laenge
If intAnz > 0 Then
For k = 1 To intAnz
i = InStr(1 + i, rngC, strErsetz)
rngC.Characters(i, Laenge).Font.Bold = True
Next k
End If
Next rngC
End Sub

smaenner

unread,
Jun 24, 2012, 1:42:33 PM6/24/12
to
Hallo Claus Busch,

vielen Dank für die Antwort, ich bin gerade dabei die Antwort
umzusetzen. Momentan reicht es in dieser Form. Ich konnte die
entsprechende Person überzeugen, die Liste als DBank zu entwickeln (MS
Access). Der Ansatz ist besser, denn die Daten, um die es geht, sind
eigentlich für Excel nicht geeignet.

Grüße

peters...@gmail.com

unread,
Aug 5, 2017, 3:58:23 PM8/5/17
to
Hallo,

ich bin begeistert von deinem Makro.

Es funktioniert einwandfrei.

ich wollte nur mal fragen wie ich das Maktro umbauen muss wenn ich ein definiertes wort in einem definierten bereich habe das ich ersetzen möchte

ich würde mich freuen von dir zu hören und lass schöne grüße da.

noch ein schönes wochende

mfg

peters...@gmail.com

unread,
Aug 5, 2017, 4:07:58 PM8/5/17
to
Ich habe es jetzt erstmal hinbekommen -> leider längst nicht so elegant wie deine lösung

ich habe komplett den makro genommen und jeweils bei Suchwort bzw Ersatzwort ein Defaultwort eingetragen - die Range für das zu markierenden bereich habe ich auch per default angepasst - so kann ich die drei fenster einfach mit weiter durchklicken

Sub Ersetzen()
Dim i As Integer
Dim k As Integer
Dim Laenge As Integer
Dim intAnz As Integer
Dim rngC As Range
Dim strSuch As String
Dim strErsetz As String
Dim myRange As Range

Such:
strSuch = Application.InputBox("Bitte das gesuchte Wort eingeben", _
"Suchwort", "STANDART-SUCH-WORT-HIER-EINTRAGEN", Type:=2)
If strSuch = "" Or strSuch = "Falsch" Then
MsgBox "Bitte Suchwort eingeben"
GoTo Such
End If

Ersatz:
strErsetz = Application.InputBox("Bitte das Ersatzwort eingeben", _
"Ersatzwort", "STANDART-Ersatz-WORT-HIER-EINTRAGEN", Type:=2)
If strErsetz = "" Or strErsetz = "Falsch" Then
MsgBox "Bitte Ersatzwort eingeben"
GoTo Ersatz
End If

Set myRange = Application.InputBox("Bitte den zu durchsuchenden" _
& "Bereich markieren", "Bereich", Default:="A1:A11", Type:=8)

Claus Busch

unread,
Aug 5, 2017, 4:40:13 PM8/5/17
to
Hallo Peter,
warum Such und Ersatz?
Wenn du nur ein Wort einfärben willst, reicht Such.
Außerdem benötigst du keine Schleife über den String, weil du den Anfang
mit InStr erfassen kannst:

Such:
strSuch = Application.InputBox("Bitte das gesuchte Wort eingeben", _
"Suchwort", "STANDART-SUCH-WORT-HIER-EINTRAGEN", Type:=2)
If strSuch = "" Or strSuch = "Falsch" Then
MsgBox "Bitte Suchwort eingeben"
GoTo Such
End If

Set myRange = Application.InputBox("Bitte den zu durchsuchenden" _
& "Bereich markieren", "Bereich", Default:="A1:A11", Type:=8)
If myRange Is Nothing Then
MsgBox "Bitte Bereich markieren"
Exit Sub
End If

Laenge = Len(strSuch)

For Each rngC In myRange
If InStr(rngC, strSuch) Then
rngC.Characters(InStr(rngC, strSuch), Laenge).Font.Bold = True
End If
Next rngC


Mit freundlichen Grüßen
Claus
--
Windows10
Office 2016

Claus Busch

unread,
Aug 5, 2017, 4:46:37 PM8/5/17
to
Hallo Peter,

Am Sat, 5 Aug 2017 22:40:12 +0200 schrieb Claus Busch:

> warum Such und Ersatz?
> Wenn du nur ein Wort einfärben willst, reicht Such.
> Außerdem benötigst du keine Schleife über den String, weil du den Anfang
> mit InStr erfassen kannst:

sorry, du willst das Suchwort ja noch ersetzeh. Dann probiere mal so:
myRange.Replace what:=strSuch, replacement:=strErsetz

For Each rngC In myRange
If InStr(rngC, strErsetz) Then
rngC.Characters(InStr(rngC, strErsetz), Laenge).Font.Bold = True
End If
Next rngC
End Sub
0 new messages