Problem mit Max Funktion

  • Excel

Es gibt 7 Antworten in diesem Thema. Der letzte Beitrag () ist von roddy.

    Problem mit Max Funktion

    Möchte eine Funktion schreiben, die den Maximalen Wert einer Spalte ausliest bei gegebenem Zeilenumfang:

    Visual Basic-Quellcode

    1. Public Function leseMaxWertAus (beginZeile, endZeile, Spalte)
    2. Dim maxWert As Integer
    3. 'Finde den Wert
    4. maxWert = ActiveSheet.UsedRange... ?!?!
    5. leseMaxWertAus = maxWert
    6. End Function

    wie wird der max wert korrekt befüllt?
    Mit integer wäre ich etwas vorsichtig.

    Ich habe mal schnell was mit long gemacht. Aber auch da werden Nachkommastellen abgeschnitten...
    Die 1. Funktion ist zwar länger, lässt sich aber nicht durch Datumsformatierte Zellen oder ähnlich verwirren.


    Visual Basic-Quellcode

    1. Sub Los()
    2. Dim erg As Long
    3. erg = leseMaxWertAus(3, 22, 2)
    4. MsgBox erg
    5. erg = leseMaxWertAus1(3, 22, "B")
    6. MsgBox erg
    7. End Sub
    8. Public Function leseMaxWertAus(ByVal BeginZeile As Long, ByVal endZeile As Long, ByVal Spalte As Long) As Long
    9. Dim maxWert As Long
    10. Dim iSpalte As Integer
    11. Dim lZeile As Long
    12. On Error GoTo Fehler
    13. maxWert = -2147483648#
    14. For lZeile = BeginZeile To endZeile
    15. If IsNumeric(Cells(lZeile, Spalte)) Then
    16. If CLng(Cells(lZeile, Spalte)) > maxWert Then
    17. maxWert = CLng(Cells(lZeile, Spalte))
    18. End If
    19. End If
    20. Next lZeile
    21. leseMaxWertAus = maxWert
    22. GoTo Fertig
    23. Fehler:
    24. MsgBox Err.Description, vbOKOnly + vbCritical, "Fehler beim Maxwert ermitteln:"
    25. Err.Clear
    26. Fertig:
    27. On Error GoTo 0
    28. End Function
    29. Public Function leseMaxWertAus1(ByVal BeginZeile As Long, ByVal endZeile As Long, ByVal Spalte As String) As Long
    30. Dim bereich As String
    31. bereich = Spalte & Trim(Str(BeginZeile)) & ":" & Spalte & Trim(Str(endZeile))
    32. leseMaxWertAus1 = WorksheetFunction.Max(Range(bereich))
    33. End Function
    Gruß
    Peterfido

    Keine Unterstützung per PN!

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „peterfido“ ()

    Gute Frage, wird in diesem Fall nicht benötigt... Außerdem muss es beim ersten Mal deaktiviert werden, sonst macht das 2 Mal keinen Sinn...

    Ich habs mal rausgenommen. Für welche von beiden Funktionen hast Du Dich entschieden?
    Gruß
    Peterfido

    Keine Unterstützung per PN!
    hab mich für die erste Variante entschieden. Wollte Sie noch umschreiben, um einen minimalen Wert aus dem Bereich herauszufinden.

    Visual Basic-Quellcode

    1. Public Function leseMinWertAus(ByVal BeginZeile As Long, ByVal endZeile As Long, ByVal spalte As Long) As Long
    2. On Error GoTo Fehler
    3. minWert = 2147483648#
    4. For lZeile = BeginZeile To endZeile
    5. If IsNumeric(Cells(lZeile, spalte)) Then
    6. If CLng(Cells(lZeile, spalte)) < minWert Then
    7. minWert = CLng(Cells(lZeile, spalte))
    8. End If
    9. End If
    10. Next lZeile
    11. leseMinWertAus = minWert
    12. GoTo Fertig
    13. Fehler:
    14. MsgBox Err.Description, vbOKOnly + vbCritical, "Fehler beim Ermitteln des min Werts:"
    15. Err.Clear
    16. Fertig:
    17. On Error GoTo 0
    18. End Function

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „XtrEvil“ ()

    Dies lässt sich auch mit den Funktionen WorksheetFunction.Max bzw. WorksheetFunction.Min machen.

    Beispielsweise so:

    Visual Basic-Quellcode

    1. leseMaxWertAus = WorksheetFunction.Max(Range(Cells(beginZeile, Spalte), Cells(endZeile, Spalte)))
    Ist doch meine 2. Funktion, roddy...
    inkl der Bemerkung, dass die Worksheet Funktion bei bestimmten Zellinhalten nicht immer das gewünschte Ergebnis liefert.
    Gruß
    Peterfido

    Keine Unterstützung per PN!