VBA - Werte umwandeln

Hallo, ich habe hier ein Problem, mit dem ich nicht so recht weiterkomme:
Ich habe einen Wert in Stringform z.B. „-100 C“.
Dieser sollte jetzt gesplittet werden, sodass die Zahl „-100“ und die Einheit „C“ getrennt werden.
Ich habe nur keine Idee, wie das funktionieren könnte.
Hab schon alles probiert, Left, Right, Mid - aber irgendwie komme ich auf kein brauchbares Ergebnis.

Danke für eure Hilfe!

Hallo,
Ich habe einen Wert in Stringform z.B. „-100 C“.
Dieser sollte jetzt gesplittet werden, sodass die Zahl „-100“
und die Einheit „C“ getrennt werden.

Danke für eure Hilfe!

Hallo Mauggi,

ist es immer so, dass die Zahl und die Einheit durch genau 1 Leerzeichen getrennt sind? Wenn ja, geht das so:

Sub trennen()
 Dim alles As String
 Dim zahl As String
 Dim einheit As String
 Dim p As Long

 alles = "-100 C"
 p = InStr(alles, " ")
 zahl = Left(alles, p - 1)
 einheit = Mid(alles, p + 1)
End Sub

Gruß, Andreas

Hallo Andreas,
danke für deine schnelle Antwort, aber leider ist es nicht immer so.
Es kann auch vorkommen, dass der Wert ohne „Leerzeichen“ auftaucht.

btw: Ich hab noch was vergessen, in der Applikation, die ich verwende, gibt es die Abfrage „IsNumeric“ (ob ein Wert numerisch ist), das heisst, man könnte die Funktion mit einer Schleife so lange abfragen, bis der Wert numerisch ist oder eben nicht.
Jetzt bin ich total überfragt, mit welcher Schleife das am Besten zu realisieren ist, und mit welchen Funktionen (Right,Left,Mid)…

Danke

Hi,

Jetzt bin ich total überfragt, mit welcher Schleife das am
Besten zu realisieren ist, und mit welchen Funktionen
(Right,Left,Mid)…

etwa so …

Option Explicit

Private Sub Command1\_Click()
 Dim Wert As String, Zahl As Double, Einheit As String
 Dim i As Integer
 Wert = "-234 C"
 For i = Len(Wert) To 1 Step -1
 If IsNumeric(Mid(Wert, i, 1)) Then Exit For
 Next
 Zahl = CDbl(Left(Wert, i))
 Einheit = Right(Wert, Len(Wert) - i - 1)
End Sub

Das läuft jedenfalls.
Das wird sicher noch eleganter gehen, aber ich komm gerade nicht d’rauf.

Gruß Rainer

Hallo, ich habe hier ein Problem, mit dem ich nicht so recht
weiterkomme:
Ich habe einen Wert in Stringform z.B. „-100 C“.
Dieser sollte jetzt gesplittet werden, sodass die Zahl „-100“
und die Einheit „C“ getrennt werden.

Danke für eure Hilfe!

Hallo Mauggi,

hier noch mal eine etwas kürzere Version:

Option Explicit

Sub trennen()
 Dim alles As String, zahl As String, einheit As String
 alles = "-100 °C"
 zahl = Str(Val(alles))
 einheit = Trim(Mid(alles, Len(zahl) + 1))
End Sub

Das funktioniert mit und ohne Leerzeichen.

Gruß, Andreas

Haut hin, Super - Danke!!

Mauggi

Haut hin, Super - Danke!!

hallo Mauggi,

bei mir in Excel2000 haut das nicht hin.

Btw, bei Vba bitte immer angeben um welches MS-Programm und Version es geht.

„haut nicht hin“ = wenn das Leerzeichen fehlt ist die variable Einheit leer.

Bevor hier weitere unnötige Wirrungen auftreten, beschreib mal genauer was vorliegt.

Abgesehen, wie gesagt das Programm, wie liegen die aufzusplittenden daten vor?

Immer als String, ggfs. noch das Vorzeichen dabei, dann die Zahl, dann manchmal leerzeichen, mal nicht, dann eine Maßeinheit, immer C?

Ist halt Jobsharing, wir machen uns Gedanken darüber wie man es löst,
du MUSST dir Gedanken machen wie du uns das Problem so genau schilderst damit wir es überhaupt lösen könnten.

Wir sehen deine Tabelle nicht, wissen nicht was du da genau vorhast.
Alles was du uns verschweigst und wir erst aus deiner nase popeln müssen bringt nur unnötig lange Beitragsfolge und sinnlose verschenkte zeit unsererseits.

Äh, *lächel*, nimm das jetzt bitte nicht persönlich. Gelegentlich muß ich mal Dampf ablassen :smile:

Gruß
Reinhard

„haut nicht hin“ = wenn das Leerzeichen fehlt ist die variable
Einheit leer.

Du hast recht, dann funktioniert es leider nicht.

Immer als String, ggfs. noch das Vorzeichen dabei, dann die
Zahl, dann manchmal leerzeichen, mal nicht, dann eine
Maßeinheit, immer C?

Immer als String, Vorzeichen können „+“ oder „-“ sein, mal Leerzeichen, mal Keine, auch andere Maßeinheiten (wobei ja das funktioniert, wenn ein Leerzeichen enthalten ist).

Alles was du uns verschweigst und wir erst aus deiner nase
popeln müssen bringt nur unnötig lange Beitragsfolge und
sinnlose verschenkte zeit unsererseits.

Die verschiedenen Varianten können sein:
-140 bar
+140 bar

  • 140bar
  • 20C
  • 20 C

Äh, *lächel*, nimm das jetzt bitte nicht persönlich.
Gelegentlich muß ich mal Dampf ablassen :smile:

Macht nichts, ich sehe das schon ein, wenn kein Input meinerseits, dann ist Hilfe schwierig …

Ich hätte auch eine Lösung anzubieten:

Wert = "-100 bar "
Wert = Replace(Wert, " ", „“)
lange = Len(Wert)
i = 0

Do
While Not IsNumeric(Wert)
i = i+1
Zahl = Left(Wert, lange-i)
Wend
Exit Do
Loop

Dann kann mir auch ein Leerzeichen nichts mehr anhaben.
Der Nachteil ist allerdings, die Einheit geht mir irgendwie verloren, aber das bekomme ich auch noch raus…

An meinem Beispiel sieht man auch, dass ich kein Profi bin :smile:

Mauggi

Die verschiedenen Varianten können sein:
-140 bar
+140 bar

  • 140bar
  • 20C
  • 20 C

An meinem Beispiel sieht man auch, dass ich kein Profi bin :smile:

Wer ist das schon :smile:

probier mal bitte dieses:

Option Explicit

Private Sub Command1\_Click()
Dim Wert As String, Zahl As Double, Einheit As String
Dim i As Integer
Wert = "-234 C"
For i = Len(Wert) To 1 Step -1
 If IsNumeric(Mid(Wert, i, 1)) Then Exit For
Next
Zahl = CDbl(Left(Wert, i))
Einheit = Mid(Trim(Wert), i + 1)
MsgBox Zahl
MsgBox Einheit
End Sub

Gruß
Reinhard