Нахождение минимальных и медианных значений в столбце, если они соответствуют критериям, используя vba - PullRequest
0 голосов
/ 06 июня 2018

У меня есть лист с загрузкой данных, который соответствует определенной группе, в данном случае это группы A, B, C, D и E.

Я хотел бы запустить макрос, который будет включендругой лист и найдет минимальные и медианные значения, которые соответствуют тому, что находится в первом столбце таблицы.

image

Используя изображение, я хотел бы запустить макрос, которыйбудет смотреть на значение в ячейке F2, а затем дать мне минимальное значение в столбце C, который имеет «A» в соседней ячейке и так далее для каждой группы.Точно так же я хотел бы, чтобы медиана была затем рассчитана для каждой группы

Любые предложения будут высоко оценены!

Приветствия

Ответы [ 2 ]

0 голосов
/ 06 июня 2018

Вот UDF, хотя я бы пошел с уже заданным ответом.

Func GetMinMedianIf:

Возвращает минимальное или среднее значение, в соответствии с arg3, для указанного диапазонав arg1, где значение в первом столбце диапазона (arg1) совпадает со значением в диапазоне arg2.

  1. Arg1 rng: весь диапазон данных
  2. Arg2 searchValue: Диапазон, содержащий значение для сопоставления, например, D2 (который является A)
  3. 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

Использование в листе

UDF

0 голосов
/ 06 июня 2018

В G2 и вниз

=min(if(b$2:b$20=f2,c$2:c$20))

В H2 и вниз

=median(if(b$2:b$20=f2,c$2:c$20))

При необходимости настройте диапазоны.

Введите оба в виде формул массива - используйте Ctrl + Shift+ Введите для подтверждения.Если все сделано правильно, фигурные скобки будут окружать формулу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...