你这里有三个问题:
- 您的第一列是序列而不是组标识符
- 没有 =MEDIANIF()
- 数据透视表也不支持中位数
不是一个好的起点......
广告 #1,您可以将您的 1,2,3,4,1,2,3, ... 更改为 1,1,1,1, 2,2,2, ... 以表明属于一起的内容
ad #2, #3 ... 我建议在 VBA 中定义一个函数 =MEDIANIF();示例:
Function MedianIf(R As Range, Cr As Variant) As Variant
Dim Idx As Integer, Jdx As Integer, A() As Variant, CCnt As Integer, Tmp As Variant
' find array size
CCnt = 0
For Idx = 1 To R.Rows.Count
If R(Idx, 1) = Cr Then CCnt = CCnt + 1
Next Idx
'dim array
ReDim A(CCnt - 1)
' load from range into array
CCnt = 0
For Idx = 1 To R.Rows.Count
If R(Idx, 1) = Cr Then
A(CCnt) = R(Idx, 2)
CCnt = CCnt + 1
End If
Next Idx
' bubble sort
For Jdx = CCnt - 1 To 0 Step -1
For Idx = 0 To Jdx - 1
If A(Idx) > A(Idx + 1) Then
Tmp = A(Idx)
A(Idx) = A(Idx + 1)
A(Idx + 1) = Tmp
End If
Next Idx
Next Jdx
' get Median
If CCnt Mod 2 = 1 Then
MedianIf = A(Int(CCnt / 2))
Else
MedianIf = (A(CCnt / 2 - 1) + A(CCnt / 2)) / 2
End If
End Function
通过选择范围 2 col 的宽度和 x 行向下来使用此功能,例如
=MedianIF($A$1:$B$7,A1)
我们开始了...现在您可以在 =IF(.... , "g", ...) 中使用新函数
所以一个公式适用于所有范围....注意:冒泡排序对于大范围不是很经济