VBA Zahlen aus String seperat abspeichern

  • Hallo an alle! Ich brauche bei folgendem Problem ein wenig Hilfe:

    Eine Variable "Bereich" kann z.B. folgendermaßen aussehen: "3-5", "3<-6", ">160"
    Es soll jetzt überprüft werden, ob eine Zahl (z.B. 4) in einem solch möglichen Bereich liegt.

    Ich habe mir vorgestellt, dass der Code nun Zeichen für Zeichen überprüft. Alle Zahlen werden in eine Variable "Zahl1" abgespeichert, bis ein Zeichen erfolgt, dass keine Zahl ist. Dann werden alle Zeichen in eine Variable abgespeichert "Zeichen", bis wieder eine Zahl erfolgt. Danach werden alle weiterfolgenden Zahlen in eine Variable "Zahl2" abgespeichert.

    Beispielsweise wird aus Bereich = "3-5" :
    Zahl 1 = 3
    Zeichen = "-"
    Zahl 2 = 5

    Oder aus ">160"
    Zahl 1 = 0
    Zeichen = ">"
    Zahl 2 = 160

    Oder aus "3<-6"
    Zahl 1 = 3
    Zeichen = "<-"
    Zahl 2 = 6

    Es werden nur positive Zahlen eingegeben.

  • <- sollte vermutlich <= sein, oder ?

    ansich fällt mir spontan keine bessere möglichkeit ein. du musst den string jedenfalls
    zerlegen und die zahlen rausfiltern. prüfen obs ne zahl is kannste mit der funktion
    isnumeric(). die zeichen bekommst entweder mit ner kombination aus left und right oder
    mit mid müsste es auch gehn.

    hast da jetzt noch ne bestimmte frage ? kann nämlich oben weder ne frage noch
    n problem rauslesen...

  • Problem ist das Coden, da ich in VBA noch recht unerfahren bin ^^.

    Bisher schaut es so aus:

    Dim Bereich, Zeichen, Zahl1, Zahl2 As String
    Dim Cut As Double

    Cut = 0
    Bereich = "3-4"

    For i = 1 To Len(Bereich)

    If Cut = 0 Then

    If IsNumeric(Mid(Bereich, 1)) Then
    Zahl1 = Zahl1 & Mid(Bereich, i, 1)
    Else
    Zeichen = Zeichen & Mid(Bereich, i, 1)
    Cut = 1
    End If

    End If


    If Cut = 1 Then

    If IsNumeric(Mid(Bereich, 1)) Then
    Zahl2 = Zahl2 & Mid(Bereich, i, 1)
    End If

    End If

    Next i

    Leider ist jetzt Zeichen = 3 und Zahl1, Zahl2 sind leer

  • Oh lag daran, dass ich das "i" 2x bei (Bereich, i, 1) vergessen hab ...

    Gibts ne bessere Lösung als mein Code?

  • wie kommst du zu dem bereich ?
    muss der im string-format sein ?

    sonst würd ich n array anlegen...

    arrBereich(0,1) = "3"
    arrBereich(0,2) = "4"
    arrBereich(0,3) = "-"

    so kannste dir mehrere bereiche definieren und hast direkten zugriff.

    ansonsten passt der grundgedanke, doch soviel if brauchst net...

    warum du ein zahl1 = zahl1 & zeichen machst versteh ich nicht ganz.
    du willst ja wirklich des haben, und nicht nur anhängen...

  • Oh klasse, funktioniert schon prima, vielen Dank!

    Jetzt muss es noch ein wenig angepasst werden:
    Nutzer können z.B. "3-4" eintragen, aber auch "<=160" usw.

    Code
    For i = 1 To Len(Bereich)
        Wert = Mid(Bereich, i, 1)
        If IsNumeric(Wert) Then
            If Cut = 0 And Zahl1 = "" Then: Zahl1 = Wert
            If Cut = 1 And Zahl2 = "" Then: Zahl2 = Wert
        Else
            Zeichen = Wert
            Cut = 1
        End If
    Next i

    Ich hab den Cut reingetan, denn bei mir gab es das Problem, da Zahl1 = Zahl2 herauskam.

    Das Funktioniert nun leider nicht, wenn man "<160" eingibt!
    Bei Eingabe von "<160" kommt nur Zahl2 = 1 raus. Zahl1, Zeichen bleiben leer

  • Code
    For i = 1 To Len(Bereich)
        Wert = Mid(Bereich, i, 1)
        If IsNumeric(Wert) Then
            If Cut = 0 Then: Zahl1 = Zahl1 & Wert
            If Cut = 1 Then: Zahl2 = Zahl2 & Wert
        Else
            Zeichen = Zeichen & Wert
            Cut = 1
        End If
    Next i

    Also so funktioniert es.
    Zahl1 = Zahl1 & Wert hab ich gemacht, da die Zahlen ja mehrstellig sein können :).