这个引起了我的兴趣,我确信有一种方法可以使用数组公式来做到这一点,但它们从来都不是我的强项。暂时这里是一个VBA解决方案:
Function MedianArray(rngScore As Range, rngCount As Range) As Double
Dim arrS() As Variant, arrC() As Variant, arrM() As Variant
Dim i As Integer, j As Integer, k As Integer
Dim d As Double
arrS = rngScore
arrC = rngCount
d = WorksheetFunction.Sum(rngCount)
ReDim arrM(1 To d, 1 To 1)
k = 1
For i = 1 To UBound(arrS, 2)
For j = 0 To arrC(1, i) - 1
arrM(k, 1) = arrS(1, i)
k = k + 1
Next j
Next i
MedianArray = WorksheetFunction.Median(arrM())
End Function
鉴于您说您对 VBA 了解不多,这就是您的操作方法:
- 在 Excel 中按 Alt + F11 打开 VB 编辑器
- 在 VB 编辑器菜单中选择插入 -> 模块
- 粘贴上面的代码
- 在您需要中值类型的单元格中
=MedianArray(B1:F1,B2:F2)
,假设您的分数在第 1 行 B 到 F 列中,并且计数在正下方。
希望这可以帮助。