Guten Abend,
ich habe mir in einem Excel-Projekt eine Function programmiert, welche mir den Inputwert in "Tabelle1".Range("A:A") sucht und den dazugehörigen Wert aus Spalte B zurück gibt.
Ich habe jetzt noch in dieser Suchfunktion den Fall abgedeckt, dass wenn eine Kommazahl abgefragt wird, diese aber nicht so in der Tabelle vorkommt, auf ihre Vorletzte Kommastelle gerundet wird (also 0,987654 rund 0,98765). Dieser gerundete Wert wird der Funktion nun wieder zugeführt. Der Spaß verläuft also rekursiv. Wenn ich nun meine Funktion mit einem Wert füttere, welcher direkt in der Tabelle vorkommt, gibt Sie mir das Korrekte Ergebnis. Muss die Funktion aber erst einmal in die Rekursion gehen ist der Rückgabewert immer 0!
Option Explicit
Dim Ergebnis As Range
Dim letzteZeile As Long
Dim Datenbasis As Worksheet
Dim DezSep As String
Dim a As Integer
Dim b As Double
Public Function QuantilFinder(q As Double) As Double
Debug.Print "Quantilsuche für " & q
Set Datenbasis = ThisWorkbook.Worksheets("Tabelle1")
letzteZeile = Datenbasis.Range("A" & Rows.Count).End(xlUp).Row
With Datenbasis
Set Ergebnis = Datenbasis.Range("A2:A" & letzteZeile).Find(q, LookIn:=xlValues, LookAt:=xlWhole)
If Ergebnis Is Nothing Then
DezSep = IIf("0.5" * 2 = 1, ".", ",")
a = Len(Str(Abs(q))) - InStrRev(CStr(Abs(q)), DezSep) - 1
q = WorksheetFunction.Round(q, a)
QuantilFinder (q)
Else:
Debug.Print "Quantil = " & Ergebnis.Offset(0, 1).Value 'Ergebnis.Offset hat hier den Korrekten wert (immer/auch wenn es den Wert rekursiv ermitteln musste)
QuantilFinder = Ergebnis.Offset(0, 1).Value 'liefert mir aber immer, wenn es mindestens einen rekursiven durchlauf hatte eine 0
End If
End With
End Function
Sub test()
b = InputBox("b eingeben")
b = QuantilFinder(b)
Debug.Print "Quantil = " & b
End Sub
|