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:
Danke im Voraus.
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.
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 5258536503
Url: https://administrator.de/forum/maxwert-aus-alphanumerischer-spalte-ermitteln-5258536503.html
Ausgedruckt am: 22.12.2024 um 13:12 Uhr
3 Kommentare
Neuester Kommentar
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
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
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