Dieses Forum nutzt Cookies
Dieses Forum verwendet Cookies, um deine Login-Informationen zu speichern, wenn du registriert bist, und deinen letzten Besuch, wenn du es nicht bist. Cookies sind kleine Textdokumente, die auf deinem Computer gespeichert werden. Die von diesem Forum gesetzten Cookies werden nur auf dieser Website verwendet und stellen kein Sicherheitsrisiko dar. Cookies aus diesem Forum speichern auch die spezifischen Themen, die du gelesen hast und wann du zum letzten Mal gelesen hast. Bitte bestätige, ob du diese Cookies akzeptierst oder ablehnst.

Ein Cookie wird in deinem Browser unabhängig von der Wahl gespeichert, um zu verhindern, dass dir diese Frage erneut gestellt wird. Du kannst deine Cookie-Einstellungen jederzeit über den Link in der Fußzeile ändern.

Ersetzen von Zeichen an bestimmter Stelle
#11
Es geht tatsächlich ausschließlich in einer Zeichenfolgenvariable, wie es ja auch in der Hilfe steht.
Dies funzt:
Code:
Dim txt
txt = String(100, "a")
Mid(txt, 15) = "b"
Debug.Print txt

Dies liefert falsch:
Code:
Debug.Print Mid(String(100, "a"), 15) = "b"

Ich bin ehrlich:
Nie gesehen, nie benutzt.

Gruß Ralf
Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. 
Lehre einen Mann zu fischen und du ernährst ihn für sein Leben. (Konfuzius)
Antworten Top
#12
Hallo,

es geht auch mit
Code:
cells(1,1).chracters,Insert
cells(1,1).characters.Replace


aber mein Eindruck war, dass dieser Befehl extrem langsam ist.

mfg
Antworten Top
#13
Hallöchen,

da wäre noch die Frage, warum das nicht funktioniert:

Debug.Print Replace(String(100, "a"), "a", "b", 5, 1)

Obwohl anscheinend laut IntelliSense festgelegt ist, dass das a erst ab Position 5 ersetzt werden soll, wird anscheinend das a an Position 1 ausgetauscht Sad

Wenn man einen kürzeren String nimmt etwas genauer hinschaut, erkennt man die unlogische Logik ...

Debug.Print Replace("abcabcabcabc", "a", "b", 2, 1)

Als Ergebnis entsteht

bcbbcabcabc

Replace lässt hier also das erste a verschwinden und ersetzt das zweite a wie gewollt durch ein b. Aber - das erste a sollte doch nicht verschwinden ...
Bei dem String 100 ist es analog. Excel lässt die ersten 4 a verschwinden und ersetzt das 5. durch ein b. Logisch, oder?  :16:

Angeblich lesen wir Herren der Schöpfung nur ungern Bedienungsanleitungen. Aber auch hier ist wieder die Hilfe gefragt:

Replace-Funktion ist eine Zeichenfolge, die an der durch Start festgelegten Position beginnt

Also geht es so:

Debug.Print Left("abcabcabcabc", 1) & Replace("abcabcabcabc", "a", "b", 2, 1)

oder etwas konsterniert vervariablisiert oder so ähnlich ...

Code:
Const strTxt$ = "abcabcabcabc"
Const lRep& = 2
Debug.Print Left(strTxt, lRep - 1) & Replace(strTxt, "a", "b", lRep, 1)

oder eben
Code:
strTxt = String(100, "a")
lRep = 15
Debug.Print Left(strTxt, lRep - 1) & Replace(strTxt, "a", "b", lRep, 1)
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
[-] Folgende(r) 1 Nutzer sagt Danke an schauan für diesen Beitrag:
  • atilla
Antworten Top
#14
Hallo Andre,

darauf bin ich auch reingefallen, und hab deswegen Substitude genutzt.
Aber Uwe hat ja gezeigt, wie Replace richtig anzuwenden ist.

Aus der Hilfe:
Ausdruck.Replace(Arg1, Arg2, Arg3, Arg4)
Ausdruck   Eine Variable, die ein WorksheetFunction-Objekt darstellt.
Parameter
Name
Erforderlich/Optional
Datentyp
Beschreibung
Arg1
Erforderlich
String
Text (die Zeichenfolge), in dem (der) Sie einige Zeichen ersetzen möchten.
Arg2
Erforderlich
Double
Die Position des Zeichens in Arg1, das durch Arg4 ersetzt werden soll.
Arg3
Erforderlich
Double
Die Anzahl der Zeichen in Arg1, die von der Replace-Methode durch Arg4 ersetzt werden soll.
Arg4
Erforderlich
String
Text, der Zeichen in Arg1 ersetzen soll.


Wenn ich das nicht falsch verstehe, machst Du den Fehler dass Du Arg2 falsch besetzt? Komischerweise habe ich das auch so im Kopf.
Gruß Atilla
Antworten Top
#15
Hallo atilla,

ich habe mich auf das direkte VBA-Replace bezogen, Uwe auf WorksheetFunction.Replace Das muss man getrennt betrachten
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
[-] Folgende(r) 1 Nutzer sagt Danke an schauan für diesen Beitrag:
  • atilla
Antworten Top
#16
Es handelt sich bei der gezeigten Mid-Anwendung tatsächlich um eine reguläre Verwendung, Leute,
denn Mid gibt's ebenso wie Replace als VBA-Funktion und als -Anweisung. Allerdings funktioniert dieses Mid im Gegensatz zur zuvor getroffenen Feststellung und der Variant-Bemerkung in der VBE-Hilfe auch, nicht nur mit String-Variablen. In Fenneks Bsp handelt es sich bei txt ja auch um einen Variant, der einen String enthält. Mit Dim txt$ und Mid$ funktioniert's aber ebenfalls.
Da die Mid-Anweisung anders wirkt als die Replace-Anweisung, ist das eine sinnvolle, wenn auch offensichtlich wenig bekannte Ergänzung bzw Alternative zu letzterer.
Gruß, Castor
Antworten Top
#17
@Quantum
Hallöchen,
Du merkst, Deine Frage hat zu einer Diskussion geführt, die sich vielleicht tiefer mit den Grundlagen Deines Ansinnens beschäftigt, als Du gehen wolltest, ansonsten aber fachlich ok ist. Lass Dich davon nicht beirren Smile Ich denke, so ab 16:56 hatten wir es im Kasten Smile

Hallo Castor,

ich denke, es ging in der Antwort von Fennek generell um die Verwendung von Mid mit einer Variable. Siehe der zweite Code mit der Aussage ... liefert Falsch. Das ist ja letztendlich kein Fehler, sondern ein ordentliches, wenn auch unerwartetes Ergebnis. Eventuell könnte man das mit einer Funktion vergleichen, der eine Variable byRef übergeben wird. Da muss man auch eine Variable übergeben, deren Inhalt dann von der Funktion verändert wird. Die bringt aber ggf. einen Fehler, wenn was nicht passt Smile
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
Antworten Top
#18
Hallo André,

aus der Hilfe zur VBA-Replace-Funktion:

Replace(expression, find, replace[, start[, count[, compare]]])

Die Syntax der Replace-Funktion besteht aus folgenden Teilen:

start Optional. Position in expression, an der die Suche nach der untergeordneten Zeichenfolge beginnt. Wird diese Angabe ausgelassen, wird bei 1 begonnen.

Dies ist offensichtlich so gemeint, dass

MsgBox Replace(String(100, "a"), "a", "b", 5, 1)

das Gleiche ist wie

MsgBox Replace(Mid(String(100, "a"), 5), "a", "b", 1, 1)

Gruß Uwe
Antworten Top
#19
Hallo Uwe,

Dann ist das offensichtlich ein Unterschied zwischen den Versionen 2010 und 2016. Ich habe für meinen Beitrag die 2016 genutzt. In der Regel nutze ich diese für meine Antworten.
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
Antworten Top
#20
Hallo Uwe,

habe gerade meinen alten Laptop mit Office 2000 zum Laufen gebracht und dort Replace getestet unter 2000 ist es wie unter 2016, Replace schneidet, wie ich es aus der Hilfe zitiert habe, die vorderen Zeichen vom String ab und bginnt dann mit der programmierten Stelle im String, hier 5.

Sub test()
Debug.Print Replace("abcabcabcabcabc", "a", "x", 5, 1) 'String mit 15 Stellen
End Sub

bringt

bcxbcabcabc (11 Stellen).

HIermit wird es noch deutlicher:

Sub test()
Debug.Print Replace("abcdefghijklmno", "a", "x", 5, 1)
End Sub

bringt

efghijklmno

und ersetzt wird nix ...
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
Antworten Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste