Neue Einträge |
|
|
|
Teile einer Str-Variablen löschen (1090 Hits)
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.
|
|
|
Antwort 1 von rainberg vom 02.02.2017, 10:08
|
|
|
Hallo Andreas,
vielleicht so?
Sub test()
Range("B1").Value = WorksheetFunction.Substitute(Range("A1"), ",8,", ",")
End Sub
Hierbei steht die Stringvariable in A1
Gruß Rainer
|
|
Antwort 2 von ahorn38 vom 02.02.2017, 10:16
|
|
|
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.
|
|
Antwort 3 von Flupo vom 02.02.2017, 10:18
|
|
|
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
|
|
Antwort 4 von xlKing vom 02.02.2017, 12:29
|
|
|
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.
|
|
Antwort 5 von M.O. vom 02.02.2017, 12:37
|
|
|
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.
|
|
Antwort 6 von rainberg vom 02.02.2017, 12:58
|
|
|
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
|
|
Antwort 7 von Nighty__ vom 02.02.2017, 13:27
|
|
|
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
|
|
Antwort 8 von ahorn38 vom 02.02.2017, 15:14
|
|
|
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.
|
|
Antwort 9 von Nighty__ vom 02.02.2017, 16:31
|
|
|
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
|
|
Antwort 10 von ahorn38 vom 03.02.2017, 15:29
|
|
|
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.
|
|
Antwort 11 von Nighty__ vom 04.02.2017, 12:16
|
|
|
Hallo Andreas ^^
Zwei Beispiele zum Pattern! Parameter sind rech vielfältig und kombinierbar!
Gruß Nighty
.Pattern = "\D" 'Nur Ganzzahlige Zahlen
.Pattern = "[0-9]" '0-9 ausgeschlossen
|
|
Antwort 12 von Nighty__ vom 05.02.2017, 09:22
|
|
|
Hallo Andreas ^^
String Verarbeitung ist imm recht Amösant .-)
Ich hab Dir mal ein Interessantes Beispiel rausgesucht!
Binäre Hochzählung!
Sub DualHochZählen()
'Beispiel zur String Verarbeitung,das Duale Hochzählen!
Dim StringY As String, StringX As String, StringE As String
Dim DZeile As Integer
StringY = String(8, "0") '8 Bit
StringX = String(8, "0")
StringE = String(8, "1")
Do
DZeile = DZeile + 1
StringY = Mid(StringY, 1, InStrRev(StringY, "0") - 1) & "1" & Mid(StringX, InStrRev(StringY, "0") + 1, Len(StringX))
Cells(DZeile, 1) = StringY
Loop While StringY <> StringE
End Sub
|
|
|
Diese Frage ist schon etwas älter, Sie können daher nicht mehr auf sie antworten. Sollte Ihre Frage noch nicht gelöst sein, stellen Sie einfach eine neue Frage im Forum.
|
|
MACHEN SIE IHRE WEBSITE ATTRAKTIVER |
Sie haben eine eigene Website und wollen Ihre Besucher auf den Supportnet-Service aufmerksam machen?
Kopieren Sie einfach den Quellcode in Ihre Seite und jeder Besucher Ihrer Seite kann direkt auf die
Supportnet-Datenbank zugreifen.
|
|
|
Gruppen im Forum |
Betriebsysteme
Software
Hardware
Netzwerk
Programmierung
Sonstiges
|
|
|