Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Zahl aus einem String auslesen

Zahl aus einem String auslesen
26.07.2016 16:07:02
Peter
Hallo Zusammen,
ich bitte wieder um Eure Hilfe.
In einer Zelle befindet sich folgender Text max. 0,1 .
In einem VBA-Makro soll die Zahl 0,1 ausgelesen werden. Mit meinem Makro wird jedoch 01 ausgelesen. Wie müsste mein Makro verändert werden damit die Zahl 0,1 erhalten wird?

For i=1 to 30
Zahl = NurZahlen(Cells(i, 4))
If InStr(Cells(i, 4).text, "max.") > 0 Then
Zahl = Zahl * 1
If Cells(i, 5) 

Hat jemand eine Idee?
LG, Peter
Anzeige

9
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Zahl aus einem String auslesen
26.07.2016 16:17:20
Oliver
Hallo Peter,
innerhalb der IF-Schleife reicht folgende Formel:
Mid(Cells(i,5).Value,5,10)*1
Hinweis: Das * 1 ist wichtig, weil sonst ein Text entsteht.
Viel Erfolg
Oliver
AW: Zahl aus einem String auslesen
26.07.2016 17:50:40
Peter
Hallo Oliver,
deine Lösung verstehe ich nicht so ganz.
Wie müsste die ganze Zeile aussehen? Muss ich die Zeile in der Function ändern, etwa so?
if Mid(Cells(i,5).Value,5,10)*1 Like "#" Then r = r & Mid(s, z, 1)
LG, Peter
Anzeige
AW: Zahl aus einem String auslesen
27.07.2016 10:33:45
Oliver
Hallo Peter,
das Mid(Cells(i,5).Value,5,10)*1 sollte aus der Zelle den Wert aus Zelle als Dezimalzahl liefern. Insofern kannst Da auf > 0 abfragen oder das Ergebnis in die Variable Zahl aufnehmen.
Grüße
Oliver
AW: Zahl aus einem String auslesen
26.07.2016 16:21:58
UweD
Ich würde es so machen
Sub dsds()
    For i = 1 To 30
        Zahl = Trim(Replace(Cells(i, 4), "max.", "")) * 1
        If Cells(i, 5) <= Zahl Then
            Cells(i, 6) = "erfüllt"
        Else
            Cells(i, 6) = "nicht erfüllt"
        End If
    Next i

End Sub

VBA/HTML-CodeConverter, AddIn für Office 2002-2016 - in VBA geschrieben von Lukas Mosimann. Projektbetreuung:RMH Software & Media

Code erstellt und getestet in Office 15 - mit VBAHTML 12.6.0

Gruß UweD
Anzeige
AW: Zahl aus einem String auslesen
26.07.2016 18:10:07
Daniel
Hi
das Problem ist, dass du das Komma auch mit nehmen musst, sonst ist deine Zahl ja nicht vollständig.
wenn deine Texte das Komma nur in der Zahl enthalten und nicht als Satzzeichen, dann so:
die [] im LIKE-Operator geben an, dass hier mehrere verschiedene Zeichen zur Auswahl stehen, hier die Ziffern und das Komma.


Function NurZahlen(ByVal s As String) As String
Dim z As Long, r As String
For z = 1 To Len(s)
If Mid(s, z, 1) Like "[#,]" Then r = r & Mid(s, z, 1)
Next z
NurZahlen = r
End Function


wenn das Komma auch als Satzzeichen vorkommen könnte, darf es nur übernommen werden wenn es zwischen zwei Ziffern steht. dann etwas aufwendiger:


Function NurZahlen(ByVal s As String) As String
Dim z As Long, r As String
For z = 1 To Len(s)
If Mid(s, z, 1) Like "#" or Mid("x" & s & "x", z, 3) like "#,#" Then r = r & Mid(s,  _
z, 1)
Next z
NurZahlen = r
End Function

Gruß Daniel
Anzeige
AW: Zahl aus einem String auslesen
27.07.2016 13:38:37
Peter
Hallo Daniel,
habe mich für deine Lösung entschieden. Vielen Dank dafür!
Function NurZahlen(ByVal s As String) As String
Dim z As Long, r As String
For z = 1 To Len(s)
If Mid(s, z, 1) Like "#" or Mid("x" & s & "x", z, 3) like "#,#" Then r = r & Mid(s,   _
_
z, 1)
Next z
NurZahlen = r
End Function
Ich möchte mich aber bei jedem für seine Hilfe und wertvollen Vorschläge
noch einmal herzlich bedanken!
Jeder Vorschlag hilft zukünftig derartige Aufgabenstellung zu lösen.
LG,
Peter
Anzeige
AW: Zahl aus einem String auslesen
26.07.2016 18:32:46
Daniel
Hi
eine andere Möglichkeit die Zahl aus dem Text zu extrahieren wäre diese Funktion
Function ZahlExtrahieren(byVal s as string) as string
dim TT as string
for each TT in Split(s, " ")
if isnumeric(TT) then
ZahlExtrahieren = TT
Exit for
end if
Next
End Function
die Zahl muss hier mit Leerzeichen vom Rest getrennt sein.
enthält der Text mehrere zahlen, wird die erste verwendet.
Gruß Daniel
Anzeige
AW: Zahl aus einem String auslesen
26.07.2016 19:19:18
ransi
HAllo Peter,
Schau mal ob du evtl. dies brauchen kannst:
Option Explicit

Sub aufruf()
    Call Extract_Dezimalzahlen("In einer Zelle befindet sich folgender Text max. 0,1. 1234,5678 kann auch und 1234efg")
End Sub


Sub Extract_Dezimalzahlen(strText)
    Dim Regex As Object
    Dim objMatches As Object
    Dim objMatch As Object
    Set Regex = CreateObject("VbScript.Regexp")
    With Regex
        .Global = True
        .Pattern = "\d+,?\d+"
        If .test(strText) = True Then
            Set objMatches = .Execute(strText)
            For Each objMatch In objMatches
                MsgBox objMatch.Value
            Next
        End If
    End With
End Sub



ransi
Anzeige
Sieh dir einfach mal die UDF 'MaskOn' aus ...
27.07.2016 01:02:50
Luc:-?
…dem Archiv an (ZweitPublikation 2014, falls es wieder zugänglich ist), Peter,
die kann noch viel mehr als nur das!
Als ZellFml: =--MaskOn("max. 0,1";"zw") ⇒ 0,1
In VBA-Proz: nVar = CDbl(MaskOn("max. 0,1", "zw"))
Gruß, Luc :-?
Besser informiert mit …
Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige
Anzeige
Anzeige

Infobox / Tutorial

Zahl aus einem String auslesen in Excel VBA


Schritt-für-Schritt-Anleitung

Um eine Zahl aus einem String in Excel VBA zu extrahieren, kannst Du die folgende Methode verwenden:

  1. Öffne den Visual Basic for Applications (VBA) Editor in Excel (ALT + F11).
  2. Erstelle ein neues Modul (Rechtsklick auf "VBAProject" > Einfügen > Modul).
  3. Füge den folgenden Code in das Modul ein:
Function NurZahlen(ByVal s As String) As String
    Dim z As Long, r As String
    For z = 1 To Len(s)
        If Mid(s, z, 1) Like "#" Or Mid("x" & s & "x", z, 3) Like "#,#" Then
            r = r & Mid(s, z, 1)
        End If
    Next z
    NurZahlen = r
End Function
  1. Um die Funktion zu verwenden, rufe sie in einer anderen Funktion oder Sub auf. Beispiel:
Sub Test()
    Dim result As String
    result = NurZahlen("max. 0,1")
    MsgBox result ' Gibt 0,1 aus
End Sub

Häufige Fehler und Lösungen

Problem: Die Funktion gibt nicht die erwartete Zahl zurück.

Lösung: Stelle sicher, dass der String die richtige Formatierung hat. Wenn das Komma als Dezimaltrennzeichen verwendet wird, achte darauf, dass alle relevanten Bedingungen in der Funktion berücksichtigt sind.

Problem: Die Zahl wird als Text und nicht als Zahl dargestellt.

Lösung: Multipliziere das Ergebnis mit 1, um sicherzustellen, dass es als Zahl behandelt wird:

result = NurZahlen("max. 0,1") * 1

Alternative Methoden

Eine weitere Möglichkeit, eine Zahl aus einem Text zu extrahieren, ist die Verwendung von regulären Ausdrücken. Hier ist ein Beispiel:

Function ZahlExtrahieren(ByVal s As String) As String
    Dim Regex As Object
    Set Regex = CreateObject("VbScript.RegExp")
    With Regex
        .Global = True
        .Pattern = "\d+,\d+"
        If .test(s) Then
            ZahlExtrahieren = .Execute(s)(0).Value
        End If
    End With
End Function

Du kannst diese Funktion dann genauso wie die vorherige verwenden, um die Zahl aus einem String zu extrahieren.


Praktische Beispiele

  1. Einfaches Beispiel mit einer Zelle:

    Angenommen, in Zelle A1 steht "max. 0,1":

    Sub Beispiel()
       Dim zahl As String
       zahl = NurZahlen(Cells(1, 1).Value)
       MsgBox zahl ' Gibt 0,1 aus
    End Sub
  2. Verwendung der Funktion in einer Schleife:

    Wenn Du mehrere Zellen überprüfen möchtest:

    Sub Schleife()
       Dim i As Integer
       For i = 1 To 30
           Cells(i, 2).Value = NurZahlen(Cells(i, 1).Value)
       Next i
    End Sub

Tipps für Profis

  • Nutze die Funktion Trim() um unerwünschte Leerzeichen zu entfernen, bevor Du die Zahl extrahierst.
  • Überlege, die von Daniel vorgeschlagene ZahlExtrahieren-Funktion zu verwenden, wenn Du sicherstellen möchtest, dass die Zahl von Leerzeichen umgeben ist.
  • Experimentiere mit der Like-Anweisung, um spezifische Muster in Deinen Strings zu erkennen.

FAQ: Häufige Fragen

1. Wie kann ich mehrere Zahlen aus einem String extrahieren?
Du kannst eine Schleife mit der Split()-Funktion verwenden, um durch die Teile des Strings zu iterieren und jede Zahl zu überprüfen.

2. Was ist der Unterschied zwischen Text und Zahl in VBA?
In VBA wird Text als String behandelt, während Zahlen als numerische Datentypen, wie Integer oder Double, behandelt werden. Um sicherzustellen, dass eine Zahl korrekt verwendet wird, multipliziere sie mit 1 oder verwende die Funktion CDbl().

3. Funktioniert dies in allen Excel-Versionen?
Die vorgestellten Methoden sind in den meisten modernen Excel-Versionen, die VBA unterstützen, anwendbar.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige