mreske
Goto Top

Maxwert aus alphanumerischer Spalte ermitteln

Guten abend zusammen,

ich habe im Modul 1 eine Funktion zur ermitteln des MaxWertes (siehe unten).
Mit der Formel "=fncExNumber(A2:A25)" kann ich bspw. den Maxwert aus der Range A2:A25 ermitteln.
Ich möchte das Ergebnis aber in einer Msgbox anzeigen lassen.
Weiß jemand, wie ich die Funktion in einer Msgbox ausgeben kann?
Msgbox fncExNumber("B2:B25") funktioniert leider nicht.

Modul 1:

Option Explicit
Private Function fncExNumber(rngRange As Range) As Double
Dim objRegEx As Object
Dim objMatch As Object
Dim rngCell As Range
Dim lngIndex As Long
Dim lngTMP As Long
Set objRegEx = CreateObject("VbScript.RegExp")  
For Each rngCell In rngRange
With objRegEx
.Global = True
.IgnoreCase = True
.MultiLine = True
.Pattern = "\d+"  
Set objMatch = .Execute(rngCell)
End With
If objMatch.Count > 0 Then
For lngIndex = 0 To objMatch.Count - 1
lngTMP = Application.Max(objMatch(lngIndex).Value, lngTMP)
Next lngIndex
End If
Next rngCell
Set objRegEx = Nothing
Set objMatch = Nothing
fncExNumber = lngTMP
End Function

Danke im Voraus.

Content-Key: 5258536503

Url: https://administrator.de/contentid/5258536503

Printed on: April 27, 2024 at 10:04 o'clock

Member: DivideByZero
DivideByZero Jan 08, 2023 at 20:36:22 (UTC)
Goto Top
Hallo mreske,

ich kann das von unterwegs nicht testen, allerdings dürfte es ein Type Mismatch geben.
Zunächst arbeitest Du intern in der Funktion mit Long-Zahlen, gibst dann aber als Funktionsergebnis ein Double zurück. Wieso? Da kann ja gar keine Gleitkommazahl entstehen.
Allerdings dürften die lokalen Variablen auch falsch sein, denn .Max liefert Double zurück, siehe Application.Max.
Und für MsgBox solltest Du mal die Typumwandlung nach String bemühen, z.B. mit Format(a,b,c).

Viele Grüße

DivideByZero
Mitglied: 5175293307
Solution 5175293307 Jan 09, 2023 updated at 10:50:06 (UTC)
Goto Top
Option Explicit
Function fncExNumber(rng As Range) As Double
    Dim regex As Object, cell As Range, matches As Object, dblMax As Double, match As Object
    Set regex = CreateObject("vbscript.regexp")  
    regex.Global = True : regex.IgnoreCase = true
    regex.Pattern = "\d+"  
    For Each cell In rng
        Set matches = regex.Execute(cell.Value)
        If matches.Count > 0 Then
            For Each match In matches
                dblMax = WorksheetFunction.Max(CDbl(match.Value), dblMax)
            Next
        End If
    Next
    Set regex = Nothing
    set matches = Nothing
    set match = Nothing
    fncExNumber = dblMax
End Function

Sub Test()
    MsgBox fncExNumber(ActiveSheet.Range("B2:B25")), vbInformation  
End Sub

Gruß wurstel
Member: mreske
mreske Jan 09, 2023 at 11:09:57 (UTC)
Goto Top
Hallo wurstel,
vielen Dank, genau das hatte ich gesucht.
Tausend dank!
Gruß