如果列中的最小值和中值使用vba匹配,则查找列中的最小值和中值

时间:2018-06-06 13:26:20

标签: vba excel-vba criteria median minimum

我有一张包含大量数据的表单,对应于某个组,在本例中为A,B,C,D和E组。

我想运行一个位于另一个工作表上的宏,并且会找到与表格第一列中的内容相对应的最小值和中值。

Image

使用图像,我想运行一个宏来查看单元格F2中的值,然后在C列中给出我在相邻单元格中具有“A”的最小值,依此类推每个组。同样,我希望为每个组计算中位数

任何建议都会非常感谢!

干杯

2 个答案:

答案 0 :(得分:1)

在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 + Enter确认。如果正确完成,花括号将围绕公式。

答案 1 :(得分:0)

这是一个UDF,虽然我会回答已经给出的答案。

Func GetMinMedianIf

根据arg3,返回arg1中指定范围的最小值或中值,其中范围的第一列(arg1)中的值与arg2范围的值匹配。

  1. Arg1 rng:整个数据范围
  2. Arg2 searchValue:包含要​​匹配的值的范围,例如: D2(即A)
  3. Arg3 MinMedian:要执行的计算。最低Min,中位数为中位数
  4. <强>代码:

    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