Вот UDF, хотя я бы пошел с уже заданным ответом.
Func GetMinMedianIf
:
Возвращает минимальное или среднее значение, в соответствии с arg3, для указанного диапазонав arg1, где значение в первом столбце диапазона (arg1) совпадает со значением в диапазоне arg2.
- Arg1
rng
: весь диапазон данных - Arg2
searchValue
: Диапазон, содержащий значение для сопоставления, например, D2 (который является A) - Arg3
MinMedian
: вычисление для выполнения.Min
для минимума, медиана для медианы
Код:
Option Explicit
Public Sub TEST() '<== This is just a test sub to run
Debug.Print GetMinMedianIf([A2:B16], [F2], "Min") ' or "Median"
End Sub
UDF:
Public Function GetMinMedianIf(ByRef rng As Range, ByVal searchValue As Range, ByVal MinMedian As String) As Long
'MinMedian args: "Min" for Min; "Median" for Median
Dim arr(), i As Long, counter As Long
If searchValue.Cells > 1 Then
GetMinMedianIf = CVErr(xlErrValue)
Exit Function
End If
arr = rng.Value
Dim arr1()
ReDim arr1(0 To UBound(arr, 1) - 1)
For i = LBound(arr, 1) To UBound(arr, 1)
If arr(i, 1) = searchValue Then
arr1(counter) = arr(i, 2)
counter = counter + 1
End If
Next i
ReDim Preserve arr1(0 To counter)
Select Case MinMedian
Case "Min"
GetMinMedianIf = Application.WorksheetFunction.Min(arr1)
Case "Median"
GetMinMedianIf = Application.WorksheetFunction.Median(arr1)
End Select
End Function
Использование в листе