Ecxel 2010 - String zwischen zwei Bedingungen heraustrennen

Allan Sche Sar

Lt. Commander
Registriert
Jan. 2004
Beiträge
1.912
Hallo ihr,

ich habe eine Optimierungsfrage. Aus einem String mit folgendem Inhalt:
Ordnung der Fühler und Einheiten: S1:°C S2:%rF S3:°C S4:%rF S5:°C S6:°C S7:Pa S8:Part/cf
lese ich immer die Einheiten aus. Also °C, %rF, °C usw.

Derzeit verwende ich den Code:
Code:
Dim KMo_(1 To 15) As String 'variable Variablen für die Einheiten'
Dim Index As Integer 'Zählindex für die variable Variable'
Dim sTeil As String 'Hilfsstring zum Zwischenspeichern'

For Index = 2 To 9
        sTeil = Split(Range("A7"), ":")(Index)
        KMo_(Index) = Left(sTeil, InStr(sTeil, " ") - 1)
Next Index
Das Ergebnis sieht aber dann wie folgt aus "°C S2" für das erste i. Also gehe ich im Nachgang her und trenne alles nach dem Leerzeichen ab (Zeile 8).
Aber das ganze geht doch bestimmt eleganter oder? Außerdem bekomme ich dann immer ein Problem bei der letzten Einheit, weil dort ja kein Leerzeichen dahinter ist.
 
Zuletzt bearbeitet:
Du zerschneidest den String doch sowieso, warum trennst du dann bei ":"?
Den ersten Teil würde ich tatsächlich raus schneiden, als alles bis "Einheiten:" durch "" ersetzen.
Dann machst du den Split auf " " und nimmst dann ein Mid ab ":" bis Länge String. Dann solltest du das passender Ergebnis bekommen.
 
Okay ich bin ganz offensichtlich jedes mal, wenn ich etwas mit Strings machen muss, zu blöd dafür.
Auf deine Beschreibung hin habe ich den Code wie folgt abgeändert:

Code:
Dim KMo_(1 To 15) As String 'variable Variablen für die Einheiten'
Dim Index As Integer 'Zählindex für die variable Variable'
Dim sTeil As String 'Hilfsstring zum Zwischenspeichern'
Dim sTeil1 As String 'Hilfsstring zum Zwischenspeichern'

TextEinheit = ActiveSheet.Range("A7").Value
pos1 = InStr(TextEinheit, ":")
sTeil1 = Right(TextEinheit, Len(TextEinheit) - pos1 - 2)
For Index = 1 To 8
        sTeil = Split(sTeil1, " ")(Index)
        KMo_(Index) = Right(sTeil, InStr(sTeil, ":") - 1)
Next Index

In TextEinheit steht nun wieder der Ausgangstext:
Ordnung der Fühler und Einheiten: S1:°C S2:%rF S3:°C S4:%rF S5:°C S6:°C S7:Pa S8:Part/cf

sTeil1 hat folgenden Text:
" S1:°C S2:%rF S3:°C S4:%rF S5:°C S6:°C S7:Pa S8:Part/cf"

sTeil hat im ersten Durchlauf folgenden Wert:

Wenn der Index 1 ist, wird die variable KMo_(1)=°C //alles in Ordnung
Wenn der Index 2 ist, wird die variable KMo_(2)=rf //warum wird nun das % abgschnitten?
Wenn der Index 3 ist, wird die variable KMo_(3)=°C //alles in Ordnung
usw.

Warum funktioniert es nur zur Hälfte. Ich sehe den Fehler nicht - blöde Strings.
 
Code:
KMo_(Index) = Right(sTeil, InStr(sTeil, ":") - 1)
ist falsch.
Genauer gesagt, deine Logik für die Erfassung der Länge.

Richtig wäre:
Code:
KMo_(Index) = Right(sTeil, Len(sTeil - InStr(sTeil, ":")))

So wie du das berechnest hast du als Länge die Position des ":" (3) minus 1, das ergibt 2 für die Länge. In der Korrektur ziehst du die Zeichen bis zum ":" von der Gesamtlänge ab und damit bekommst du wahlweise 2 oder 3 als Ergebnis.
 
Da bin ich es nun so lang schon Schritt für Schritt durchgegangen, habe mir jeden Wert der variablen angesehen, aber habe es nicht hinbekommen.
Mit deiner Codeänderung und einer vergessenen Klammer läuft es nun sauber durch. Ich danke dir vielmals
 
Zurück
Oben