我有一张包含大量数据的表单,对应于某个组,在本例中为A,B,C,D和E组。
我想运行一个位于另一个工作表上的宏,并且会找到与表格第一列中的内容相对应的最小值和中值。
使用图像,我想运行一个宏来查看单元格F2中的值,然后在C列中给出我在相邻单元格中具有“A”的最小值,依此类推每个组。同样,我希望为每个组计算中位数
任何建议都会非常感谢!
干杯
答案 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范围的值匹配。
rng
:整个数据范围searchValue
:包含要匹配的值的范围,例如: D2(即A)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
表单中的用法