'/**
' * @example =getLeastFilteredValue(B1:B4;A1:A4;"eins")
' * @example =getLeastFilteredValue(B1:B4;A1:A4;"eins"; "zwei")
' * @param Range Range, der die Datumliste enthält
' * @param Range Range der die Filtervalues enthält
' * @param Array<Variant> Value nachdem gefiltert werden soll. Es können belibig viele Argumente übergeben werden
' * @return Variant
' */
Public Function getLeastFilteredValue(ByRef iDateRng As Range, ByRef iFilterRng As Range, ParamArray iFilterValues() As Variant) As Variant
Dim rowNr As Long
If iDateRng.Rows.Count <> iFilterRng.Rows.Count Then
'TODO: Fehler sauber abfangen. Die Ranges sind verschieden lang
Err.Raise vbObjectError
End If
'Mal einDatum weit in der Zukunft definieren
getLeastFilteredValue = #12/31/9999#
'Alle Filterfelderdurchgehen
For rowNr = 1 To iFilterRng.Rows.Count
'Prüfen on der Wert aus dem Filterrange einem Filterwert entspricht
If inArray(CVar(iFilterValues), iFilterRng(rowNr, 1).Value) Then
'Prüft ob der entsprechende Wert aus dem Datenrange kleiner als der aktuelle Wert ist. Wennja, diesen übernhemen
If iDateRng(rowNr, 1).Value < getLeastFilteredValue Then getLeastFilteredValue = iDateRng(rowNr, 1).Value
End If
Next rowNr
'Falls nix gefunden wurde, das Datum zurücksetzen
If getLeastFilteredValue = #12/31/9999# Then getLeastFilteredValue = Null
End Function
'/**
' * Prüft ob ein Wert in einem Array vorhanden ist
' * http://wiki.yaslaw.info/dokuwiki/doku.php/vba/functions/array/index#inarray
' * @param Array
' * @param Gesuchter Wert
' * @return Boolean
'*/
Private Function inArray(ByRef iArray As Variant, ByVal iValue As Variant) As Boolean
On Error GoTo Err_Handler
'Falls iArray kein initialisierter Array ist, gehts zur Fehlerbahndlung
Dim i As Long: For i = LBound(iArray) To UBound(iArray)
If iValue = iArray(i) Then inArray = True: Resume Exit_Handler
Next i
Exit_Handler:
Exit Function
Err_Handler:
'Array ist nicht initialisiert. Somit gibts kein Treffer
Resume Exit_Handler
End Function