arrays - Excel-根据分数的投票制作数组

标签 arrays excel median

我是 Matlab 专家,但显然我现在无法弄清楚我的生活中的 excel 是什么。我有一个电子表格来记录投票情况。所以我记录每个分数的x票数,即在1到5的范围内,3人投了4票,2人投了3票,1人投了1票。我想找到这些票数的中位数,但我需要首先将它们变成一个数组,否则我只是取票数的中位数。在这种情况下,我无法让数组正常工作。我需要使用上面的示例构建一个数组,看起来像 {4 4 4 3 3 1},然后我可以取其中值(我假设我可以在数组上使用常规中值函数?)。

我意识到这里的问题是我不太了解 Excel。所以我想我只是在寻求一个答案,当我自己无法展示太多作品时,这会让人皱眉。但有人可以给我提示吗?

enter image description here

最佳答案

这个引起了我的兴趣,我确信有一种方法可以使用数组公式来做到这一点,但它们从来都不是我的强项。目前这里是一个 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 不太了解,那么您是如何做到的:

  1. 在 Excel 中按 Alt + F11 打开 VB 编辑器
  2. 在 VB 编辑器菜单中选择“插入”->“模块”
  3. 粘贴上面的代码
  4. 在需要中值的单元格中输入 =MedianArray(B1:F1,B2:F2) ,假设您的分数位于第 1 行 B 至 F 列,并且计数位于正下方。

希望这有帮助。

关于arrays - Excel-根据分数的投票制作数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19781638/

相关文章:

arrays - 如何计算最接近中位数的 k 个数字?

Mysql从excel导入新代码

mysql - excel VBA更新SQL中的现有记录

MySql 查找由另一列分组的列的中位数,而不是整个列的中位数

c - 在 C 中用 gets 读取一个 txt 文件

excel - 如何在 excel VBA 中仅在 "Save-as"而不是在正常的 "Save"上运行宏

algorithm - 两个排序数组的中位数

c# - 在遍历数组后尝试从列表中获取随机元素时出现 ArgumentOutOfRangeException 错误 Unity3D C#

javascript - 获取对象内数组内对象的属性

c++ - C++代码::Blocks “#include <array>” causing error