Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1068to1072
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

Mehrere Funde in string unterschiedlich ersetzen

Mehrere Funde in string unterschiedlich ersetzen
22.04.2009 14:20:08
guitarslinger
Hallo zusammen,
ich habe folgendes Problem:
Ich habe in Text in Zellen, in dem an unterschiedlicher Position bis zu zwei Platzhalter eingefügt sind. Diese sehen so aus: {INSERTANS:77822X8X645}
Nun möchte ich den ersten Fund einer solchen Zeichenkette (Identifikation über die Klammern) durch den Inhalt einer Zelle ersetzen, den zweiten Fund durch den Inahlt einer anderen Zelle.
Nun habe ich das Problem, dass beide Funde durch den die gleiche Zelle ersetzt werden. Ich kann den zweiten Fund nicht steuern. Ich erhalte die Fehlermeldung: Ungültiger Prozeduraufruf oder ungültiges Argument
Dazu folgender Code:

Sub replinsa()
Dim rng As Range
Dim replstr As String
Dim insans As String
Dim insans2 As String
Dim rngtxt As String
Dim searchstr As String
Dim searchend As String
searchstr = "{"
searchend = "}"
For Each rng In ActiveSheet.Range("A185:A185")
rngtxt = rng.Text
Select Case CountChar(rngtxt, searchstr)
Case 0
GoTo weiter
Case 1
rngtxt = rng.Text
If rng.Offset(0, 1) = "*" Then
replstr = rng.Offset(0, 1).Text
insans = Mid(rngtxt, InStr(rngtxt, searchstr), InStr(rngtxt, searchend) - InStr(rngtxt,  _
searchstr) + 1)
rng = Replace(rngtxt, insans, replstr)
ElseIf rng.Offset(0, 2)  "" Then
replstr = rng.Offset(0, 2).Text
insans = Mid(rngtxt, InStr(rngtxt, searchstr), (InStr(rngtxt, searchend) - InStr(rngtxt,  _
searchstr) + 1))
rng = Replace(rng.Text, insans, replstr)
End If
Case 2
'erstes INSANS
rngtxt = rng.Text
replstr = rng.Offset(0, 1).Text
insans = Mid(rngtxt, InStr(rngtxt, searchstr), InStr(rngtxt, searchend) - InStr(rngtxt,  _
searchstr) + 1)
rng = Replace(rngtxt, insans, replstr)
insans = ""
replstr = ""
'zweites INSANS
rngtxt = rng.Text
replstr = rng.Offset(0, 2).Text
insans = Mid(rngtxt, InStr(rngtxt, searchstr), InStr(rngtxt, searchend) - InStr(rngtxt,  _
searchstr) + 1)
rng = Replace(rngtxt, insans, replstr)
End Select
weiter:
Next
End Sub



Function CountChar(ByVal SourceString As String, ByVal strChar As String) As Integer
CountChar = Len(SourceString) - Len(Replace(SourceString, strChar, ""))
End Function


Danke im Voraus für eure Hilfe,
Grüße gs

3
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Mehrere Funde in string unterschiedlich ersetzen
22.04.2009 15:45:11
D.Saster
Hallo,
machs über Worksheetfunction.Substitute (=WECHSELN) anstatt Replace.
Gruß
Dierk
AW: Mehrere Funde in string unterschiedlich ersetzen
22.04.2009 16:12:44
guitarslinger
Hallo Dierk,
hat funktioniert!!
Vielen Dank
Ich spiele mal WF! Das Ganze wäre auch...
22.04.2009 18:23:25
Luc:-?
...mit Standard-Formeln möglich, wenn in jedem Text stets 2 Platzhalter enthalten sind. Anderenfalls liefert SUCHEN einen Fehlerwert, der mit ISTFEHLER abgefangen wdn müsste. Auf Grund des iterativen Charakters dieser Operation ist es empfehlenswert, mit benannten Formeln zu arbeiten. Sich wiederholende Teile der Hauptfml wdn dabei durch deren Namen ersetzt. Diese fungieren dann quasi als "virtuelle Hilfszellen", die einen Wert an die HptFml liefern...
=LINKS(A95;alfa-1)&D94&TEIL(A95;beta+1;gamma-beta-1)&E94&TEIL(TEIL(A95; gamma;LÄNGE(A95));
  SUCHEN("}";TEIL(A95;gamma;LÄNGE(A95)))+1;LÄNGE(A95))
Der Text mit den Platzhaltern steht hier in A95, die platzhalterersetzenden Texte stehen in D94:E94. Der Inhalt der Platzhalter spielt keine Rolle, nur ihre Reihenfolge und ihre Form {*} (* steht hier für eine beliebige Anzahl Zeichen ≠ {}). Die Fml ist hier so 141 Zeichen lang.
Die benannten Formeln lauten...
alfa =SUCHEN("{*}";A95)
beta =SUCHEN("}";A95)
gamma =SUCHEN("{*}";A95;alfa+1)
Bei ihrer Definition muss die Zelle der 1.Hauptfml ausgewählt sein, wenn sie wie hier (teil-)relative Bezüge enthalten.
Wenn keine benannten Fmln verwendet wdn sollen, müssen die Namen in der HptFml durch die entsprechenden Teilfmln ersetzt wdn. Die Fml würde so 272 Zeichen lang.
Eine deutlich kürzere Fml (98 Zeichen) ohne Namen wäre mit der udFkt MaskOn zu erreichen, falls ihre im Herber-Archiv enthaltene ältere Version schon die Markierung-Ersetzen-Fktionalität ("mrk{}", jeder so markierte Teiltext wird durch Leerzeichen ersetzt) enthält...
=WECHSELN(WECHSELN(WECHSELN(MaskOn(WECHSELN(A95;" ";"_");"mrk{}";1);" ";D94;1);" ";
  E94;1);"_";" ")
Hier gilt die Einschränkung bzgl fehlender Platzhalter nicht.
Gruß Luc :-?
Anzeige

302 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige