我是 Matlab 专家,但显然我现在无法弄清楚我的生活中的 excel 是什么。我有一个电子表格来记录投票情况。所以我记录每个分数的x票数,即在1到5的范围内,3人投了4票,2人投了3票,1人投了1票。我想找到这些票数的中位数,但我需要首先将它们变成一个数组,否则我只是取票数的中位数。在这种情况下,我无法让数组正常工作。我需要使用上面的示例构建一个数组,看起来像 {4 4 4 3 3 1},然后我可以取其中值(我假设我可以在数组上使用常规中值函数?)。
我意识到这里的问题是我不太了解 Excel。所以我想我只是在寻求一个答案,当我自己无法展示太多作品时,这会让人皱眉。但有人可以给我提示吗?
最佳答案
这个引起了我的兴趣,我确信有一种方法可以使用数组公式来做到这一点,但它们从来都不是我的强项。目前这里是一个 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 列,并且计数位于正下方。
希望这有帮助。
关于arrays - Excel-根据分数的投票制作数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19781638/