Teile einer Str-Variablen löschen

542 Aufrufe
Gefragt 2, Feb 2017 in Tabellenkalkulation von ahorn38 Experte (2,646 Punkte)
Hallo,

ich habe eine StrVariable, die sich aus einer Reihe von durch Komma getrennter verschiedener Zahlen unterschiedlicher Länge zusammensetzt.

("4,134,2,45,1546,32,8,4567")

Ich möchte per Code eine bestimmte frei zu definierende Zahl (z,B. "8") innerhalb der strVariable löschen und die Variable neu ausgeben.
Meine Versuche waren bisher leider ohne das gewünschte Ergebnis, hat jemand einen Tipp?
Danke und Gruß A.

12 Antworten

0 Punkte
Beantwortet 2, Feb 2017 von rainberg Profi (14,880 Punkte)
Hallo Andreas,

vielleicht so?

Sub test()
Range("B1").Value = WorksheetFunction.Substitute(Range("A1"), ",8,", ",")
End Sub


Hierbei steht die Stringvariable in A1

Gruß
Rainer
0 Punkte
Beantwortet 2, Feb 2017 von ahorn38 Experte (2,646 Punkte)
Hallo Rainer,

ja das ist eine gute vor allem sehr effektive Lösung. Allerdings gibt es ein Problem mit den Kommata, wenn z.B. die erste oder letzte Zahl gelöscht werden soll, da diese das Komma entweder nur vor oder hinter dem Wert haben.
Gruß A.
0 Punkte
Beantwortet 2, Feb 2017 von flupo Profi (12,758 Punkte)
Die angebotene Lösung ist wahrscheinlich noch zu einfach weil die zu
ersetzende Zahl ja variabel sein soll.
Das Problem wird auch dadurch noch etwas komplizierter, dass die zu
ersetzende Zahl ja auch am Anfang oder Ende des Strings stehen kann.
Hab nur gerade wenig Zeit um selbst zu basteln.

Gruß Flupo
0 Punkte
Beantwortet 2, Feb 2017 von xlKing
Hallo Andreas,

hier ein Beispiel, das auch Anfang und Ende einbezieht.

Sub Ersetzen()

repl = "8"
Var = "8,57,8,20,8"

Var = Replace(Var, "," & repl & ",", ",")
p = InStr(1, Var, ",")
If Left(Var, p - 1) = repl Then Var = Right(Var, Len(Var) - p)
p2 = InStrRev(Var, ",")
If Right(Var, Len(Var) - p2) = repl Then Var = Left(Var, p2 - 1)

End Sub
Gruß Mr. K.
0 Punkte
Beantwortet 2, Feb 2017 von m-o Profi (11,151 Punkte)
Hallo Andreas,

du kannst die Variable ja per Split erledigen ;-). Im folgenden Beispiel steht die Variable in Zelle A1. Ersetzt wird hier die 4

Sub Beispiel()

Dim varX As Variant
Dim strAlt As String
Dim strNeu As String
Dim i As Long

'Einlesen - ohne erste und letzte zwei Zeichen
strAlt = Mid(Range("A1").Value, 3, Len(Range("A1").Value) - 4)
'String aufspalten
varX = Split(strAlt, ",")
'einzelne Elemente wieder zusammenfügen, aber ohne bestimmte Zahl
For i = LBound(varX) To UBound(varX)
If varX(i) <> 4 Then strNeu = strNeu & varX(i) & ","
Next i

'letztes Komma abschneiden und erste und letzte zwei Zeichen wieder ergänzen
Range("A2") = "(""" & Left(strNeu, (Len(strNeu) - 1)) & """)"

End Sub


Gruß

M.O.
0 Punkte
Beantwortet 2, Feb 2017 von rainberg Profi (14,880 Punkte)
Hallo Andreas,

und zum Schluss noch eine Variante vom VBA-Laien

Option Explicit

Sub test()
Dim strWeg As String, str2 As String, str3 As String
str2 = WorksheetFunction.Substitute(WorksheetFunction.Substitute(Range("A1"), "(""", "("","), """)", ","")")
strWeg = "," & InputBox("Welche Zahl soll gelöscht werden?", "") & ","
str3 = WorksheetFunction.Substitute(str2, strWeg, ",")
Range("B1") = WorksheetFunction.Substitute(WorksheetFunction.Substitute(WorksheetFunction.Substitute(str3, "(""", "("","), """)", ","")"), ",,", "")
End Sub



Gruß
Rainer
0 Punkte
Beantwortet 2, Feb 2017 von Nighty__
Hi all ^^

ein Beispiel!

Gruss Nighty

Sub Löschen()
Cells(1, 1) = "8,1,2,8,2,8"
Cells(1, 1).Replace What:="8" & ",", Replacement:="", LookAt:=xlPart
Cells(1, 1).Replace What:="," & "8", Replacement:="", LookAt:=xlPart
End Sub
0 Punkte
Beantwortet 2, Feb 2017 von ahorn38 Experte (2,646 Punkte)
Hallo,
vielen Dank an ALLE!!!
Ich finde jede Lösung hat etwas... jetzt bleibt mir die Qual der Wahl.
Das ist ein wirklich gutes Forum - hier kriegt man ja wirklich in kürzester Zeit super qualifizierte Tipps!
Danke und Gruß A.
0 Punkte
Beantwortet 2, Feb 2017 von Nighty__
hi all ^^

Dann noch eine .-)

Gruss Nighty

Sub ZeichenL()
Dim Zeichenkette As String
Zeichenkette = "81288"
With CreateObject("VBscript.regexp")
.Pattern = "(8|)"
.Global = True
Zeichenkette = .Replace(Zeichenkette, "")
End With
Cells(1, 1) = Zeichenkette
End Sub
0 Punkte
Beantwortet 3, Feb 2017 von ahorn38 Experte (2,646 Punkte)
Hallo nighty,

du bringst immer noch eine Lösung bei der ich erst einmal eine halbe Stunde brauche, um zu verstehen was du da machst..... Das liegt aber nicht an dir sondern an meinen begrenzten Kenntnissen!! Das funktioniert natürlich und ich habe wieder was dazu gelernt! Danke!!
Gruß A.
...