Zahlen extrahieren von Text

.. das wohl mächtigste Werkzeug in Bill Gates' Büro-Sippe. Ob reine Formeln, PowerQuery oder VBA. Hier bleiben kaum Wünsche unerfüllt.
Benutzeravatar
thowe
Beiträge: 196
Registriert: 12. Sep 2022, 16:57
Hat sich bedankt: 78 Mal
Danksagung erhalten: 67 Mal
Kontaktdaten:

Zahlen extrahieren von Text

#1

Beitrag von thowe »

Hallöchen, eine kleine Spielerei.

Mit dieser Funktion TEXTHELPER_ExtractNumber() erlaubt es Zahlen aus einem übergebenen Text zu ermitteln und gibt die Zahl als Long zurück.
Zum Beispiel ergibt der Aufruf TEXTHELPER_ExtractNumber("chkMyCheckbox16") die Rückgabe von 16 (Long). Dies ist auch ein sinnvoller Anwendungsfall.

Zu beachten gilt, dass eine Null (0) zurückgegeben wird, wenn sich keine Zahl im übergebenen Text befindet. Vielleicht anders lösen....?

Viel Spaß

Code: Alles auswählen

'-------------------------------------------------------------
'
' @purpose:         extract every Number in a given String
'                   meaningfull use for example: get the id
'                   of a programmatically added Control in a
'                   Userform or Worksheet from .Name or from
'                   .Caption
' @params:          -
' @author:          thowe
' @deprecated:      -
' @version:         0.0.1
' @source:          inspired by Messud Azlmath
' @module:          mod_TEXTHELPER
' @ notes:          please remind default return is Zero 0,
'                   to prevent any error, if the function
'                   gets a empty paramter (String)
' @date             26.03.2024
'
'-------------------------------------------------------------
'  _          _        ___     _ _
' | |__   ___| |__    ( _ )   | |_| |__   _____      _____
' | '_ \ / _ \ '_ \   / _ \/\ | __| '_ \ / _ \ \ /\ / / _ \
' | | | |  __/ |_) | | (_>  < | |_| | | | (_) \ V  V /  __/
' |_| |_|\___|_.__/   \___/\/  \__|_| |_|\___/ \_/\_/ \___|
'
'-------------------------------------------------------------
'
' feel free to visit: https:vbasteleien.de
'
'-------------------------------------------------------------


Function TEXTHELPER_ExtractNumber(strText As String) As Long

    Dim intPosition As Integer
    Dim strTempString As String
    Dim strTempCharacter As String
    
    'remove Blankspaces (fronting, trailing)
    strTempString = Trim(strText)
    'start with the first Character in the given String
    intPosition = 1
    
    'cycle through the String until is numeric or not blank/empty
    Do While Not (IsNumeric(strTempString) Or (strTempString = ""))
    
        'catch the actual Character in the string
        strTempCharacter = Mid(strTempString, intPosition, 1)
        'remove every nonnumeric character from the string
        If Not IsNumeric(strTempCharacter) Then
            strTempString = Trim(Replace(strTempString, strTempCharacter, ""))
        Else
            'next character
            intPosition = intPosition + 1
        End If
    
    Loop
    
    'default return, if no string is given is Zero, 0
    'this should prevent to run in an error in the Caller
    If strTempString = "" Then strTempString = 0
    
    TEXTHELPER_ExtractNumber = CLng(strTempString)

End Function

Folgende Benutzer bedankten sich beim Autor thowe für den Beitrag (Insgesamt 2):
Wisi82, d'r Bastler
Benutzeravatar
thowe
Beiträge: 196
Registriert: 12. Sep 2022, 16:57
Hat sich bedankt: 78 Mal
Danksagung erhalten: 67 Mal
Kontaktdaten:

Re: Zahlen extrahieren von Text

#2

Beitrag von thowe »

Hallo!

Man kann natürlich die Funktion auch so verwenden, dass wenn sie per default Null (0) zurückgibt, die Prüfung ob ein String valid ist, weil eben eine Zahl oder eben nicht eine Zahl enthalten ist, eine Null (0) oder die Zahl (Long) zurückgibt....

LG
Folgende Benutzer bedankten sich beim Autor thowe für den Beitrag:
d'r Bastler
Benutzeravatar
Wisi82
Beiträge: 79
Registriert: 14. Apr 2023, 14:22
Hat sich bedankt: 11 Mal
Danksagung erhalten: 25 Mal
Kontaktdaten:

Re: Zahlen extrahieren von Text

#3

Beitrag von Wisi82 »

Nett, kann man bestimmt mal verwenden :D
Herzlichen Dank für den Codeschnipsel

Beste Grüsse Erwin
Windows 10 Home, Office 2019 Professional, Aber meistens ist es der Kopf, welcher Verwirrung stiftet ;)
Benutzeravatar
d'r Bastler
Beiträge: 670
Registriert: 29. Aug 2022, 13:20
Hat sich bedankt: 175 Mal
Danksagung erhalten: 90 Mal

Re: Zahlen extrahieren von Text

#4

Beitrag von d'r Bastler »

Moin allerseits,
wie könnte es anders sein, als dass bemerkenswerte Schnipsel vom Kollegen thowe einen Bastler nicht auch zum schnibbeln verleiten :lol: Mein Schnipsel nutzt die erweiterten Möglichkeiten der Funktion durch Parameter und Optionen. Führt dadurch aber auch zu einem meiner Kenntnis nach in VBA noch nicht gelöstem Problem. Also erst einmal mein Schnipsel [Allg. Modul]:

Code: Alles auswählen

Option Explicit

Function ABC(Val As Variant, Par As Byte, Optional Opt As Byte)
Dim i As Integer, sFun As String

Select Case Par
    Case 1
        For i = 1 To Len(Val)           'Großbuchstaben
            If Asc(Mid(Val, i, 1)) >= 65 And Asc(Mid(Val, i, 1)) <= 90 Then
        sFun = sFun & Mid(Val, i, 1) ' & "_"
            End If
        Next i
        sFun = "Capitals " & sFun
    Case 2
        For i = 1 To Len(Val)           'Kleinbuchstaben
            If Asc(Mid(Val, i, 1)) >= 97 And Asc(Mid(Val, i, 1)) <= 122 Then
        sFun = sFun & Mid(Val, i, 1) ' & "_"
            End If
        Next i
        sFun = "Smalls " & sFun
    Case 3
        For i = 1 To Len(Val)           'Ziffern
            If Asc(Mid(Val, i, 1)) >= 48 And Asc(Mid(Val, i, 1)) <= 57 Then
        sFun = sFun & Mid(Val, i, 1) ' & "_"
            End If
        Next i
        sFun = "Numbers " & sFun
    Case 4
        For i = 1 To Len(Val)           'Sonderzeichen (nicht volständig geprüft!)
            Select Case Asc(Mid(Val, i, 1))
                Case 33 To 47, 58 To 64, 91 To 96, 123 To 126, 128, 167, 176, 178 To 181, 196, 214, 220, 223, 228, 246, 252
                    sFun = sFun & Mid(Val, i, 1) ' & "_"
            End Select
        Next i
        sFun = "Specials " & sFun
    Case Else
        sFun = "#PARAMETER!"
        GoTo NXT
End Select

sFun = sFun ' & Val

If Opt <> 0 Then
    MsgBox sFun
    ABC = ""
    Exit Function
End If

NXT:
ABC = sFun

End Function
Neben dem Wert val erwartet die Funktion ABC einen Parameter par und optional noch opt als Option. Als Parameter sind die Ziffern 1 bis 4 erlaubt, als Option nix, 0 oder 1. Als Ergebnis liefert sie [1] die Großbuchstaben, [2] die Kleinbuchstaben, [3] die Ziffern und die [4] Sonderzeichen des Wertes. Als Option [=1] kann die Ausgabe statt in die aufrufenden Zelle in eine MessageBox umgeleitet werden (wozu auch immer ;) )

Warum komme ich hier mit dieser Spielerei um die Ecke? Mein ungelöstes Problem: Wie kann ich User Defined Functions (UDF) den gleichen Komfort angedeihen lassen, wie sie XL-interne Funktionen haben, nämlich:
  • im DropDown der Funktionen eine Beschreibung als Tooltip
  • in der Bearbeitungsleiste Hinweise (wieder als Tooltip) zum Sinn und Zweck des Arguments (ggf. als Auswahl) bzw. die zur Verfügung stehenden Varianten
Meine Recherche zum Thema hat eine VBA-Lösung, die aber leider nur im Funktions-Assistent funktioniert (oder habe ich sie falsch implementiert?) oder aber auf einem zusätzlichen AddOn basiert, von dem ich nicht glaube, dass ich es möchte, weil es kaum ein anderer Nutzer installieren wird. Soll so einfach sein, wie bei anderen Funktionen.

Hat jemand eine sinnvolle Lösung?

Ganz lieben Dank! und schlaft gut!
Folgende Benutzer bedankten sich beim Autor d'r Bastler für den Beitrag:
thowe
d'r Bastler von den VBAsteleien.de
Win 10 + Office 2019 & Win11 + Office 2021 + Visio 2019 pro & macOS.X15 + Office2019pro & Android12 & XL365
Benutzeravatar
thowe
Beiträge: 196
Registriert: 12. Sep 2022, 16:57
Hat sich bedankt: 78 Mal
Danksagung erhalten: 67 Mal
Kontaktdaten:

Re: Zahlen extrahieren von Text

#5

Beitrag von thowe »

Hallo Heb,

ich habe erst heute deine faszinierende Interpretation gesehen.
Schön bemerkenswert, was mit KI (kollektiver Intelligenz) erreicht wird. Sei es nur als Motivationsstupser...

Danke dir für dieses um die Ecke denken. *WowEchtSuper*

Bezüglich Tooltips, da muss ich in meinem Fundus nun wirklich mal kramen. Denn auch ich habe schon öfters an einen Tooltips gedacht und kann mich erinnern, so etwas einmal gefunden zu haben. Denn das wäre auch für das cremige (H)Appchen etwas...

LG
Benutzeravatar
thowe
Beiträge: 196
Registriert: 12. Sep 2022, 16:57
Hat sich bedankt: 78 Mal
Danksagung erhalten: 67 Mal
Kontaktdaten:

Re: Zahlen extrahieren von Text

#6

Beitrag von thowe »

Hallo Heb,

(auch) ich bin nun dem Thema Tooltip bei UDF nachgegeangen.

Hier die klare Antwort. Ausgenommen Excel-DNA IntelliSense (Add-In) gibt es nichts. Siehe hier:
https://stackoverflow.com/questions/426 ... er-4264787
Folgende Benutzer bedankten sich beim Autor thowe für den Beitrag:
d'r Bastler
Benutzeravatar
d'r Bastler
Beiträge: 670
Registriert: 29. Aug 2022, 13:20
Hat sich bedankt: 175 Mal
Danksagung erhalten: 90 Mal

Re: Zahlen extrahieren von Text

#7

Beitrag von d'r Bastler »

Moin Tom,

schade, denn soweit wie Deine Recherche (Dank dafür!) war ich inzwischen auch schon.

Nachdem Du als Klassenbester ja immer wieder mit Klassen jonglierst: Ließe sich so etwas eventuell als ein ebensolche realisieren? Funktion als Klasse mit passenden Pars und Opts?

Dann hätten wir hier aber einen deutlich getrüffelten Clou!

LG
d'r Bastler von den VBAsteleien.de
Win 10 + Office 2019 & Win11 + Office 2021 + Visio 2019 pro & macOS.X15 + Office2019pro & Android12 & XL365
Benutzeravatar
thowe
Beiträge: 196
Registriert: 12. Sep 2022, 16:57
Hat sich bedankt: 78 Mal
Danksagung erhalten: 67 Mal
Kontaktdaten:

Re: Zahlen extrahieren von Text

#8

Beitrag von thowe »

Hallo Heb,

danke für deine Antwort

quer um die Ecke gedacht und mißbräuchliche Verwendung von Klassen... *malÜberleg*

Params = Parameter & Ops = Option...?

lg & nachträglich moin....
Benutzeravatar
d'r Bastler
Beiträge: 670
Registriert: 29. Aug 2022, 13:20
Hat sich bedankt: 175 Mal
Danksagung erhalten: 90 Mal

Re: Zahlen extrahieren von Text

#9

Beitrag von d'r Bastler »

Moin allerseits,

um meine vollmundige Behauptung einer bereits existierenden VBA-Lösung zum Thema ToolTips für selbstgebaute Funktionen zu illustrieren, habe ich hier ein tatsächlich einigermaßen nutzbares Beispiel gebaut. Die Funktion VAT an sich ist banal: Je nach Parameter bVAT werden zum Nettobetrag Val null, sieben oder 19% Märchensteuer addiert. Ein einfacher Multiplikator ist hartcodiert (im Beispiel drei), ließe sich aber auch noch leicht als Parameter implementieren.

Anders als bei den Funktionen von MS erscheinen die hilfreichen Ergänzungen leider nicht als Maus-geführter ToolTip neben de Funktionsl-DropDown, sondern erst nach einem Doppelklick auf das fx-Symbol links neben der Bearbeitungsleiste. Aber immerhin funktioniert wenigstens das.

In anderen Foren wurde dazu berichtet, dass die nun im Funktionen einfügen-Dialog sichtbaren Texte erst nach einem Neustart von XL zu finden wären. Das kann ich nicht bestätigen. Ein einfacher Auf der Sub System kann beliebig viele Funktionen anmelden. Die bedarfsgerecht zu platzieren sei dem Nachbastler ;) überlassen.

Hier mal der eigentlich ganz simple Code:

Code: Alles auswählen

Option Explicit
Public App As Application, Wsf As WorksheetFunction

Sub System()
Set App = Application
Set Wsf = WorksheetFunction
    
App.MacroOptions Macro:="VAT", _
    Description:="Nettowert soll verdreifacht und ggf. versteuert werden", _
    Category:="MyFunctions", _
    ArgumentDescriptions:=Array("Nettobetrag", "zzgl. MwSt. 0, 7 , 19% (;0...2))")

End Sub

Public Function VAT(Val As Single, bVAT As Byte)
System
Val = Val * 3

Select Case bVAT
    Case 0
        VAT = Val
    Case 1
        VAT = Val + (Val * 0.07)
    Case 2
        VAT = Val + (Val * 0.19)
    Case Else
        VAT = "#bVAT!"
        Exit Function
End Select

VAT = Wsf.Round(VAT, 2)

End Function
#Tooltips für UDF, #VBA-Lösung, ohne AddOns, API usw.

Und nun viel Spaß damit und ich freue mich diebisch darauf, dass thowe vielleicht tatsächlich mit einer missbrauchten (welch böses Wort!) Klasse um die Ecke kommt. Aber halt! Ich lese gerade nochmal nach und stelle fest, dass ich mich ziemlich dusselig ausgedrückt habe: Esgeht nicht darum Funktionen als Klasse zu registrieren, sondern eben die ToolTips als Klasse zu erfinden. Sorry, lieber Tom! :oops:

Schönes Wochenende!
d'r Bastler von den VBAsteleien.de
Win 10 + Office 2019 & Win11 + Office 2021 + Visio 2019 pro & macOS.X15 + Office2019pro & Android12 & XL365
Benutzeravatar
thowe
Beiträge: 196
Registriert: 12. Sep 2022, 16:57
Hat sich bedankt: 78 Mal
Danksagung erhalten: 67 Mal
Kontaktdaten:

Re: Zahlen extrahieren von Text

#10

Beitrag von thowe »

Naja und schönen guten Morgen, lieber Heb, aus der 30 Grad heißen Vulkanlandlavalandschaft....

Also in der Zeit der Skandalisierungsmotivation und Empörungsdemokratie ist es wichtig auf die normative Kaft des Faktischen (das Pure!!!!) zurück zu kehren! Richtig, zu kehren, auszukehren.

Auskehren, den Staub, den die autokratisch Intentierte Schwurbelei manch' Velanu's ( (C) thowe: veganer, verschwu..., laktesoeintoleranten Nussalergiker) mit Ihrer Aeropenetration (auf vulkanländisch, "Luftbuderei") daherbläst, und die Einfachheit der strukturellen Werthaltung bedeckt.

Etymologisch betrachtet drückt miss (keine Schönkheitskönigin!) aus) sondern das Gegenteil, Mangel, Fehler und eben Gegeneil. Wenn ich mir so manch workaorund in der Excel-Welt (auch im Formelbereich) ansehe, so liegt - eben dieser - tadelhafter Gebrauch mancher Funktionen schon vor..... :roll:

Ende mit meiner Neuromasturbation.... (Hirnwich.... -> nachdem in Bük (HU) der Bahnhof Wichs heißt, behaupte ich einfach, ich habe dort eben mal mein Hirn verschleudert....)

Zum Thema:

Wenn man die angedachte Lösung via Klasse verwendet, ist man durch das Implementiern (implements -> auch das gibt es in VBA) naher der AddIn Lösung. -> hat aber den Charme (wenn überhaupt so Umsetzbar.... nichts instalieren zu müssen

Bei Beschwerden über die spitzohrige Meinugsbildung eines Vulkanlandveterans zum Kommunikationsstrukturwandel, sollen diese Bedeutungsbekundungen an mich gesandt werden.
Antworten

Wer ist online?

Mitglieder in diesem Forum: Bing [Bot] und 0 Gäste