Excel-从分数上的选票制作数组

我是一个在Matlab的专家,但显然我无法弄清楚我今天的生活。 我有一个电子表格,可以跟踪选票。 因此,我logging了每个分数的x个投票数,即1到5的比例,3人投了4个,2个人投了3个,1个投了1个人。我想find这些投票的中位数,但我需要先把它们变成一个数组,否则我只是取中间数。 在这种情况下,我无法使数组工作。 我需要用上面的例子来构build一个数组,看起来像{4 4 4 3 3 1},然后我可以取中间值(我假设我可以在数组中使用正则中值函数?)。

我意识到这里的问题是我不是很了解excel。 所以我想我只是要求一个答案,当我不能自己做很多工作的时候,这个答案是不被接受的。 但有人可以给我一个提示吗?

在这里输入图像说明

这一个吸引我,我相信有一种方法来做这个数组公式,但他们从来没有我的强项。 暂时这里是一个VBA解决scheme:

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编辑器菜单中select插入 – >模块
  3. 粘贴上面的代码
  4. 在需要中值types=MedianArray(B1:F1,B2:F2)的单元格中,假设您的分数位于第1行B至F行,并且计数正下方。

希望这可以帮助。

我会让其他人发布一个VBA解决scheme,但这里是我用公式做的:

  ABCDE 1 Running Total: 1 1 3 6 6 Median 2 Greater/lesser: < < = > > 3.5 3 Values: 1 2 3 4 5 4 Counts: 1 2 3 

第3行和第4行是你的原始值和计数值。 第1行是计数的运行总数,从左到右。 第2行表示第1行是否大于,小于或等于计数行的总和。

如果在第2行没有= ,那么你只需要从第一列中得到值。 这是通过一个HLookup实现的。

如果在第2行有一个= ,那么你需要得到=列中的值的平均值和第一个>列的值。

看到它的行动

我想知道是否有更优雅的方式!